From afea6d6a1ccac139446038d62b940c4725dbeea6 Mon Sep 17 00:00:00 2001 From: Ark0N Date: Sun, 7 Jun 2026 03:15:29 +0200 Subject: [PATCH] feat(web): gesture-control overlay integration (Phase 5, opt-in via CODEMAN_GESTURE=1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Loads a hand-tracking overlay into the dashboard that detaches a session by pinch-grabbing its tab and pulling it out — driving the existing app.detachSession(id) hook. Bundle (src/web/public/gesture/gesture-codeman.js) is built from the codeman-gesture-control project's src/codeman/entry.ts (esbuild, MediaPipe included) and served same-origin. OFF by default — guarded entirely by CODEMAN_GESTURE=1: - server.ts: injects the module script into the dashboard HTML only (not solo /session/:id popups, which have no tab strip). - auth.ts: widens CSP only under the flag — adds 'wasm-unsafe-eval' (MediaPipe WASM) and the pinned MediaPipe CDNs (cdn.jsdelivr.net wasm, storage.googleapis.com model) to connect-src, plus worker-src 'self' blob:. Production CSP is unchanged when the flag is off. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/web/middleware/auth.ts | 17 +- src/web/public/gesture/gesture-codeman.js | 4611 +++++++++++++++++++++ src/web/server.ts | 7 + 3 files changed, 4631 insertions(+), 4 deletions(-) create mode 100644 src/web/public/gesture/gesture-codeman.js diff --git a/src/web/middleware/auth.ts b/src/web/middleware/auth.ts index f7b186c0..7ae4a247 100644 --- a/src/web/middleware/auth.ts +++ b/src/web/middleware/auth.ts @@ -154,13 +154,22 @@ export function registerAuthMiddleware(app: FastifyInstance, https: boolean): Au * Register security headers and CORS middleware on every response. */ export function registerSecurityHeaders(app: FastifyInstance, https: boolean): void { + // Gesture-control overlay (opt-in via CODEMAN_GESTURE=1) runs MediaPipe, which + // needs WebAssembly eval and must fetch its wasm/model from the pinned CDNs. + // Computed once; OFF by default so the production CSP is byte-for-byte unchanged. + const gesture = process.env.CODEMAN_GESTURE === '1'; + const scriptSrc = "script-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net" + (gesture ? " 'wasm-unsafe-eval'" : ''); + const connectSrc = + "connect-src 'self' wss://api.deepgram.com" + (gesture ? ' https://cdn.jsdelivr.net https://storage.googleapis.com' : ''); + const workerSrc = gesture ? "; worker-src 'self' blob:" : ''; + const csp = + `default-src 'self'; ${scriptSrc}; style-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net; ` + + `img-src 'self' data: blob:; ${connectSrc}; font-src 'self' https://cdn.jsdelivr.net; frame-ancestors 'self'${workerSrc}`; + app.addHook('onRequest', (req, reply, done) => { reply.header('X-Content-Type-Options', 'nosniff'); reply.header('X-Frame-Options', 'SAMEORIGIN'); - reply.header( - 'Content-Security-Policy', - "default-src 'self'; script-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net; style-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net; img-src 'self' data: blob:; connect-src 'self' wss://api.deepgram.com; font-src 'self' https://cdn.jsdelivr.net; frame-ancestors 'self'" - ); + reply.header('Content-Security-Policy', csp); if (https) { reply.header('Strict-Transport-Security', 'max-age=31536000; includeSubDomains'); } diff --git a/src/web/public/gesture/gesture-codeman.js b/src/web/public/gesture/gesture-codeman.js new file mode 100644 index 00000000..4756df7f --- /dev/null +++ b/src/web/public/gesture/gesture-codeman.js @@ -0,0 +1,4611 @@ +var __defProp = Object.defineProperty; +var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; +var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); + +// node_modules/@mediapipe/tasks-vision/vision_bundle.mjs +var t = "undefined" != typeof self ? self : {}; +function e() { + throw Error("Invalid UTF8"); +} +function n(t2, e2) { + return e2 = String.fromCharCode.apply(null, e2), null == t2 ? e2 : t2 + e2; +} +var r; +var i; +var s = "undefined" != typeof TextDecoder; +var o; +var a = "undefined" != typeof TextEncoder; +function c(t2) { + if (a) t2 = (o || (o = new TextEncoder())).encode(t2); + else { + let n2 = 0; + const r2 = new Uint8Array(3 * t2.length); + for (let i2 = 0; i2 < t2.length; i2++) { + var e2 = t2.charCodeAt(i2); + if (e2 < 128) r2[n2++] = e2; + else { + if (e2 < 2048) r2[n2++] = e2 >> 6 | 192; + else { + if (e2 >= 55296 && e2 <= 57343) { + if (e2 <= 56319 && i2 < t2.length) { + const s2 = t2.charCodeAt(++i2); + if (s2 >= 56320 && s2 <= 57343) { + e2 = 1024 * (e2 - 55296) + s2 - 56320 + 65536, r2[n2++] = e2 >> 18 | 240, r2[n2++] = e2 >> 12 & 63 | 128, r2[n2++] = e2 >> 6 & 63 | 128, r2[n2++] = 63 & e2 | 128; + continue; + } + i2--; + } + e2 = 65533; + } + r2[n2++] = e2 >> 12 | 224, r2[n2++] = e2 >> 6 & 63 | 128; + } + r2[n2++] = 63 & e2 | 128; + } + } + t2 = n2 === r2.length ? r2 : r2.subarray(0, n2); + } + return t2; +} +var h; +var u; +t: { + for (l = ["CLOSURE_FLAGS"], d = t, f = 0; f < l.length; f++) if (null == (d = d[l[f]])) { + u = null; + break t; + } + u = d; +} +var l; +var d; +var f; +var p; +var g = u && u[610401301]; +h = null != g && g; +var m = t.navigator; +function y(t2) { + return !!h && (!!p && p.brands.some(({ brand: e2 }) => e2 && -1 != e2.indexOf(t2))); +} +function _(e2) { + var n2; + return (n2 = t.navigator) && (n2 = n2.userAgent) || (n2 = ""), -1 != n2.indexOf(e2); +} +function v() { + return !!h && (!!p && p.brands.length > 0); +} +function E() { + return v() ? y("Chromium") : (_("Chrome") || _("CriOS")) && !(!v() && _("Edge")) || _("Silk"); +} +function w(t2) { + return w[" "](t2), t2; +} +p = m && m.userAgentData || null, w[" "] = function() { +}; +var T = !v() && (_("Trident") || _("MSIE")); +!_("Android") || E(), E(), _("Safari") && (E() || !v() && _("Coast") || !v() && _("Opera") || !v() && _("Edge") || (v() ? y("Microsoft Edge") : _("Edg/")) || v() && y("Opera")); +var A = {}; +var b = null; +function k(t2) { + const e2 = t2.length; + let n2 = 3 * e2 / 4; + n2 % 3 ? n2 = Math.floor(n2) : -1 != "=.".indexOf(t2[e2 - 1]) && (n2 = -1 != "=.".indexOf(t2[e2 - 2]) ? n2 - 2 : n2 - 1); + const r2 = new Uint8Array(n2); + let i2 = 0; + return function(t3, e3) { + function n3(e4) { + for (; r3 < t3.length; ) { + const e5 = t3.charAt(r3++), n4 = b[e5]; + if (null != n4) return n4; + if (!/^[\s\xa0]*$/.test(e5)) throw Error("Unknown base64 encoding at char: " + e5); + } + return e4; + } + S(); + let r3 = 0; + for (; ; ) { + const t4 = n3(-1), r4 = n3(0), i3 = n3(64), s2 = n3(64); + if (64 === s2 && -1 === t4) break; + e3(t4 << 2 | r4 >> 4), 64 != i3 && (e3(r4 << 4 & 240 | i3 >> 2), 64 != s2 && e3(i3 << 6 & 192 | s2)); + } + }(t2, function(t3) { + r2[i2++] = t3; + }), i2 !== n2 ? r2.subarray(0, i2) : r2; +} +function S() { + if (!b) { + b = {}; + var t2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""), e2 = ["+/=", "+/", "-_=", "-_.", "-_"]; + for (let n2 = 0; n2 < 5; n2++) { + const r2 = t2.concat(e2[n2].split("")); + A[n2] = r2; + for (let t3 = 0; t3 < r2.length; t3++) { + const e3 = r2[t3]; + void 0 === b[e3] && (b[e3] = t3); + } + } + } +} +var x = "undefined" != typeof Uint8Array; +var L = !T && "function" == typeof btoa; +function R(t2) { + if (!L) { + var e2; + void 0 === e2 && (e2 = 0), S(), e2 = A[e2]; + var n2 = Array(Math.floor(t2.length / 3)), r2 = e2[64] || ""; + let c2 = 0, h2 = 0; + for (; c2 < t2.length - 2; c2 += 3) { + var i2 = t2[c2], s2 = t2[c2 + 1], o2 = t2[c2 + 2], a2 = e2[i2 >> 2]; + i2 = e2[(3 & i2) << 4 | s2 >> 4], s2 = e2[(15 & s2) << 2 | o2 >> 6], o2 = e2[63 & o2], n2[h2++] = a2 + i2 + s2 + o2; + } + switch (a2 = 0, o2 = r2, t2.length - c2) { + case 2: + o2 = e2[(15 & (a2 = t2[c2 + 1])) << 2] || r2; + case 1: + t2 = t2[c2], n2[h2] = e2[t2 >> 2] + e2[(3 & t2) << 4 | a2 >> 4] + o2 + r2; + } + return n2.join(""); + } + for (e2 = "", n2 = 0, r2 = t2.length - 10240; n2 < r2; ) e2 += String.fromCharCode.apply(null, t2.subarray(n2, n2 += 10240)); + return e2 += String.fromCharCode.apply(null, n2 ? t2.subarray(n2) : t2), btoa(e2); +} +var F = /[-_.]/g; +var I = { "-": "+", _: "/", ".": "=" }; +function M(t2) { + return I[t2] || ""; +} +function P(t2) { + if (!L) return k(t2); + F.test(t2) && (t2 = t2.replace(F, M)), t2 = atob(t2); + const e2 = new Uint8Array(t2.length); + for (let n2 = 0; n2 < t2.length; n2++) e2[n2] = t2.charCodeAt(n2); + return e2; +} +function O(t2) { + return x && null != t2 && t2 instanceof Uint8Array; +} +var C = {}; +function U() { + return B || (B = new N(null, C)); +} +function D(t2) { + j(C); + var e2 = t2.g; + return null == (e2 = null == e2 || O(e2) ? e2 : "string" == typeof e2 ? P(e2) : null) ? e2 : t2.g = e2; +} +var N = class { + h() { + return new Uint8Array(D(this) || 0); + } + constructor(t2, e2) { + if (j(e2), this.g = t2, null != t2 && 0 === t2.length) throw Error("ByteString should be constructed with non-empty values"); + } +}; +var B; +var G; +function j(t2) { + if (t2 !== C) throw Error("illegal external caller"); +} +function V(t2, e2) { + t2.__closure__error__context__984382 || (t2.__closure__error__context__984382 = {}), t2.__closure__error__context__984382.severity = e2; +} +function X(t2) { + return V(t2 = Error(t2), "warning"), t2; +} +var H = "function" == typeof Symbol && "symbol" == typeof Symbol(); +var W = /* @__PURE__ */ new Set(); +function z(t2, e2, n2 = false, r2 = false) { + return t2 = "function" == typeof Symbol && "symbol" == typeof Symbol() ? r2 && Symbol.for && t2 ? Symbol.for(t2) : null != t2 ? Symbol(t2) : Symbol() : e2, n2 && W.add(t2), t2; +} +var K = z("jas", void 0, true, true); +var Y = z(void 0, "0di"); +var $ = z(void 0, "2ex"); +var q = z(void 0, "1oa", true); +var J = z(void 0, Symbol(), true); +var Z = H ? K : "Ga"; +var Q = { Ga: { value: 0, configurable: true, writable: true, enumerable: false } }; +var tt = Object.defineProperties; +function et(t2, e2) { + H || Z in t2 || tt(t2, Q), t2[Z] |= e2; +} +function nt(t2, e2) { + H || Z in t2 || tt(t2, Q), t2[Z] = e2; +} +function rt(t2) { + return et(t2, 34), t2; +} +function it(t2, e2) { + nt(e2, -30975 & (0 | t2)); +} +function st(t2, e2) { + nt(e2, -30941 & (34 | t2)); +} +function ot() { + return "function" == typeof BigInt; +} +function at(t2) { + return Array.prototype.slice.call(t2); +} +var ct; +var ht = {}; +var ut = {}; +function lt(t2) { + return !(!t2 || "object" != typeof t2 || t2.Ia !== ut); +} +function dt(t2) { + return null !== t2 && "object" == typeof t2 && !Array.isArray(t2) && t2.constructor === Object; +} +function ft(t2, e2) { + if (null != t2) { + if ("string" == typeof t2) t2 = t2 ? new N(t2, C) : U(); + else if (t2.constructor !== N) if (O(t2)) t2 = t2.length ? new N(new Uint8Array(t2), C) : U(); + else { + if (!e2) throw Error(); + t2 = void 0; + } + } + return t2; +} +function pt(t2) { + return !(!Array.isArray(t2) || t2.length) && !!(1 & (0 | t2[Z])); +} +var gt = []; +function mt(t2) { + if (2 & t2) throw Error(); +} +nt(gt, 55), ct = Object.freeze(gt); +var yt = class _yt { + constructor(t2, e2, n2) { + this.l = 0, this.g = t2, this.h = e2, this.m = n2; + } + next() { + if (this.l < this.g.length) { + const t2 = this.g[this.l++]; + return { done: false, value: this.h ? this.h.call(this.m, t2) : t2 }; + } + return { done: true, value: void 0 }; + } + [Symbol.iterator]() { + return new _yt(this.g, this.h, this.m); + } +}; +function _t(t2) { + return J ? t2[J] : void 0; +} +var vt = Object.freeze({}); +function Et(t2) { + return t2.Qa = true, t2; +} +var wt = Et((t2) => "number" == typeof t2); +var Tt = Et((t2) => "string" == typeof t2); +var At = Et((t2) => "boolean" == typeof t2); +var bt = "function" == typeof t.BigInt && "bigint" == typeof t.BigInt(0); +var kt = Et((t2) => bt ? t2 >= xt && t2 <= Rt : "-" === t2[0] ? Ft(t2, St) : Ft(t2, Lt)); +var St = Number.MIN_SAFE_INTEGER.toString(); +var xt = bt ? BigInt(Number.MIN_SAFE_INTEGER) : void 0; +var Lt = Number.MAX_SAFE_INTEGER.toString(); +var Rt = bt ? BigInt(Number.MAX_SAFE_INTEGER) : void 0; +function Ft(t2, e2) { + if (t2.length > e2.length) return false; + if (t2.length < e2.length || t2 === e2) return true; + for (let n2 = 0; n2 < t2.length; n2++) { + const r2 = t2[n2], i2 = e2[n2]; + if (r2 > i2) return false; + if (r2 < i2) return true; + } +} +var It = "function" == typeof Uint8Array.prototype.slice; +var Mt; +var Pt = 0; +var Ot = 0; +function Ct(t2) { + const e2 = t2 >>> 0; + Pt = e2, Ot = (t2 - e2) / 4294967296 >>> 0; +} +function Ut(t2) { + if (t2 < 0) { + Ct(-t2); + const [e2, n2] = Xt(Pt, Ot); + Pt = e2 >>> 0, Ot = n2 >>> 0; + } else Ct(t2); +} +function Dt(t2) { + const e2 = Mt || (Mt = new DataView(new ArrayBuffer(8))); + e2.setFloat32(0, +t2, true), Ot = 0, Pt = e2.getUint32(0, true); +} +function Nt(t2, e2) { + const n2 = 4294967296 * e2 + (t2 >>> 0); + return Number.isSafeInteger(n2) ? n2 : Gt(t2, e2); +} +function Bt(t2, e2) { + const n2 = 2147483648 & e2; + return n2 && (e2 = ~e2 >>> 0, 0 == (t2 = 1 + ~t2 >>> 0) && (e2 = e2 + 1 >>> 0)), "number" == typeof (t2 = Nt(t2, e2)) ? n2 ? -t2 : t2 : n2 ? "-" + t2 : t2; +} +function Gt(t2, e2) { + if (t2 >>>= 0, (e2 >>>= 0) <= 2097151) var n2 = "" + (4294967296 * e2 + t2); + else ot() ? n2 = "" + (BigInt(e2) << BigInt(32) | BigInt(t2)) : (t2 = (16777215 & t2) + 6777216 * (n2 = 16777215 & (t2 >>> 24 | e2 << 8)) + 6710656 * (e2 = e2 >> 16 & 65535), n2 += 8147497 * e2, e2 *= 2, t2 >= 1e7 && (n2 += t2 / 1e7 >>> 0, t2 %= 1e7), n2 >= 1e7 && (e2 += n2 / 1e7 >>> 0, n2 %= 1e7), n2 = e2 + jt(n2) + jt(t2)); + return n2; +} +function jt(t2) { + return t2 = String(t2), "0000000".slice(t2.length) + t2; +} +function Vt(t2) { + if (t2.length < 16) Ut(Number(t2)); + else if (ot()) t2 = BigInt(t2), Pt = Number(t2 & BigInt(4294967295)) >>> 0, Ot = Number(t2 >> BigInt(32) & BigInt(4294967295)); + else { + const e2 = +("-" === t2[0]); + Ot = Pt = 0; + const n2 = t2.length; + for (let r2 = e2, i2 = (n2 - e2) % 6 + e2; i2 <= n2; r2 = i2, i2 += 6) { + const e3 = Number(t2.slice(r2, i2)); + Ot *= 1e6, Pt = 1e6 * Pt + e3, Pt >= 4294967296 && (Ot += Math.trunc(Pt / 4294967296), Ot >>>= 0, Pt >>>= 0); + } + if (e2) { + const [t3, e3] = Xt(Pt, Ot); + Pt = t3, Ot = e3; + } + } +} +function Xt(t2, e2) { + return e2 = ~e2, t2 ? t2 = 1 + ~t2 : e2 += 1, [t2, e2]; +} +var Ht = "function" == typeof BigInt ? BigInt.asIntN : void 0; +var Wt = "function" == typeof BigInt ? BigInt.asUintN : void 0; +var zt = Number.isSafeInteger; +var Kt = Number.isFinite; +var Yt = Math.trunc; +function $t(t2) { + return null == t2 || "number" == typeof t2 ? t2 : "NaN" === t2 || "Infinity" === t2 || "-Infinity" === t2 ? Number(t2) : void 0; +} +function qt(t2) { + return null == t2 || "boolean" == typeof t2 ? t2 : "number" == typeof t2 ? !!t2 : void 0; +} +var Jt = /^-?([1-9][0-9]*|0)(\.[0-9]+)?$/; +function Zt(t2) { + switch (typeof t2) { + case "bigint": + return true; + case "number": + return Kt(t2); + case "string": + return Jt.test(t2); + default: + return false; + } +} +function Qt(t2) { + if (null == t2) return t2; + if ("string" == typeof t2 && t2) t2 = +t2; + else if ("number" != typeof t2) return; + return Kt(t2) ? 0 | t2 : void 0; +} +function te(t2) { + if (null == t2) return t2; + if ("string" == typeof t2 && t2) t2 = +t2; + else if ("number" != typeof t2) return; + return Kt(t2) ? t2 >>> 0 : void 0; +} +function ee(t2) { + if ("-" === t2[0]) return false; + const e2 = t2.length; + return e2 < 20 || 20 === e2 && Number(t2.substring(0, 6)) < 184467; +} +function ne(t2) { + return t2 = Yt(t2), zt(t2) || (Ut(t2), t2 = Bt(Pt, Ot)), t2; +} +function re(t2) { + var e2 = Yt(Number(t2)); + if (zt(e2)) return String(e2); + if (-1 !== (e2 = t2.indexOf(".")) && (t2 = t2.substring(0, e2)), e2 = t2.length, !("-" === t2[0] ? e2 < 20 || 20 === e2 && Number(t2.substring(0, 7)) > -922337 : e2 < 19 || 19 === e2 && Number(t2.substring(0, 6)) < 922337)) if (Vt(t2), t2 = Pt, 2147483648 & (e2 = Ot)) if (ot()) t2 = "" + (BigInt(0 | e2) << BigInt(32) | BigInt(t2 >>> 0)); + else { + const [n2, r2] = Xt(t2, e2); + t2 = "-" + Gt(n2, r2); + } + else t2 = Gt(t2, e2); + return t2; +} +function ie(t2) { + return null == t2 ? t2 : "bigint" == typeof t2 ? (kt(t2) ? t2 = Number(t2) : (t2 = Ht(64, t2), t2 = kt(t2) ? Number(t2) : String(t2)), t2) : Zt(t2) ? "number" == typeof t2 ? ne(t2) : re(t2) : void 0; +} +function se(t2) { + if (null == t2) return t2; + var e2 = typeof t2; + if ("bigint" === e2) return String(Wt(64, t2)); + if (Zt(t2)) { + if ("string" === e2) return e2 = Yt(Number(t2)), zt(e2) && e2 >= 0 ? t2 = String(e2) : (-1 !== (e2 = t2.indexOf(".")) && (t2 = t2.substring(0, e2)), ee(t2) || (Vt(t2), t2 = Gt(Pt, Ot))), t2; + if ("number" === e2) return (t2 = Yt(t2)) >= 0 && zt(t2) ? t2 : function(t3) { + if (t3 < 0) { + Ut(t3); + var e3 = Gt(Pt, Ot); + return t3 = Number(e3), zt(t3) ? t3 : e3; + } + return ee(e3 = String(t3)) ? e3 : (Ut(t3), Nt(Pt, Ot)); + }(t2); + } +} +function oe(t2) { + if ("string" != typeof t2) throw Error(); + return t2; +} +function ae(t2) { + if (null != t2 && "string" != typeof t2) throw Error(); + return t2; +} +function ce(t2) { + return null == t2 || "string" == typeof t2 ? t2 : void 0; +} +function he(t2, e2, n2, r2) { + if (null != t2 && "object" == typeof t2 && t2.W === ht) return t2; + if (!Array.isArray(t2)) return n2 ? 2 & r2 ? ((t2 = e2[Y]) || (rt((t2 = new e2()).u), t2 = e2[Y] = t2), e2 = t2) : e2 = new e2() : e2 = void 0, e2; + let i2 = n2 = 0 | t2[Z]; + return 0 === i2 && (i2 |= 32 & r2), i2 |= 2 & r2, i2 !== n2 && nt(t2, i2), new e2(t2); +} +function ue(t2, e2, n2) { + if (e2) t: { + if (!Zt(e2 = t2)) throw X("int64"); + switch (typeof e2) { + case "string": + e2 = re(e2); + break t; + case "bigint": + if (t2 = e2 = Ht(64, e2), Tt(t2)) { + if (!/^\s*(?:-?[1-9]\d*|0)?\s*$/.test(t2)) throw Error(String(t2)); + } else if (wt(t2) && !Number.isSafeInteger(t2)) throw Error(String(t2)); + e2 = bt ? BigInt(e2) : At(e2) ? e2 ? "1" : "0" : Tt(e2) ? e2.trim() || "0" : String(e2); + break t; + default: + e2 = ne(e2); + } + } + else e2 = ie(t2); + return "string" == typeof (n2 = null == (t2 = e2) ? n2 ? 0 : void 0 : t2) && zt(e2 = +n2) ? e2 : n2; +} +var le = {}; +var de = function() { + try { + return w(new class extends Map { + constructor() { + super(); + } + }()), false; + } catch { + return true; + } +}(); +var fe = class { + constructor() { + this.g = /* @__PURE__ */ new Map(); + } + get(t2) { + return this.g.get(t2); + } + set(t2, e2) { + return this.g.set(t2, e2), this.size = this.g.size, this; + } + delete(t2) { + return t2 = this.g.delete(t2), this.size = this.g.size, t2; + } + clear() { + this.g.clear(), this.size = this.g.size; + } + has(t2) { + return this.g.has(t2); + } + entries() { + return this.g.entries(); + } + keys() { + return this.g.keys(); + } + values() { + return this.g.values(); + } + forEach(t2, e2) { + return this.g.forEach(t2, e2); + } + [Symbol.iterator]() { + return this.entries(); + } +}; +var pe = de ? (Object.setPrototypeOf(fe.prototype, Map.prototype), Object.defineProperties(fe.prototype, { size: { value: 0, configurable: true, enumerable: true, writable: true } }), fe) : class extends Map { + constructor() { + super(); + } +}; +function ge(t2) { + return t2; +} +function me(t2) { + if (2 & t2.L) throw Error("Cannot mutate an immutable Map"); +} +var ye = class extends pe { + constructor(t2, e2, n2 = ge, r2 = ge) { + super(); + let i2 = 0 | t2[Z]; + i2 |= 64, nt(t2, i2), this.L = i2, this.S = e2, this.R = n2, this.Y = this.S ? _e : r2; + for (let s2 = 0; s2 < t2.length; s2++) { + const o2 = t2[s2], a2 = n2(o2[0], false, true); + let c2 = o2[1]; + e2 ? void 0 === c2 && (c2 = null) : c2 = r2(o2[1], false, true, void 0, void 0, i2), super.set(a2, c2); + } + } + na(t2 = ve) { + if (0 !== this.size) return this.X(t2); + } + X(t2 = ve) { + const e2 = [], n2 = super.entries(); + for (var r2; !(r2 = n2.next()).done; ) (r2 = r2.value)[0] = t2(r2[0]), r2[1] = t2(r2[1]), e2.push(r2); + return e2; + } + clear() { + me(this), super.clear(); + } + delete(t2) { + return me(this), super.delete(this.R(t2, true, false)); + } + entries() { + var t2 = this.ma(); + return new yt(t2, Ee, this); + } + keys() { + return this.Ha(); + } + values() { + var t2 = this.ma(); + return new yt(t2, ye.prototype.get, this); + } + forEach(t2, e2) { + super.forEach((n2, r2) => { + t2.call(e2, this.get(r2), r2, this); + }); + } + set(t2, e2) { + return me(this), null == (t2 = this.R(t2, true, false)) ? this : null == e2 ? (super.delete(t2), this) : super.set(t2, this.Y(e2, true, true, this.S, false, this.L)); + } + Na(t2) { + const e2 = this.R(t2[0], false, true); + t2 = t2[1], t2 = this.S ? void 0 === t2 ? null : t2 : this.Y(t2, false, true, void 0, false, this.L), super.set(e2, t2); + } + has(t2) { + return super.has(this.R(t2, false, false)); + } + get(t2) { + t2 = this.R(t2, false, false); + const e2 = super.get(t2); + if (void 0 !== e2) { + var n2 = this.S; + return n2 ? ((n2 = this.Y(e2, false, true, n2, this.ra, this.L)) !== e2 && super.set(t2, n2), n2) : e2; + } + } + ma() { + return Array.from(super.keys()); + } + Ha() { + return super.keys(); + } + [Symbol.iterator]() { + return this.entries(); + } +}; +function _e(t2, e2, n2, r2, i2, s2) { + return t2 = he(t2, r2, n2, s2), i2 && (t2 = Oe(t2)), t2; +} +function ve(t2) { + return t2; +} +function Ee(t2) { + return [t2, this.get(t2)]; +} +var we; +var Te; +var Ae; +function be() { + return we || (we = new ye(rt([]), void 0, void 0, void 0, le)); +} +function ke(t2, e2, n2, r2, i2) { + if (null != t2) { + if (Array.isArray(t2)) t2 = pt(t2) ? void 0 : i2 && 2 & (0 | t2[Z]) ? t2 : Se(t2, e2, n2, void 0 !== r2, i2); + else if (dt(t2)) { + const s2 = {}; + for (let o2 in t2) s2[o2] = ke(t2[o2], e2, n2, r2, i2); + t2 = s2; + } else t2 = e2(t2, r2); + return t2; + } +} +function Se(t2, e2, n2, r2, i2) { + const s2 = r2 || n2 ? 0 | t2[Z] : 0, o2 = r2 ? !!(32 & s2) : void 0; + r2 = at(t2); + for (let t3 = 0; t3 < r2.length; t3++) r2[t3] = ke(r2[t3], e2, n2, o2, i2); + return n2 && ((t2 = _t(t2)) && (r2[J] = at(t2)), n2(s2, r2)), r2; +} +function xe(t2) { + return ke(t2, Le, void 0, void 0, false); +} +function Le(t2) { + return t2.W === ht ? t2.toJSON() : t2 instanceof ye ? t2.na(xe) : function(t3) { + switch (typeof t3) { + case "number": + return isFinite(t3) ? t3 : String(t3); + case "bigint": + return kt(t3) ? Number(t3) : String(t3); + case "boolean": + return t3 ? 1 : 0; + case "object": + if (t3) if (Array.isArray(t3)) { + if (pt(t3)) return; + } else { + if (O(t3)) return R(t3); + if (t3 instanceof N) { + const e2 = t3.g; + return null == e2 ? "" : "string" == typeof e2 ? e2 : t3.g = R(e2); + } + if (t3 instanceof ye) return t3.na(); + } + } + return t3; + }(t2); +} +function Re(t2) { + return Se(t2, Le, void 0, void 0, false); +} +function Fe(t2, e2, n2) { + return t2 = Ie(t2, e2[0], e2[1], n2 ? 1 : 2), e2 !== Te && n2 && et(t2, 16384), t2; +} +function Ie(t2, e2, n2, r2) { + if (null == t2) { + var i2 = 96; + n2 ? (t2 = [n2], i2 |= 512) : t2 = [], e2 && (i2 = -33521665 & i2 | (1023 & e2) << 15); + } else { + if (!Array.isArray(t2)) throw Error("narr"); + if (2048 & (i2 = 0 | t2[Z])) throw Error("farr"); + if (64 & i2) return t2; + if (1 === r2 || 2 === r2 || (i2 |= 64), n2 && (i2 |= 512, n2 !== t2[0])) throw Error("mid"); + t: { + if (r2 = (n2 = t2).length) { + const t3 = r2 - 1; + if (dt(n2[t3])) { + if ((e2 = t3 - (512 & (i2 |= 256) ? 0 : -1)) >= 1024) throw Error("pvtlmt"); + i2 = -33521665 & i2 | (1023 & e2) << 15; + break t; + } + } + if (e2) { + if ((e2 = Math.max(e2, r2 - (512 & i2 ? 0 : -1))) > 1024) throw Error("spvt"); + i2 = -33521665 & i2 | (1023 & e2) << 15; + } + } + } + return nt(t2, i2), t2; +} +function Me(t2, e2, n2 = st) { + if (null != t2) { + if (x && t2 instanceof Uint8Array) return e2 ? t2 : new Uint8Array(t2); + if (Array.isArray(t2)) { + var r2 = 0 | t2[Z]; + return 2 & r2 ? t2 : (e2 && (e2 = 0 === r2 || !!(32 & r2) && !(64 & r2 || !(16 & r2))), e2 ? (nt(t2, -12293 & (34 | r2)), t2) : Se(t2, Me, 4 & r2 ? st : n2, true, true)); + } + return t2.W === ht ? t2 = 2 & (r2 = 0 | (n2 = t2.u)[Z]) ? t2 : new t2.constructor(Pe(n2, r2, true)) : t2 instanceof ye && !(2 & t2.L) && (n2 = rt(t2.X(Me)), t2 = new ye(n2, t2.S, t2.R, t2.Y)), t2; + } +} +function Pe(t2, e2, n2) { + const r2 = n2 || 2 & e2 ? st : it, i2 = !!(32 & e2); + return t2 = function(t3, e3, n3) { + const r3 = at(t3); + var i3 = r3.length; + const s2 = 256 & e3 ? r3[i3 - 1] : void 0; + for (i3 += s2 ? -1 : 0, e3 = 512 & e3 ? 1 : 0; e3 < i3; e3++) r3[e3] = n3(r3[e3]); + if (s2) { + e3 = r3[e3] = {}; + for (const t4 in s2) e3[t4] = n3(s2[t4]); + } + return (t3 = _t(t3)) && (r3[J] = at(t3)), r3; + }(t2, e2, (t3) => Me(t3, i2, r2)), et(t2, 32 | (n2 ? 2 : 0)), t2; +} +function Oe(t2) { + const e2 = t2.u, n2 = 0 | e2[Z]; + return 2 & n2 ? new t2.constructor(Pe(e2, n2, false)) : t2; +} +function Ce(t2, e2) { + return Ue(t2 = t2.u, 0 | t2[Z], e2); +} +function Ue(e2, n2, r2, i2) { + if (-1 === r2) return null; + var s2 = r2 + (512 & n2 ? 0 : -1); + const o2 = e2.length - 1; + return s2 >= o2 && 256 & n2 ? e2[o2][r2] : i2 && 256 & n2 && null != (n2 = e2[o2][r2]) ? (null != e2[s2] && null != $ && ((s2 = (e2 = G ?? (G = {}))[$] || 0) >= 4 || (e2[$] = s2 + 1, V(e2 = Error(), "incident"), function(e3) { + t.setTimeout(() => { + throw e3; + }, 0); + }(e2))), n2) : s2 <= o2 ? e2[s2] : void 0; +} +function De(t2, e2, n2) { + const r2 = t2.u; + let i2 = 0 | r2[Z]; + return mt(i2), Ne(r2, i2, e2, n2), t2; +} +function Ne(t2, e2, n2, r2) { + const i2 = 512 & e2 ? 0 : -1, s2 = n2 + i2; + var o2 = t2.length - 1; + return s2 >= o2 && 256 & e2 ? (t2[o2][n2] = r2, e2) : s2 <= o2 ? (t2[s2] = r2, 256 & e2 && (n2 in (t2 = t2[o2]) && delete t2[n2]), e2) : (void 0 !== r2 && (n2 >= (o2 = e2 >> 15 & 1023 || 536870912) ? null != r2 && (t2[o2 + i2] = { [n2]: r2 }, nt(t2, e2 |= 256)) : t2[s2] = r2), e2); +} +function Be(t2, e2) { + let n2 = 0 | (t2 = t2.u)[Z]; + const r2 = Ue(t2, n2, e2), i2 = $t(r2); + return null != i2 && i2 !== r2 && Ne(t2, n2, e2, i2), i2; +} +function Ge(t2) { + let e2 = 0 | (t2 = t2.u)[Z]; + const n2 = Ue(t2, e2, 1), r2 = ft(n2, true); + return null != r2 && r2 !== n2 && Ne(t2, e2, 1, r2), r2; +} +function je() { + return void 0 === vt ? 2 : 4; +} +function Ve(t2, e2, n2, r2, i2) { + const s2 = t2.u, o2 = 2 & (t2 = 0 | s2[Z]) ? 1 : r2; + i2 = !!i2; + let a2 = 0 | (r2 = Xe(s2, t2, e2))[Z]; + if (!(4 & a2)) { + 4 & a2 && (r2 = at(r2), a2 = an(a2, t2), t2 = Ne(s2, t2, e2, r2)); + let i3 = 0, o3 = 0; + for (; i3 < r2.length; i3++) { + const t3 = n2(r2[i3]); + null != t3 && (r2[o3++] = t3); + } + o3 < i3 && (r2.length = o3), a2 = He(a2, t2), n2 = -4097 & (20 | a2), a2 = n2 &= -8193, nt(r2, a2), 2 & a2 && Object.freeze(r2); + } + return 1 === o2 || 4 === o2 && 32 & a2 ? We(a2) || (i2 = a2, a2 |= 2, a2 !== i2 && nt(r2, a2), Object.freeze(r2)) : (2 === o2 && We(a2) && (r2 = at(r2), a2 = an(a2, t2), a2 = cn(a2, t2, i2), nt(r2, a2), t2 = Ne(s2, t2, e2, r2)), We(a2) || (e2 = a2, a2 = cn(a2, t2, i2), a2 !== e2 && nt(r2, a2))), r2; +} +function Xe(t2, e2, n2, r2) { + return t2 = Ue(t2, e2, n2, r2), Array.isArray(t2) ? t2 : ct; +} +function He(t2, e2) { + return 0 === t2 && (t2 = an(t2, e2)), 1 | t2; +} +function We(t2) { + return !!(2 & t2) && !!(4 & t2) || !!(2048 & t2); +} +function ze(t2) { + t2 = at(t2); + for (let e2 = 0; e2 < t2.length; e2++) { + const n2 = t2[e2] = at(t2[e2]); + Array.isArray(n2[1]) && (n2[1] = rt(n2[1])); + } + return t2; +} +function Ke(t2, e2, n2, r2) { + let i2 = 0 | (t2 = t2.u)[Z]; + mt(i2), Ne(t2, i2, e2, ("0" === r2 ? 0 === Number(n2) : n2 === r2) ? void 0 : n2); +} +function Ye(t2, e2, n2, r2, i2) { + mt(e2); + var s2 = !(!(64 & e2) && 16384 & e2); + const o2 = (i2 = Xe(t2, e2, n2, i2)) !== ct; + if (s2 || !o2) { + let a2 = s2 = o2 ? 0 | i2[Z] : 0; + (!o2 || 2 & a2 || We(a2) || 4 & a2 && !(32 & a2)) && (i2 = at(i2), a2 = an(a2, e2), e2 = Ne(t2, e2, n2, i2)), a2 = -13 & He(a2, e2), a2 = cn(r2 ? -17 & a2 : 16 | a2, e2, true), a2 !== s2 && nt(i2, a2); + } + return i2; +} +function $e(t2, e2) { + var n2 = vs; + return Ze(qe(t2 = t2.u), t2, 0 | t2[Z], n2) === e2 ? e2 : -1; +} +function qe(t2) { + if (H) return t2[q] ?? (t2[q] = /* @__PURE__ */ new Map()); + if (q in t2) return t2[q]; + const e2 = /* @__PURE__ */ new Map(); + return Object.defineProperty(t2, q, { value: e2 }), e2; +} +function Je(t2, e2, n2, r2) { + const i2 = qe(t2), s2 = Ze(i2, t2, e2, n2); + return s2 !== r2 && (s2 && (e2 = Ne(t2, e2, s2)), i2.set(n2, r2)), e2; +} +function Ze(t2, e2, n2, r2) { + let i2 = t2.get(r2); + if (null != i2) return i2; + i2 = 0; + for (let t3 = 0; t3 < r2.length; t3++) { + const s2 = r2[t3]; + null != Ue(e2, n2, s2) && (0 !== i2 && (n2 = Ne(e2, n2, i2)), i2 = s2); + } + return t2.set(r2, i2), i2; +} +function Qe(t2, e2, n2, r2) { + let i2, s2 = 0 | t2[Z]; + if (null != (r2 = Ue(t2, s2, n2, r2)) && r2.W === ht) return (e2 = Oe(r2)) !== r2 && Ne(t2, s2, n2, e2), e2.u; + if (Array.isArray(r2)) { + const t3 = 0 | r2[Z]; + i2 = 2 & t3 ? Fe(Pe(r2, t3, false), e2, true) : 64 & t3 ? r2 : Fe(i2, e2, true); + } else i2 = Fe(void 0, e2, true); + return i2 !== r2 && Ne(t2, s2, n2, i2), i2; +} +function tn(t2, e2, n2, r2) { + let i2 = 0 | (t2 = t2.u)[Z]; + return (e2 = he(r2 = Ue(t2, i2, n2, r2), e2, false, i2)) !== r2 && null != e2 && Ne(t2, i2, n2, e2), e2; +} +function en(t2, e2, n2, r2 = false) { + if (null == (e2 = tn(t2, e2, n2, r2))) return e2; + if (!(2 & (r2 = 0 | (t2 = t2.u)[Z]))) { + const i2 = Oe(e2); + i2 !== e2 && Ne(t2, r2, n2, e2 = i2); + } + return e2; +} +function nn(t2, e2, n2, r2, i2, s2, o2) { + t2 = t2.u; + var a2 = !!(2 & e2); + const c2 = a2 ? 1 : i2; + s2 = !!s2, o2 && (o2 = !a2); + var h2 = 0 | (i2 = Xe(t2, e2, r2))[Z]; + if (!(a2 = !!(4 & h2))) { + var u2 = i2, l = e2; + const t3 = !!(2 & (h2 = He(h2, e2))); + t3 && (l |= 2); + let r3 = !t3, s3 = true, o3 = 0, a3 = 0; + for (; o3 < u2.length; o3++) { + const e3 = he(u2[o3], n2, false, l); + if (e3 instanceof n2) { + if (!t3) { + const t4 = !!(2 & (0 | e3.u[Z])); + r3 && (r3 = !t4), s3 && (s3 = t4); + } + u2[a3++] = e3; + } + } + a3 < o3 && (u2.length = a3), h2 |= 4, h2 = s3 ? 16 | h2 : -17 & h2, nt(u2, h2 = r3 ? 8 | h2 : -9 & h2), t3 && Object.freeze(u2); + } + if (o2 && !(8 & h2 || !i2.length && (1 === c2 || 4 === c2 && 32 & h2))) { + for (We(h2) && (i2 = at(i2), h2 = an(h2, e2), e2 = Ne(t2, e2, r2, i2)), n2 = i2, o2 = h2, u2 = 0; u2 < n2.length; u2++) (h2 = n2[u2]) !== (l = Oe(h2)) && (n2[u2] = l); + o2 |= 8, nt(n2, o2 = n2.length ? -17 & o2 : 16 | o2), h2 = o2; + } + return 1 === c2 || 4 === c2 && 32 & h2 ? We(h2) || (e2 = h2, (h2 |= !i2.length || 16 & h2 && (!a2 || 32 & h2) ? 2 : 2048) !== e2 && nt(i2, h2), Object.freeze(i2)) : (2 === c2 && We(h2) && (nt(i2 = at(i2), h2 = cn(h2 = an(h2, e2), e2, s2)), e2 = Ne(t2, e2, r2, i2)), We(h2) || (r2 = h2, (h2 = cn(h2, e2, s2)) !== r2 && nt(i2, h2))), i2; +} +function rn(t2, e2, n2) { + const r2 = 0 | t2.u[Z]; + return nn(t2, r2, e2, n2, je(), false, !(2 & r2)); +} +function sn(t2, e2, n2, r2) { + return null == r2 && (r2 = void 0), De(t2, n2, r2); +} +function on(t2, e2, n2, r2) { + null == r2 && (r2 = void 0); + t: { + let i2 = 0 | (t2 = t2.u)[Z]; + if (mt(i2), null == r2) { + const r3 = qe(t2); + if (Ze(r3, t2, i2, n2) !== e2) break t; + r3.set(n2, 0); + } else i2 = Je(t2, i2, n2, e2); + Ne(t2, i2, e2, r2); + } +} +function an(t2, e2) { + return -2049 & (t2 = 32 | (2 & e2 ? 2 | t2 : -3 & t2)); +} +function cn(t2, e2, n2) { + return 32 & e2 && n2 || (t2 &= -33), t2; +} +function hn(t2, e2, n2, r2) { + const i2 = 0 | t2.u[Z]; + mt(i2), t2 = nn(t2, i2, n2, e2, 2, true), r2 = null != r2 ? r2 : new n2(), t2.push(r2), t2[Z] = 2 & (0 | r2.u[Z]) ? -9 & t2[Z] : -17 & t2[Z]; +} +function un(t2, e2) { + return Qt(Ce(t2, e2)); +} +function ln(t2, e2) { + return ce(Ce(t2, e2)); +} +function dn(t2, e2) { + return Be(t2, e2) ?? 0; +} +function fn(t2, e2, n2) { + if (null != n2 && "boolean" != typeof n2) throw t2 = typeof n2, Error(`Expected boolean but got ${"object" != t2 ? t2 : n2 ? Array.isArray(n2) ? "array" : t2 : "null"}: ${n2}`); + De(t2, e2, n2); +} +function pn(t2, e2, n2) { + if (null != n2) { + if ("number" != typeof n2) throw X("int32"); + if (!Kt(n2)) throw X("int32"); + n2 |= 0; + } + De(t2, e2, n2); +} +function gn(t2, e2, n2) { + if (null != n2 && "number" != typeof n2) throw Error(`Value of float/double field must be a number, found ${typeof n2}: ${n2}`); + De(t2, e2, n2); +} +function mn(t2, e2, n2) { + { + const o2 = t2.u; + let a2 = 0 | o2[Z]; + if (mt(a2), null == n2) Ne(o2, a2, e2); + else { + var r2 = t2 = 0 | n2[Z], i2 = We(t2), s2 = i2 || Object.isFrozen(n2); + for (i2 || (t2 = 0), s2 || (n2 = at(n2), r2 = 0, t2 = cn(t2 = an(t2, a2), a2, true), s2 = false), t2 |= 21, i2 = 0; i2 < n2.length; i2++) { + const e3 = n2[i2], o3 = oe(e3); + Object.is(e3, o3) || (s2 && (n2 = at(n2), r2 = 0, t2 = cn(t2 = an(t2, a2), a2, true), s2 = false), n2[i2] = o3); + } + t2 !== r2 && (s2 && (n2 = at(n2), t2 = cn(t2 = an(t2, a2), a2, true)), nt(n2, t2)), Ne(o2, a2, e2, n2); + } + } +} +function yn(t2, e2, n2) { + mt(0 | t2.u[Z]), Ve(t2, e2, ce, 2, true).push(oe(n2)); +} +function _n(t2, e2) { + return Error(`Invalid wire type: ${t2} (at position ${e2})`); +} +function vn() { + return Error("Failed to read varint, encoding is invalid."); +} +function En(t2, e2) { + return Error(`Tried to read past the end of the data ${e2} > ${t2}`); +} +function wn(t2) { + if ("string" == typeof t2) return { buffer: P(t2), N: false }; + if (Array.isArray(t2)) return { buffer: new Uint8Array(t2), N: false }; + if (t2.constructor === Uint8Array) return { buffer: t2, N: false }; + if (t2.constructor === ArrayBuffer) return { buffer: new Uint8Array(t2), N: false }; + if (t2.constructor === N) return { buffer: D(t2) || new Uint8Array(0), N: true }; + if (t2 instanceof Uint8Array) return { buffer: new Uint8Array(t2.buffer, t2.byteOffset, t2.byteLength), N: false }; + throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, a ByteString or an Array of numbers"); +} +function Tn(t2, e2) { + let n2, r2 = 0, i2 = 0, s2 = 0; + const o2 = t2.h; + let a2 = t2.g; + do { + n2 = o2[a2++], r2 |= (127 & n2) << s2, s2 += 7; + } while (s2 < 32 && 128 & n2); + for (s2 > 32 && (i2 |= (127 & n2) >> 4), s2 = 3; s2 < 32 && 128 & n2; s2 += 7) n2 = o2[a2++], i2 |= (127 & n2) << s2; + if (Fn(t2, a2), n2 < 128) return e2(r2 >>> 0, i2 >>> 0); + throw vn(); +} +function An(t2) { + let e2 = 0, n2 = t2.g; + const r2 = n2 + 10, i2 = t2.h; + for (; n2 < r2; ) { + const r3 = i2[n2++]; + if (e2 |= r3, 0 == (128 & r3)) return Fn(t2, n2), !!(127 & e2); + } + throw vn(); +} +function bn(t2) { + const e2 = t2.h; + let n2 = t2.g, r2 = e2[n2++], i2 = 127 & r2; + if (128 & r2 && (r2 = e2[n2++], i2 |= (127 & r2) << 7, 128 & r2 && (r2 = e2[n2++], i2 |= (127 & r2) << 14, 128 & r2 && (r2 = e2[n2++], i2 |= (127 & r2) << 21, 128 & r2 && (r2 = e2[n2++], i2 |= r2 << 28, 128 & r2 && 128 & e2[n2++] && 128 & e2[n2++] && 128 & e2[n2++] && 128 & e2[n2++] && 128 & e2[n2++]))))) throw vn(); + return Fn(t2, n2), i2; +} +function kn(t2) { + return bn(t2) >>> 0; +} +function Sn(t2) { + var e2 = t2.h; + const n2 = t2.g, r2 = e2[n2], i2 = e2[n2 + 1], s2 = e2[n2 + 2]; + return e2 = e2[n2 + 3], Fn(t2, t2.g + 4), (r2 << 0 | i2 << 8 | s2 << 16 | e2 << 24) >>> 0; +} +function xn(t2) { + var e2 = Sn(t2); + t2 = 2 * (e2 >> 31) + 1; + const n2 = e2 >>> 23 & 255; + return e2 &= 8388607, 255 == n2 ? e2 ? NaN : t2 * (1 / 0) : 0 == n2 ? 1401298464324817e-60 * t2 * e2 : t2 * Math.pow(2, n2 - 150) * (e2 + 8388608); +} +function Ln(t2) { + return bn(t2); +} +function Rn(t2, e2, { ba: n2 = false } = {}) { + t2.ba = n2, e2 && (e2 = wn(e2), t2.h = e2.buffer, t2.m = e2.N, t2.j = 0, t2.l = t2.h.length, t2.g = t2.j); +} +function Fn(t2, e2) { + if (t2.g = e2, e2 > t2.l) throw En(t2.l, e2); +} +function In(t2, e2) { + if (e2 < 0) throw Error(`Tried to read a negative byte length: ${e2}`); + const n2 = t2.g, r2 = n2 + e2; + if (r2 > t2.l) throw En(e2, t2.l - n2); + return t2.g = r2, n2; +} +function Mn(t2, e2) { + if (0 == e2) return U(); + var n2 = In(t2, e2); + return t2.ba && t2.m ? n2 = t2.h.subarray(n2, n2 + e2) : (t2 = t2.h, n2 = n2 === (e2 = n2 + e2) ? new Uint8Array(0) : It ? t2.slice(n2, e2) : new Uint8Array(t2.subarray(n2, e2))), 0 == n2.length ? U() : new N(n2, C); +} +ye.prototype.toJSON = void 0, ye.prototype.Ia = ut; +var Pn = []; +function On(t2) { + var e2 = t2.g; + if (e2.g == e2.l) return false; + t2.l = t2.g.g; + var n2 = kn(t2.g); + if (e2 = n2 >>> 3, !((n2 &= 7) >= 0 && n2 <= 5)) throw _n(n2, t2.l); + if (e2 < 1) throw Error(`Invalid field number: ${e2} (at position ${t2.l})`); + return t2.m = e2, t2.h = n2, true; +} +function Cn(t2) { + switch (t2.h) { + case 0: + 0 != t2.h ? Cn(t2) : An(t2.g); + break; + case 1: + Fn(t2 = t2.g, t2.g + 8); + break; + case 2: + if (2 != t2.h) Cn(t2); + else { + var e2 = kn(t2.g); + Fn(t2 = t2.g, t2.g + e2); + } + break; + case 5: + Fn(t2 = t2.g, t2.g + 4); + break; + case 3: + for (e2 = t2.m; ; ) { + if (!On(t2)) throw Error("Unmatched start-group tag: stream EOF"); + if (4 == t2.h) { + if (t2.m != e2) throw Error("Unmatched end-group tag"); + break; + } + Cn(t2); + } + break; + default: + throw _n(t2.h, t2.l); + } +} +function Un(t2, e2, n2) { + const r2 = t2.g.l, i2 = kn(t2.g), s2 = t2.g.g + i2; + let o2 = s2 - r2; + if (o2 <= 0 && (t2.g.l = s2, n2(e2, t2, void 0, void 0, void 0), o2 = s2 - t2.g.g), o2) throw Error(`Message parsing ended unexpectedly. Expected to read ${i2} bytes, instead read ${i2 - o2} bytes, either the data ended unexpectedly or the message misreported its own length`); + return t2.g.g = s2, t2.g.l = r2, e2; +} +function Dn(t2) { + var o2 = kn(t2.g), a2 = In(t2 = t2.g, o2); + if (t2 = t2.h, s) { + var c2, h2 = t2; + (c2 = i) || (c2 = i = new TextDecoder("utf-8", { fatal: true })), o2 = a2 + o2, h2 = 0 === a2 && o2 === h2.length ? h2 : h2.subarray(a2, o2); + try { + var u2 = c2.decode(h2); + } catch (t3) { + if (void 0 === r) { + try { + c2.decode(new Uint8Array([128])); + } catch (t4) { + } + try { + c2.decode(new Uint8Array([97])), r = true; + } catch (t4) { + r = false; + } + } + throw !r && (i = void 0), t3; + } + } else { + o2 = (u2 = a2) + o2, a2 = []; + let r2, i2 = null; + for (; u2 < o2; ) { + var l = t2[u2++]; + l < 128 ? a2.push(l) : l < 224 ? u2 >= o2 ? e() : (r2 = t2[u2++], l < 194 || 128 != (192 & r2) ? (u2--, e()) : a2.push((31 & l) << 6 | 63 & r2)) : l < 240 ? u2 >= o2 - 1 ? e() : (r2 = t2[u2++], 128 != (192 & r2) || 224 === l && r2 < 160 || 237 === l && r2 >= 160 || 128 != (192 & (c2 = t2[u2++])) ? (u2--, e()) : a2.push((15 & l) << 12 | (63 & r2) << 6 | 63 & c2)) : l <= 244 ? u2 >= o2 - 2 ? e() : (r2 = t2[u2++], 128 != (192 & r2) || r2 - 144 + (l << 28) >> 30 != 0 || 128 != (192 & (c2 = t2[u2++])) || 128 != (192 & (h2 = t2[u2++])) ? (u2--, e()) : (l = (7 & l) << 18 | (63 & r2) << 12 | (63 & c2) << 6 | 63 & h2, l -= 65536, a2.push(55296 + (l >> 10 & 1023), 56320 + (1023 & l)))) : e(), a2.length >= 8192 && (i2 = n(i2, a2), a2.length = 0); + } + u2 = n(i2, a2); + } + return u2; +} +function Nn(t2) { + const e2 = kn(t2.g); + return Mn(t2.g, e2); +} +function Bn(t2, e2, n2) { + var r2 = kn(t2.g); + for (r2 = t2.g.g + r2; t2.g.g < r2; ) n2.push(e2(t2.g)); +} +var Gn = []; +function jn(t2) { + return t2; +} +var Vn; +function Xn(t2, e2, n2) { + e2.g ? e2.m(t2, e2.g, e2.h, n2) : e2.m(t2, e2.h, n2); +} +var Hn = class { + constructor(t2, e2) { + this.u = Ie(t2, e2); + } + toJSON() { + const t2 = !Vn; + try { + return t2 && (Vn = Re), Wn(this); + } finally { + t2 && (Vn = void 0); + } + } + l() { + var t2 = go; + return t2.g ? t2.l(this, t2.g, t2.h, true) : t2.l(this, t2.h, t2.defaultValue, true); + } + clone() { + const t2 = this.u; + return new this.constructor(Pe(t2, 0 | t2[Z], false)); + } + N() { + return !!(2 & (0 | this.u[Z])); + } +}; +function Wn(t2) { + var e2 = t2.u; + { + e2 = (t2 = Vn(e2)) !== e2; + let h2 = t2.length; + if (h2) { + var n2 = t2[h2 - 1], r2 = dt(n2); + r2 ? h2-- : n2 = void 0; + var i2 = t2; + if (r2) { + t: { + var s2, o2 = n2, a2 = false; + if (o2) for (let t3 in o2) isNaN(+t3) ? (s2 ?? (s2 = {}))[t3] = o2[t3] : (r2 = o2[t3], Array.isArray(r2) && (pt(r2) || lt(r2) && 0 === r2.size) && (r2 = null), null == r2 && (a2 = true), null != r2 && ((s2 ?? (s2 = {}))[t3] = r2)); + if (a2 || (s2 = o2), s2) for (let t3 in s2) { + a2 = s2; + break t; + } + a2 = null; + } + o2 = null == a2 ? null != n2 : a2 !== n2; + } + for (; h2 > 0 && (null == (s2 = i2[h2 - 1]) || pt(s2) || lt(s2) && 0 === s2.size); h2--) var c2 = true; + (i2 !== t2 || o2 || c2) && (e2 ? (c2 || o2 || a2) && (i2.length = h2) : i2 = Array.prototype.slice.call(i2, 0, h2), a2 && i2.push(a2)), c2 = i2; + } else c2 = t2; + } + return c2; +} +function zn(t2) { + return t2 ? /^\d+$/.test(t2) ? (Vt(t2), new Kn(Pt, Ot)) : null : Yn || (Yn = new Kn(0, 0)); +} +Hn.prototype.W = ht, Hn.prototype.toString = function() { + try { + return Vn = jn, Wn(this).toString(); + } finally { + Vn = void 0; + } +}; +var Kn = class { + constructor(t2, e2) { + this.h = t2 >>> 0, this.g = e2 >>> 0; + } +}; +var Yn; +function $n(t2) { + return t2 ? /^-?\d+$/.test(t2) ? (Vt(t2), new qn(Pt, Ot)) : null : Jn || (Jn = new qn(0, 0)); +} +var qn = class { + constructor(t2, e2) { + this.h = t2 >>> 0, this.g = e2 >>> 0; + } +}; +var Jn; +function Zn(t2, e2, n2) { + for (; n2 > 0 || e2 > 127; ) t2.g.push(127 & e2 | 128), e2 = (e2 >>> 7 | n2 << 25) >>> 0, n2 >>>= 7; + t2.g.push(e2); +} +function Qn(t2, e2) { + for (; e2 > 127; ) t2.g.push(127 & e2 | 128), e2 >>>= 7; + t2.g.push(e2); +} +function tr(t2, e2) { + if (e2 >= 0) Qn(t2, e2); + else { + for (let n2 = 0; n2 < 9; n2++) t2.g.push(127 & e2 | 128), e2 >>= 7; + t2.g.push(1); + } +} +function er(t2, e2) { + t2.g.push(e2 >>> 0 & 255), t2.g.push(e2 >>> 8 & 255), t2.g.push(e2 >>> 16 & 255), t2.g.push(e2 >>> 24 & 255); +} +function nr(t2, e2) { + 0 !== e2.length && (t2.l.push(e2), t2.h += e2.length); +} +function rr(t2, e2, n2) { + Qn(t2.g, 8 * e2 + n2); +} +function ir(t2, e2) { + return rr(t2, e2, 2), e2 = t2.g.end(), nr(t2, e2), e2.push(t2.h), e2; +} +function sr(t2, e2) { + var n2 = e2.pop(); + for (n2 = t2.h + t2.g.length() - n2; n2 > 127; ) e2.push(127 & n2 | 128), n2 >>>= 7, t2.h++; + e2.push(n2), t2.h++; +} +function or(t2, e2, n2) { + rr(t2, e2, 2), Qn(t2.g, n2.length), nr(t2, t2.g.end()), nr(t2, n2); +} +function ar(t2, e2, n2, r2) { + null != n2 && (e2 = ir(t2, e2), r2(n2, t2), sr(t2, e2)); +} +function cr() { + const t2 = class { + constructor() { + throw Error(); + } + }; + return Object.setPrototypeOf(t2, t2.prototype), t2; +} +var hr = cr(); +var ur = cr(); +var lr = cr(); +var dr = cr(); +var fr = cr(); +var pr = cr(); +var gr = cr(); +var mr = cr(); +var yr = cr(); +var _r = class { + constructor(t2, e2, n2) { + this.g = t2, this.h = e2, t2 = hr, this.l = !!t2 && n2 === t2 || false; + } +}; +function vr(t2, e2) { + return new _r(t2, e2, hr); +} +function Er(t2, e2, n2, r2, i2) { + ar(t2, n2, Ir(e2, r2), i2); +} +var wr = vr(function(t2, e2, n2, r2, i2) { + return 2 === t2.h && (Un(t2, Qe(e2, r2, n2), i2), true); +}, Er); +var Tr = vr(function(t2, e2, n2, r2, i2) { + return 2 === t2.h && (Un(t2, Qe(e2, r2, n2, true), i2), true); +}, Er); +var Ar = Symbol(); +var br = Symbol(); +var kr = Symbol(); +var Sr = Symbol(); +var xr; +var Lr; +function Rr(t2, e2, n2, r2) { + var i2 = r2[t2]; + if (i2) return i2; + (i2 = {}).Pa = r2, i2.V = function(t3) { + switch (typeof t3) { + case "boolean": + return Te || (Te = [0, void 0, true]); + case "number": + return t3 > 0 ? void 0 : 0 === t3 ? Ae || (Ae = [0, void 0]) : [-t3, void 0]; + case "string": + return [0, t3]; + case "object": + return t3; + } + }(r2[0]); + var s2 = r2[1]; + let o2 = 1; + s2 && s2.constructor === Object && (i2.ga = s2, "function" == typeof (s2 = r2[++o2]) && (i2.la = true, xr ?? (xr = s2), Lr ?? (Lr = r2[o2 + 1]), s2 = r2[o2 += 2])); + const a2 = {}; + for (; s2 && Array.isArray(s2) && s2.length && "number" == typeof s2[0] && s2[0] > 0; ) { + for (var c2 = 0; c2 < s2.length; c2++) a2[s2[c2]] = s2; + s2 = r2[++o2]; + } + for (c2 = 1; void 0 !== s2; ) { + let t3; + "number" == typeof s2 && (c2 += s2, s2 = r2[++o2]); + var h2 = void 0; + if (s2 instanceof _r ? t3 = s2 : (t3 = wr, o2--), t3?.l) { + s2 = r2[++o2], h2 = r2; + var u2 = o2; + "function" == typeof s2 && (s2 = s2(), h2[u2] = s2), h2 = s2; + } + for (u2 = c2 + 1, "number" == typeof (s2 = r2[++o2]) && s2 < 0 && (u2 -= s2, s2 = r2[++o2]); c2 < u2; c2++) { + const r3 = a2[c2]; + h2 ? n2(i2, c2, t3, h2, r3) : e2(i2, c2, t3, r3); + } + } + return r2[t2] = i2; +} +function Fr(t2) { + return Array.isArray(t2) ? t2[0] instanceof _r ? t2 : [Tr, t2] : [t2, void 0]; +} +function Ir(t2, e2) { + return t2 instanceof Hn ? t2.u : Array.isArray(t2) ? Fe(t2, e2, false) : void 0; +} +function Mr(t2, e2, n2, r2) { + const i2 = n2.g; + t2[e2] = r2 ? (t3, e3, n3) => i2(t3, e3, n3, r2) : i2; +} +function Pr(t2, e2, n2, r2, i2) { + const s2 = n2.g; + let o2, a2; + t2[e2] = (t3, e3, n3) => s2(t3, e3, n3, a2 || (a2 = Rr(br, Mr, Pr, r2).V), o2 || (o2 = Or(r2)), i2); +} +function Or(t2) { + let e2 = t2[kr]; + if (null != e2) return e2; + const n2 = Rr(br, Mr, Pr, t2); + return e2 = n2.la ? (t3, e3) => xr(t3, e3, n2) : (t3, e3) => { + const r2 = 0 | t3[Z]; + for (; On(e3) && 4 != e3.h; ) { + var i2 = e3.m, s2 = n2[i2]; + if (null == s2) { + var o2 = n2.ga; + o2 && (o2 = o2[i2]) && (null != (o2 = Cr(o2)) && (s2 = n2[i2] = o2)); + } + null != s2 && s2(e3, t3, i2) || (i2 = (s2 = e3).l, Cn(s2), s2.fa ? s2 = void 0 : (o2 = s2.g.g - i2, s2.g.g = i2, s2 = Mn(s2.g, o2)), i2 = t3, s2 && ((o2 = i2[J]) ? o2.push(s2) : i2[J] = [s2])); + } + return 16384 & r2 && rt(t3), true; + }, t2[kr] = e2; +} +function Cr(t2) { + const e2 = (t2 = Fr(t2))[0].g; + if (t2 = t2[1]) { + const n2 = Or(t2), r2 = Rr(br, Mr, Pr, t2).V; + return (t3, i2, s2) => e2(t3, i2, s2, r2, n2); + } + return e2; +} +function Ur(t2, e2, n2) { + t2[e2] = n2.h; +} +function Dr(t2, e2, n2, r2) { + let i2, s2; + const o2 = n2.h; + t2[e2] = (t3, e3, n3) => o2(t3, e3, n3, s2 || (s2 = Rr(Ar, Ur, Dr, r2).V), i2 || (i2 = Nr(r2))); +} +function Nr(t2) { + let e2 = t2[Sr]; + if (!e2) { + const n2 = Rr(Ar, Ur, Dr, t2); + e2 = (t3, e3) => Br(t3, e3, n2), t2[Sr] = e2; + } + return e2; +} +function Br(t2, e2, n2) { + for (var r2 = 0 | t2[Z], i2 = 512 & r2 ? 0 : -1, s2 = t2.length, o2 = 512 & r2 ? 1 : 0, a2 = s2 + (256 & r2 ? -1 : 0); o2 < a2; o2++) { + const r3 = t2[o2]; + if (null == r3) continue; + const s3 = o2 - i2, a3 = Gr(n2, s3); + a3 && a3(e2, r3, s3); + } + if (256 & r2) { + r2 = t2[s2 - 1]; + for (const t3 in r2) i2 = +t3, Number.isNaN(i2) || null != (s2 = r2[i2]) && (a2 = Gr(n2, i2)) && a2(e2, s2, i2); + } + if (t2 = _t(t2)) for (nr(e2, e2.g.end()), n2 = 0; n2 < t2.length; n2++) nr(e2, D(t2[n2]) || new Uint8Array(0)); +} +function Gr(t2, e2) { + var n2 = t2[e2]; + if (n2) return n2; + if ((n2 = t2.ga) && (n2 = n2[e2])) { + var r2 = (n2 = Fr(n2))[0].h; + if (n2 = n2[1]) { + const e3 = Nr(n2), i2 = Rr(Ar, Ur, Dr, n2).V; + n2 = t2.la ? Lr(i2, e3) : (t3, n3, s2) => r2(t3, n3, s2, i2, e3); + } else n2 = r2; + return t2[e2] = n2; + } +} +function jr(t2, e2) { + if (Array.isArray(e2)) { + var n2 = 0 | e2[Z]; + if (4 & n2) return e2; + for (var r2 = 0, i2 = 0; r2 < e2.length; r2++) { + const n3 = t2(e2[r2]); + null != n3 && (e2[i2++] = n3); + } + return i2 < r2 && (e2.length = i2), nt(e2, -12289 & (5 | n2)), 2 & n2 && Object.freeze(e2), e2; + } +} +function Vr(t2, e2, n2) { + return new _r(t2, e2, n2); +} +function Xr(t2, e2, n2) { + return new _r(t2, e2, n2); +} +function Hr(t2, e2, n2) { + Ne(t2, 0 | t2[Z], e2, n2); +} +var Wr = vr(function(t2, e2, n2, r2, i2) { + return 2 === t2.h && (t2 = Un(t2, Fe([void 0, void 0], r2, true), i2), mt(r2 = 0 | e2[Z]), (i2 = Ue(e2, r2, n2)) instanceof ye ? 0 != (2 & i2.L) ? ((i2 = i2.X()).push(t2), Ne(e2, r2, n2, i2)) : i2.Na(t2) : Array.isArray(i2) ? (2 & (0 | i2[Z]) && Ne(e2, r2, n2, i2 = ze(i2)), i2.push(t2)) : Ne(e2, r2, n2, [t2]), true); +}, function(t2, e2, n2, r2, i2) { + if (e2 instanceof ye) e2.forEach((e3, s2) => { + ar(t2, n2, Fe([s2, e3], r2, false), i2); + }); + else if (Array.isArray(e2)) for (let s2 = 0; s2 < e2.length; s2++) { + const o2 = e2[s2]; + Array.isArray(o2) && ar(t2, n2, Fe(o2, r2, false), i2); + } +}); +function zr(t2, e2, n2) { + if (e2 = function(t3) { + if (null == t3) return t3; + const e3 = typeof t3; + if ("bigint" === e3) return String(Ht(64, t3)); + if (Zt(t3)) { + if ("string" === e3) return re(t3); + if ("number" === e3) return ne(t3); + } + }(e2), null != e2) { + if ("string" == typeof e2) $n(e2); + if (null != e2) switch (rr(t2, n2, 0), typeof e2) { + case "number": + t2 = t2.g, Ut(e2), Zn(t2, Pt, Ot); + break; + case "bigint": + n2 = BigInt.asUintN(64, e2), n2 = new qn(Number(n2 & BigInt(4294967295)), Number(n2 >> BigInt(32))), Zn(t2.g, n2.h, n2.g); + break; + default: + n2 = $n(e2), Zn(t2.g, n2.h, n2.g); + } + } +} +function Kr(t2, e2, n2) { + null != (e2 = Qt(e2)) && null != e2 && (rr(t2, n2, 0), tr(t2.g, e2)); +} +function Yr(t2, e2, n2) { + null != (e2 = qt(e2)) && (rr(t2, n2, 0), t2.g.g.push(e2 ? 1 : 0)); +} +function $r(t2, e2, n2) { + null != (e2 = ce(e2)) && or(t2, n2, c(e2)); +} +function qr(t2, e2, n2, r2, i2) { + ar(t2, n2, Ir(e2, r2), i2); +} +function Jr(t2, e2, n2) { + null != (e2 = null == e2 || "string" == typeof e2 || O(e2) || e2 instanceof N ? e2 : void 0) && or(t2, n2, wn(e2).buffer); +} +function Zr(t2, e2, n2) { + return (5 === t2.h || 2 === t2.h) && (e2 = Ye(e2, 0 | e2[Z], n2, false, false), 2 == t2.h ? Bn(t2, xn, e2) : e2.push(xn(t2.g)), true); +} +var Qr = Vr(function(t2, e2, n2) { + if (1 !== t2.h) return false; + var r2 = t2.g; + t2 = Sn(r2); + const i2 = Sn(r2); + r2 = 2 * (i2 >> 31) + 1; + const s2 = i2 >>> 20 & 2047; + return t2 = 4294967296 * (1048575 & i2) + t2, Hr(e2, n2, 2047 == s2 ? t2 ? NaN : r2 * (1 / 0) : 0 == s2 ? 5e-324 * r2 * t2 : r2 * Math.pow(2, s2 - 1075) * (t2 + 4503599627370496)), true; +}, function(t2, e2, n2) { + null != (e2 = $t(e2)) && (rr(t2, n2, 1), t2 = t2.g, (n2 = Mt || (Mt = new DataView(new ArrayBuffer(8)))).setFloat64(0, +e2, true), Pt = n2.getUint32(0, true), Ot = n2.getUint32(4, true), er(t2, Pt), er(t2, Ot)); +}, cr()); +var ti = Vr(function(t2, e2, n2) { + return 5 === t2.h && (Hr(e2, n2, xn(t2.g)), true); +}, function(t2, e2, n2) { + null != (e2 = $t(e2)) && (rr(t2, n2, 5), t2 = t2.g, Dt(e2), er(t2, Pt)); +}, gr); +var ei = Xr(Zr, function(t2, e2, n2) { + if (null != (e2 = jr($t, e2))) for (let o2 = 0; o2 < e2.length; o2++) { + var r2 = t2, i2 = n2, s2 = e2[o2]; + null != s2 && (rr(r2, i2, 5), r2 = r2.g, Dt(s2), er(r2, Pt)); + } +}, gr); +var ni = Xr(Zr, function(t2, e2, n2) { + if (null != (e2 = jr($t, e2)) && e2.length) { + rr(t2, n2, 2), Qn(t2.g, 4 * e2.length); + for (let r2 = 0; r2 < e2.length; r2++) n2 = t2.g, Dt(e2[r2]), er(n2, Pt); + } +}, gr); +var ri = Vr(function(t2, e2, n2) { + return 0 === t2.h && (Hr(e2, n2, Tn(t2.g, Bt)), true); +}, zr, pr); +var ii = Vr(function(t2, e2, n2) { + return 0 === t2.h && (Hr(e2, n2, 0 === (t2 = Tn(t2.g, Bt)) ? void 0 : t2), true); +}, zr, pr); +var si = Vr(function(t2, e2, n2) { + return 0 === t2.h && (Hr(e2, n2, Tn(t2.g, Nt)), true); +}, function(t2, e2, n2) { + if (null != (e2 = se(e2))) { + if ("string" == typeof e2) zn(e2); + if (null != e2) switch (rr(t2, n2, 0), typeof e2) { + case "number": + t2 = t2.g, Ut(e2), Zn(t2, Pt, Ot); + break; + case "bigint": + n2 = BigInt.asUintN(64, e2), n2 = new Kn(Number(n2 & BigInt(4294967295)), Number(n2 >> BigInt(32))), Zn(t2.g, n2.h, n2.g); + break; + default: + n2 = zn(e2), Zn(t2.g, n2.h, n2.g); + } + } +}, cr()); +var oi = Vr(function(t2, e2, n2) { + return 0 === t2.h && (Hr(e2, n2, bn(t2.g)), true); +}, Kr, dr); +var ai = Xr(function(t2, e2, n2) { + return (0 === t2.h || 2 === t2.h) && (e2 = Ye(e2, 0 | e2[Z], n2, false, false), 2 == t2.h ? Bn(t2, bn, e2) : e2.push(bn(t2.g)), true); +}, function(t2, e2, n2) { + if (null != (e2 = jr(Qt, e2)) && e2.length) { + n2 = ir(t2, n2); + for (let n3 = 0; n3 < e2.length; n3++) tr(t2.g, e2[n3]); + sr(t2, n2); + } +}, dr); +var ci = Vr(function(t2, e2, n2) { + return 0 === t2.h && (Hr(e2, n2, 0 === (t2 = bn(t2.g)) ? void 0 : t2), true); +}, Kr, dr); +var hi = Vr(function(t2, e2, n2) { + return 0 === t2.h && (Hr(e2, n2, An(t2.g)), true); +}, Yr, ur); +var ui = Vr(function(t2, e2, n2) { + return 0 === t2.h && (Hr(e2, n2, false === (t2 = An(t2.g)) ? void 0 : t2), true); +}, Yr, ur); +var li = Xr(function(t2, e2, n2) { + return 2 === t2.h && (t2 = Dn(t2), Ye(e2, 0 | e2[Z], n2, false).push(t2), true); +}, function(t2, e2, n2) { + if (null != (e2 = jr(ce, e2))) for (let o2 = 0; o2 < e2.length; o2++) { + var r2 = t2, i2 = n2, s2 = e2[o2]; + null != s2 && or(r2, i2, c(s2)); + } +}, lr); +var di = Vr(function(t2, e2, n2) { + return 2 === t2.h && (Hr(e2, n2, "" === (t2 = Dn(t2)) ? void 0 : t2), true); +}, $r, lr); +var fi = Vr(function(t2, e2, n2) { + return 2 === t2.h && (Hr(e2, n2, Dn(t2)), true); +}, $r, lr); +var pi = function(t2, e2, n2 = hr) { + return new _r(t2, e2, n2); +}(function(t2, e2, n2, r2, i2) { + return 2 === t2.h && (r2 = Fe(void 0, r2, true), Ye(e2, 0 | e2[Z], n2, true).push(r2), Un(t2, r2, i2), true); +}, function(t2, e2, n2, r2, i2) { + if (Array.isArray(e2)) for (let s2 = 0; s2 < e2.length; s2++) qr(t2, e2[s2], n2, r2, i2); +}); +var gi = vr(function(t2, e2, n2, r2, i2, s2) { + return 2 === t2.h && (Je(e2, 0 | e2[Z], s2, n2), Un(t2, e2 = Qe(e2, r2, n2), i2), true); +}, qr); +var mi = Vr(function(t2, e2, n2) { + return 2 === t2.h && (Hr(e2, n2, Nn(t2)), true); +}, Jr, mr); +var yi = Xr(function(t2, e2, n2) { + return (0 === t2.h || 2 === t2.h) && (e2 = Ye(e2, 0 | e2[Z], n2, false, false), 2 == t2.h ? Bn(t2, kn, e2) : e2.push(kn(t2.g)), true); +}, function(t2, e2, n2) { + if (null != (e2 = jr(te, e2))) for (let o2 = 0; o2 < e2.length; o2++) { + var r2 = t2, i2 = n2, s2 = e2[o2]; + null != s2 && (rr(r2, i2, 0), Qn(r2.g, s2)); + } +}, fr); +var _i = Vr(function(t2, e2, n2) { + return 0 === t2.h && (Hr(e2, n2, 0 === (t2 = kn(t2.g)) ? void 0 : t2), true); +}, function(t2, e2, n2) { + null != (e2 = te(e2)) && null != e2 && (rr(t2, n2, 0), Qn(t2.g, e2)); +}, fr); +var vi = Vr(function(t2, e2, n2) { + return 0 === t2.h && (Hr(e2, n2, bn(t2.g)), true); +}, function(t2, e2, n2) { + null != (e2 = Qt(e2)) && (e2 = parseInt(e2, 10), rr(t2, n2, 0), tr(t2.g, e2)); +}, yr); +var Ei = class { + constructor(t2, e2) { + this.h = t2, this.g = e2, this.l = en, this.m = sn, this.defaultValue = void 0; + } +}; +function wi(t2, e2) { + return new Ei(t2, e2); +} +function Ti(t2, e2) { + return (n2, r2) => { + if (Gn.length) { + const t3 = Gn.pop(); + t3.o(r2), Rn(t3.g, n2, r2), n2 = t3; + } else n2 = new class { + constructor(t3, e3) { + if (Pn.length) { + const n3 = Pn.pop(); + Rn(n3, t3, e3), t3 = n3; + } else t3 = new class { + constructor(t4, e4) { + this.h = null, this.m = false, this.g = this.l = this.j = 0, Rn(this, t4, e4); + } + clear() { + this.h = null, this.m = false, this.g = this.l = this.j = 0, this.ba = false; + } + }(t3, e3); + this.g = t3, this.l = this.g.g, this.h = this.m = -1, this.o(e3); + } + o({ fa: t3 = false } = {}) { + this.fa = t3; + } + }(n2, r2); + try { + const r3 = new t2(), s2 = r3.u; + Or(e2)(s2, n2); + var i2 = r3; + } finally { + n2.g.clear(), n2.m = -1, n2.h = -1, Gn.length < 100 && Gn.push(n2); + } + return i2; + }; +} +function Ai(t2) { + return function() { + const e2 = new class { + constructor() { + this.l = [], this.h = 0, this.g = new class { + constructor() { + this.g = []; + } + length() { + return this.g.length; + } + end() { + const t3 = this.g; + return this.g = [], t3; + } + }(); + } + }(); + Br(this.u, e2, Rr(Ar, Ur, Dr, t2)), nr(e2, e2.g.end()); + const n2 = new Uint8Array(e2.h), r2 = e2.l, i2 = r2.length; + let s2 = 0; + for (let t3 = 0; t3 < i2; t3++) { + const e3 = r2[t3]; + n2.set(e3, s2), s2 += e3.length; + } + return e2.l = [n2], n2; + }; +} +var bi = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var ki = [0, di, Vr(function(t2, e2, n2) { + return 2 === t2.h && (Hr(e2, n2, (t2 = Nn(t2)) === U() ? void 0 : t2), true); +}, function(t2, e2, n2) { + if (null != e2) { + if (e2 instanceof Hn) { + const r2 = e2.Ra; + return void (r2 && (e2 = r2(e2), null != e2 && or(t2, n2, wn(e2).buffer))); + } + if (Array.isArray(e2)) return; + } + Jr(t2, e2, n2); +}, mr)]; +var Si; +var xi = globalThis.trustedTypes; +function Li(t2) { + void 0 === Si && (Si = function() { + let t3 = null; + if (!xi) return t3; + try { + const e3 = (t4) => t4; + t3 = xi.createPolicy("goog#html", { createHTML: e3, createScript: e3, createScriptURL: e3 }); + } catch (t4) { + } + return t3; + }()); + var e2 = Si; + return new class { + constructor(t3) { + this.g = t3; + } + toString() { + return this.g + ""; + } + }(e2 ? e2.createScriptURL(t2) : t2); +} +function Ri(t2, ...e2) { + if (0 === e2.length) return Li(t2[0]); + let n2 = t2[0]; + for (let r2 = 0; r2 < e2.length; r2++) n2 += encodeURIComponent(e2[r2]) + t2[r2 + 1]; + return Li(n2); +} +var Fi = [0, oi, vi, hi, -1, ai, vi, -1]; +var Ii = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var Mi = [0, hi, fi, hi, vi, -1, Xr(function(t2, e2, n2) { + return (0 === t2.h || 2 === t2.h) && (e2 = Ye(e2, 0 | e2[Z], n2, false, false), 2 == t2.h ? Bn(t2, Ln, e2) : e2.push(bn(t2.g)), true); +}, function(t2, e2, n2) { + if (null != (e2 = jr(Qt, e2)) && e2.length) { + n2 = ir(t2, n2); + for (let n3 = 0; n3 < e2.length; n3++) tr(t2.g, e2[n3]); + sr(t2, n2); + } +}, yr), fi, -1, [0, hi, -1], vi, hi, -1]; +var Pi = [0, fi, -2]; +var Oi = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var Ci = [0]; +var Ui = [0, oi, hi, 1, hi, -3]; +var Di = class extends Hn { + constructor(t2) { + super(t2, 2); + } +}; +var Ni = {}; +Ni[336783863] = [0, fi, hi, -1, oi, [0, [1, 2, 3, 4, 5, 6, 7, 8], gi, Ci, gi, Mi, gi, Pi, gi, Ui, gi, Fi, gi, [0, fi, -2], gi, [0, fi, vi], gi, [0, vi, fi]], [0, fi], hi, [0, [1, 3], [2, 4], gi, [0, ai], -1, gi, [0, li], -1, pi, [0, fi, -1]], fi]; +var Bi = [0, ii, -1, ui, -3, ii, ai, di, ci, ii, -1, ui, ci, ui, -2, di]; +function Gi(t2, e2) { + Ke(t2, 2, ae(e2), ""); +} +function ji(t2, e2) { + yn(t2, 3, e2); +} +function Vi(t2, e2) { + yn(t2, 4, e2); +} +var Xi = class extends Hn { + constructor(t2) { + super(t2, 500); + } + o(t2) { + return sn(this, 0, 7, t2); + } +}; +var Hi = [-1, {}]; +var Wi = [0, fi, 1, Hi]; +var zi = [0, fi, li, Hi]; +function Ki(t2, e2) { + hn(t2, 1, Xi, e2); +} +function Yi(t2, e2) { + yn(t2, 10, e2); +} +function $i(t2, e2) { + yn(t2, 15, e2); +} +var qi = class extends Hn { + constructor(t2) { + super(t2, 500); + } + o(t2) { + return sn(this, 0, 1001, t2); + } +}; +var Ji = [-500, pi, [-500, di, -1, li, -3, [-2, Ni, hi], pi, ki, ci, -1, Wi, zi, pi, [0, di, ui], di, Bi, ci, li, 987, li], 4, pi, [-500, fi, -1, [-1, {}], 998, fi], pi, [-500, fi, li, -1, [-2, {}, hi], 997, li, -1], ci, pi, [-500, fi, li, Hi, 998, li], li, ci, Wi, zi, pi, [0, di, -1, Hi], li, -2, Bi, di, -1, ui, [0, ui, _i], 978, Hi, pi, ki]; +qi.prototype.g = Ai(Ji); +var Zi = Ti(qi, Ji); +var Qi = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var ts = class extends Hn { + constructor(t2) { + super(t2); + } + g() { + return rn(this, Qi, 1); + } +}; +var es = [0, pi, [0, oi, ti, fi, -1]]; +var ns = Ti(ts, es); +var rs = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var is = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var ss = class extends Hn { + constructor(t2) { + super(t2); + } + h() { + return en(this, rs, 2); + } + g() { + return rn(this, is, 5); + } +}; +var os = Ti(class extends Hn { + constructor(t2) { + super(t2); + } +}, [0, li, ai, ni, [0, vi, [0, oi, -3], [0, ti, -3], [0, oi, -1, [0, pi, [0, oi, -2]]], pi, [0, ti, -1, fi, ti]], fi, -1, ri, pi, [0, oi, ti], li, ri]); +var as = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var cs = Ti(class extends Hn { + constructor(t2) { + super(t2); + } +}, [0, pi, [0, ti, -4]]); +var hs = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var us = Ti(class extends Hn { + constructor(t2) { + super(t2); + } +}, [0, pi, [0, ti, -4]]); +var ls = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var ds = [0, oi, -1, ni, vi]; +var fs = class extends Hn { + constructor(t2) { + super(t2); + } +}; +fs.prototype.g = Ai([0, ti, -4, ri]); +var ps = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var gs = Ti(class extends Hn { + constructor(t2) { + super(t2); + } +}, [0, pi, [0, 1, oi, fi, es], ri]); +var ms = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var ys = class extends Hn { + constructor(t2) { + super(t2); + } + oa() { + const t2 = Ge(this); + return null == t2 ? U() : t2; + } +}; +var _s = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var vs = [1, 2]; +var Es = Ti(class extends Hn { + constructor(t2) { + super(t2); + } +}, [0, pi, [0, vs, gi, [0, ni], gi, [0, mi], oi, fi], ri]); +var ws = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var Ts = [0, fi, oi, ti, li, -1]; +var As = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var bs = [0, hi, -1]; +var ks = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var Ss = [1, 2, 3, 4, 5]; +var xs = class extends Hn { + constructor(t2) { + super(t2); + } + g() { + return null != Ge(this); + } + h() { + return null != ln(this, 2); + } +}; +var Ls = class extends Hn { + constructor(t2) { + super(t2); + } + g() { + return qt(Ce(this, 2)) ?? false; + } +}; +var Rs = [0, mi, fi, [0, oi, ri, -1], [0, si, ri]]; +var Fs = [0, Rs, hi, [0, Ss, gi, Ui, gi, Mi, gi, Fi, gi, Ci, gi, Pi], vi]; +var Is = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var Ms = [0, Fs, ti, -1, oi]; +var Ps = wi(502141897, Is); +Ni[502141897] = Ms; +var Os = Ti(class extends Hn { + constructor(t2) { + super(t2); + } +}, [0, [0, vi, -1, ei, yi], ds]); +var Cs = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var Us = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var Ds = [0, Fs, ti, [0, Fs], hi]; +var Ns = [0, Fs, Ms, Ds, ti, [0, [0, Rs]]]; +var Bs = wi(508968150, Us); +Ni[508968150] = Ns, Ni[508968149] = Ds; +var Gs = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var js = wi(513916220, Gs); +Ni[513916220] = [0, Fs, Ns, oi]; +var Vs = class extends Hn { + constructor(t2) { + super(t2); + } + h() { + return en(this, ws, 2); + } + g() { + De(this, 2); + } +}; +var Xs = [0, Fs, Ts]; +Ni[478825465] = Xs; +var Hs = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var Ws = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var zs = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var Ks = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var Ys = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var $s = [0, Fs, [0, Fs], Xs, -1]; +var qs = [0, Fs, ti, oi]; +var Js = [0, Fs, ti]; +var Zs = [0, Fs, qs, Js, ti]; +var Qs = wi(479097054, Ys); +Ni[479097054] = [0, Fs, Zs, $s], Ni[463370452] = $s, Ni[464864288] = qs; +var to = wi(462713202, Ks); +Ni[462713202] = Zs, Ni[474472470] = Js; +var eo = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var no = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var ro = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var io = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var so = [0, Fs, ti, -1, oi]; +var oo = [0, Fs, ti, hi]; +io.prototype.g = Ai([0, Fs, Js, [0, Fs], Ms, Ds, so, oo]); +var ao = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var co = wi(456383383, ao); +Ni[456383383] = [0, Fs, Ts]; +var ho = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var uo = wi(476348187, ho); +Ni[476348187] = [0, Fs, bs]; +var lo = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var fo = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var po = [0, vi, -1]; +var go = wi(458105876, class extends Hn { + constructor(t2) { + super(t2); + } + g() { + var t2 = this.u; + const e2 = 0 | t2[Z]; + const n2 = 2 & e2; + return t2 = function(t3, e3, n3) { + var r2 = fo; + const i2 = 2 & e3; + let s2 = false; + if (null == n3) { + if (i2) return be(); + n3 = []; + } else if (n3.constructor === ye) { + if (0 == (2 & n3.L) || i2) return n3; + n3 = n3.X(); + } else Array.isArray(n3) ? s2 = !!(2 & (0 | n3[Z])) : n3 = []; + if (i2) { + if (!n3.length) return be(); + s2 || (s2 = true, rt(n3)); + } else s2 && (s2 = false, n3 = ze(n3)); + return s2 || (64 & (0 | n3[Z]) ? n3[Z] &= -33 : 32 & e3 && et(n3, 32)), Ne(t3, e3, 2, r2 = new ye(n3, r2, ue, void 0)), r2; + }(t2, e2, Ue(t2, e2, 2)), !n2 && fo && (t2.ra = true), t2; + } +}); +Ni[458105876] = [0, po, Wr, [true, ri, [0, fi, -1, li]]]; +var mo = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var yo = wi(458105758, mo); +Ni[458105758] = [0, Fs, fi, po]; +var _o = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var vo = wi(443442058, _o); +Ni[443442058] = [0, Fs, fi, oi, ti, li, -1, hi, ti], Ni[514774813] = so; +var Eo = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var wo = wi(516587230, Eo); +function To(t2, e2) { + return e2 = e2 ? e2.clone() : new ws(), void 0 !== t2.displayNamesLocale ? De(e2, 1, ae(t2.displayNamesLocale)) : void 0 === t2.displayNamesLocale && De(e2, 1), void 0 !== t2.maxResults ? pn(e2, 2, t2.maxResults) : "maxResults" in t2 && De(e2, 2), void 0 !== t2.scoreThreshold ? gn(e2, 3, t2.scoreThreshold) : "scoreThreshold" in t2 && De(e2, 3), void 0 !== t2.categoryAllowlist ? mn(e2, 4, t2.categoryAllowlist) : "categoryAllowlist" in t2 && De(e2, 4), void 0 !== t2.categoryDenylist ? mn(e2, 5, t2.categoryDenylist) : "categoryDenylist" in t2 && De(e2, 5), e2; +} +function Ao(t2, e2 = -1, n2 = "") { + return { categories: t2.map((t3) => ({ index: un(t3, 1) ?? 0 ?? -1, score: dn(t3, 2) ?? 0, categoryName: ln(t3, 3) ?? "" ?? "", displayName: ln(t3, 4) ?? "" ?? "" })), headIndex: e2, headName: n2 }; +} +function bo(t2) { + var e2 = Ve(t2, 3, $t, je()), n2 = Ve(t2, 2, Qt, je()), r2 = Ve(t2, 1, ce, je()), i2 = Ve(t2, 9, ce, je()); + const s2 = { categories: [], keypoints: [] }; + for (let t3 = 0; t3 < e2.length; t3++) s2.categories.push({ score: e2[t3], index: n2[t3] ?? -1, categoryName: r2[t3] ?? "", displayName: i2[t3] ?? "" }); + if ((e2 = en(t2, ss, 4)?.h()) && (s2.boundingBox = { originX: un(e2, 1) ?? 0, originY: un(e2, 2) ?? 0, width: un(e2, 3) ?? 0, height: un(e2, 4) ?? 0, angle: 0 }), en(t2, ss, 4)?.g().length) for (const e3 of en(t2, ss, 4).g()) s2.keypoints.push({ x: Be(e3, 1) ?? 0, y: Be(e3, 2) ?? 0, score: Be(e3, 4) ?? 0, label: ln(e3, 3) ?? "" }); + return s2; +} +function ko(t2) { + const e2 = []; + for (const n2 of rn(t2, hs, 1)) e2.push({ x: dn(n2, 1) ?? 0, y: dn(n2, 2) ?? 0, z: dn(n2, 3) ?? 0, visibility: dn(n2, 4) ?? 0 }); + return e2; +} +function So(t2) { + const e2 = []; + for (const n2 of rn(t2, as, 1)) e2.push({ x: dn(n2, 1) ?? 0, y: dn(n2, 2) ?? 0, z: dn(n2, 3) ?? 0, visibility: dn(n2, 4) ?? 0 }); + return e2; +} +function xo(t2) { + return Array.from(t2, (t3) => t3 > 127 ? t3 - 256 : t3); +} +function Lo(t2, e2) { + if (t2.length !== e2.length) throw Error(`Cannot compute cosine similarity between embeddings of different sizes (${t2.length} vs. ${e2.length}).`); + let n2 = 0, r2 = 0, i2 = 0; + for (let s2 = 0; s2 < t2.length; s2++) n2 += t2[s2] * e2[s2], r2 += t2[s2] * t2[s2], i2 += e2[s2] * e2[s2]; + if (r2 <= 0 || i2 <= 0) throw Error("Cannot compute cosine similarity on embedding with 0 norm."); + return n2 / Math.sqrt(r2 * i2); +} +var Ro; +Ni[516587230] = [0, Fs, so, oo, ti], Ni[518928384] = oo; +var Fo = 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]); +async function Io() { + if (void 0 === Ro) try { + await WebAssembly.instantiate(Fo), Ro = true; + } catch { + Ro = false; + } + return Ro; +} +async function Mo(t2, e2 = Ri``) { + const n2 = await Io() ? "wasm_internal" : "wasm_nosimd_internal"; + return { wasmLoaderPath: `${e2}/${t2}_${n2}.js`, wasmBinaryPath: `${e2}/${t2}_${n2}.wasm` }; +} +var Po = class { +}; +function Oo() { + var t2 = navigator; + return "undefined" != typeof OffscreenCanvas && (!function(t3 = navigator) { + return (t3 = t3.userAgent).includes("Safari") && !t3.includes("Chrome"); + }(t2) || !!((t2 = t2.userAgent.match(/Version\/([\d]+).*Safari/)) && t2.length >= 1 && Number(t2[1]) >= 17)); +} +async function Co(t2) { + if ("function" != typeof importScripts) { + const e2 = document.createElement("script"); + return e2.src = t2.toString(), e2.crossOrigin = "anonymous", new Promise((t3, n2) => { + e2.addEventListener("load", () => { + t3(); + }, false), e2.addEventListener("error", (t4) => { + n2(t4); + }, false), document.body.appendChild(e2); + }); + } + importScripts(t2.toString()); +} +function Uo(t2) { + return void 0 !== t2.videoWidth ? [t2.videoWidth, t2.videoHeight] : void 0 !== t2.naturalWidth ? [t2.naturalWidth, t2.naturalHeight] : void 0 !== t2.displayWidth ? [t2.displayWidth, t2.displayHeight] : [t2.width, t2.height]; +} +function Do(t2, e2, n2) { + t2.m || console.error("No wasm multistream support detected: ensure dependency inclusion of :gl_graph_runner_internal_multi_input target"), n2(e2 = t2.i.stringToNewUTF8(e2)), t2.i._free(e2); +} +function No(t2, e2, n2) { + if (!t2.i.canvas) throw Error("No OpenGL canvas configured."); + if (n2 ? t2.i._bindTextureToStream(n2) : t2.i._bindTextureToCanvas(), !(n2 = t2.i.canvas.getContext("webgl2") || t2.i.canvas.getContext("webgl"))) throw Error("Failed to obtain WebGL context from the provided canvas. `getContext()` should only be invoked with `webgl` or `webgl2`."); + t2.i.gpuOriginForWebTexturesIsBottomLeft && n2.pixelStorei(n2.UNPACK_FLIP_Y_WEBGL, true), n2.texImage2D(n2.TEXTURE_2D, 0, n2.RGBA, n2.RGBA, n2.UNSIGNED_BYTE, e2), t2.i.gpuOriginForWebTexturesIsBottomLeft && n2.pixelStorei(n2.UNPACK_FLIP_Y_WEBGL, false); + const [r2, i2] = Uo(e2); + return !t2.l || r2 === t2.i.canvas.width && i2 === t2.i.canvas.height || (t2.i.canvas.width = r2, t2.i.canvas.height = i2), [r2, i2]; +} +function Bo(t2, e2, n2) { + t2.m || console.error("No wasm multistream support detected: ensure dependency inclusion of :gl_graph_runner_internal_multi_input target"); + const r2 = new Uint32Array(e2.length); + for (let n3 = 0; n3 < e2.length; n3++) r2[n3] = t2.i.stringToNewUTF8(e2[n3]); + e2 = t2.i._malloc(4 * r2.length), t2.i.HEAPU32.set(r2, e2 >> 2), n2(e2); + for (const e3 of r2) t2.i._free(e3); + t2.i._free(e2); +} +function Go(t2, e2, n2) { + t2.i.simpleListeners = t2.i.simpleListeners || {}, t2.i.simpleListeners[e2] = n2; +} +function jo(t2, e2, n2) { + let r2 = []; + t2.i.simpleListeners = t2.i.simpleListeners || {}, t2.i.simpleListeners[e2] = (t3, e3, i2) => { + e3 ? (n2(r2, i2), r2 = []) : r2.push(t3); + }; +} +Po.forVisionTasks = function(t2) { + return Mo("vision", t2); +}, Po.forTextTasks = function(t2) { + return Mo("text", t2); +}, Po.forGenAiExperimentalTasks = function(t2) { + return Mo("genai_experimental", t2); +}, Po.forGenAiTasks = function(t2) { + return Mo("genai", t2); +}, Po.forAudioTasks = function(t2) { + return Mo("audio", t2); +}, Po.isSimdSupported = function() { + return Io(); +}; +async function Vo(t2, e2, n2, r2) { + return t2 = await (async (t3, e3, n3, r3, i2) => { + if (e3 && await Co(e3), !self.ModuleFactory) throw Error("ModuleFactory not set."); + if (n3 && (await Co(n3), !self.ModuleFactory)) throw Error("ModuleFactory not set."); + return self.Module && i2 && ((e3 = self.Module).locateFile = i2.locateFile, i2.mainScriptUrlOrBlob && (e3.mainScriptUrlOrBlob = i2.mainScriptUrlOrBlob)), i2 = await self.ModuleFactory(self.Module || i2), self.ModuleFactory = self.Module = void 0, new t3(i2, r3); + })(t2, n2.wasmLoaderPath, n2.assetLoaderPath, e2, { locateFile: (t3) => t3.endsWith(".wasm") ? n2.wasmBinaryPath.toString() : n2.assetBinaryPath && t3.endsWith(".data") ? n2.assetBinaryPath.toString() : t3 }), await t2.o(r2), t2; +} +function Xo(t2, e2) { + const n2 = en(t2.baseOptions, xs, 1) || new xs(); + "string" == typeof e2 ? (De(n2, 2, ae(e2)), De(n2, 1)) : e2 instanceof Uint8Array && (De(n2, 1, ft(e2, false)), De(n2, 2)), sn(t2.baseOptions, 0, 1, n2); +} +function Ho(t2) { + try { + const e2 = t2.G.length; + if (1 === e2) throw Error(t2.G[0].message); + if (e2 > 1) throw Error("Encountered multiple errors: " + t2.G.map((t3) => t3.message).join(", ")); + } finally { + t2.G = []; + } +} +function Wo(t2, e2) { + t2.B = Math.max(t2.B, e2); +} +function zo(t2, e2) { + t2.A = new Xi(), Gi(t2.A, "PassThroughCalculator"), ji(t2.A, "free_memory"), Vi(t2.A, "free_memory_unused_out"), Yi(e2, "free_memory"), Ki(e2, t2.A); +} +function Ko(t2, e2) { + ji(t2.A, e2), Vi(t2.A, e2 + "_unused_out"); +} +function Yo(t2) { + t2.g.addBoolToStream(true, "free_memory", t2.B); +} +var $o = class { + constructor(t2) { + this.g = t2, this.G = [], this.B = 0, this.g.setAutoRenderToScreen(false); + } + l(t2, e2 = true) { + if (e2) { + const e3 = t2.baseOptions || {}; + if (t2.baseOptions?.modelAssetBuffer && t2.baseOptions?.modelAssetPath) throw Error("Cannot set both baseOptions.modelAssetPath and baseOptions.modelAssetBuffer"); + if (!(en(this.baseOptions, xs, 1)?.g() || en(this.baseOptions, xs, 1)?.h() || t2.baseOptions?.modelAssetBuffer || t2.baseOptions?.modelAssetPath)) throw Error("Either baseOptions.modelAssetPath or baseOptions.modelAssetBuffer must be set"); + if (function(t3, e4) { + let n2 = en(t3.baseOptions, ks, 3); + if (!n2) { + var r2 = n2 = new ks(), i2 = new Oi(); + on(r2, 4, Ss, i2); + } + "delegate" in e4 && ("GPU" === e4.delegate ? (e4 = n2, r2 = new Ii(), on(e4, 2, Ss, r2)) : (e4 = n2, r2 = new Oi(), on(e4, 4, Ss, r2))), sn(t3.baseOptions, 0, 3, n2); + }(this, e3), e3.modelAssetPath) return fetch(e3.modelAssetPath.toString()).then((t3) => { + if (t3.ok) return t3.arrayBuffer(); + throw Error(`Failed to fetch model: ${e3.modelAssetPath} (${t3.status})`); + }).then((t3) => { + try { + this.g.i.FS_unlink("/model.dat"); + } catch { + } + this.g.i.FS_createDataFile("/", "model.dat", new Uint8Array(t3), true, false, false), Xo(this, "/model.dat"), this.m(), this.I(); + }); + if (e3.modelAssetBuffer instanceof Uint8Array) Xo(this, e3.modelAssetBuffer); + else if (e3.modelAssetBuffer) return async function(t3) { + const e4 = []; + for (var n2 = 0; ; ) { + const { done: r2, value: i2 } = await t3.read(); + if (r2) break; + e4.push(i2), n2 += i2.length; + } + if (0 === e4.length) return new Uint8Array(0); + if (1 === e4.length) return e4[0]; + t3 = new Uint8Array(n2), n2 = 0; + for (const r2 of e4) t3.set(r2, n2), n2 += r2.length; + return t3; + }(e3.modelAssetBuffer).then((t3) => { + Xo(this, t3), this.m(), this.I(); + }); + } + return this.m(), this.I(), Promise.resolve(); + } + I() { + } + da() { + let t2; + if (this.g.da((e2) => { + t2 = Zi(e2); + }), !t2) throw Error("Failed to retrieve CalculatorGraphConfig"); + return t2; + } + setGraph(t2, e2) { + this.g.attachErrorListener((t3, e3) => { + this.G.push(Error(e3)); + }), this.g.La(), this.g.setGraph(t2, e2), this.A = void 0, Ho(this); + } + finishProcessing() { + this.g.finishProcessing(), Ho(this); + } + close() { + this.A = void 0, this.g.closeGraph(); + } +}; +function qo(t2, e2) { + if (!t2) throw Error(`Unable to obtain required WebGL resource: ${e2}`); + return t2; +} +$o.prototype.close = $o.prototype.close, function(e2, n2) { + e2 = e2.split("."); + var r2, i2 = t; + e2[0] in i2 || void 0 === i2.execScript || i2.execScript("var " + e2[0]); + for (; e2.length && (r2 = e2.shift()); ) e2.length || void 0 === n2 ? i2 = i2[r2] && i2[r2] !== Object.prototype[r2] ? i2[r2] : i2[r2] = {} : i2[r2] = n2; +}("TaskRunner", $o); +var Jo = class { + constructor(t2, e2, n2, r2) { + this.g = t2, this.h = e2, this.m = n2, this.l = r2; + } + bind() { + this.g.bindVertexArray(this.h); + } + close() { + this.g.deleteVertexArray(this.h), this.g.deleteBuffer(this.m), this.g.deleteBuffer(this.l); + } +}; +function Zo(t2, e2, n2) { + const r2 = t2.g; + if (n2 = qo(r2.createShader(n2), "Failed to create WebGL shader"), r2.shaderSource(n2, e2), r2.compileShader(n2), !r2.getShaderParameter(n2, r2.COMPILE_STATUS)) throw Error(`Could not compile WebGL shader: ${r2.getShaderInfoLog(n2)}`); + return r2.attachShader(t2.h, n2), n2; +} +function Qo(t2, e2) { + const n2 = t2.g, r2 = qo(n2.createVertexArray(), "Failed to create vertex array"); + n2.bindVertexArray(r2); + const i2 = qo(n2.createBuffer(), "Failed to create buffer"); + n2.bindBuffer(n2.ARRAY_BUFFER, i2), n2.enableVertexAttribArray(t2.O), n2.vertexAttribPointer(t2.O, 2, n2.FLOAT, false, 0, 0), n2.bufferData(n2.ARRAY_BUFFER, new Float32Array([-1, -1, -1, 1, 1, 1, 1, -1]), n2.STATIC_DRAW); + const s2 = qo(n2.createBuffer(), "Failed to create buffer"); + return n2.bindBuffer(n2.ARRAY_BUFFER, s2), n2.enableVertexAttribArray(t2.I), n2.vertexAttribPointer(t2.I, 2, n2.FLOAT, false, 0, 0), n2.bufferData(n2.ARRAY_BUFFER, new Float32Array(e2 ? [0, 1, 0, 0, 1, 0, 1, 1] : [0, 0, 0, 1, 1, 1, 1, 0]), n2.STATIC_DRAW), n2.bindBuffer(n2.ARRAY_BUFFER, null), n2.bindVertexArray(null), new Jo(n2, r2, i2, s2); +} +function ta(t2, e2) { + if (t2.g) { + if (e2 !== t2.g) throw Error("Cannot change GL context once initialized"); + } else t2.g = e2; +} +function ea(t2, e2, n2, r2) { + return ta(t2, e2), t2.h || (t2.m(), t2.C()), n2 ? (t2.s || (t2.s = Qo(t2, true)), n2 = t2.s) : (t2.v || (t2.v = Qo(t2, false)), n2 = t2.v), e2.useProgram(t2.h), n2.bind(), t2.l(), t2 = r2(), n2.g.bindVertexArray(null), t2; +} +function na(t2, e2, n2) { + return ta(t2, e2), t2 = qo(e2.createTexture(), "Failed to create texture"), e2.bindTexture(e2.TEXTURE_2D, t2), e2.texParameteri(e2.TEXTURE_2D, e2.TEXTURE_WRAP_S, e2.CLAMP_TO_EDGE), e2.texParameteri(e2.TEXTURE_2D, e2.TEXTURE_WRAP_T, e2.CLAMP_TO_EDGE), e2.texParameteri(e2.TEXTURE_2D, e2.TEXTURE_MIN_FILTER, n2 ?? e2.LINEAR), e2.texParameteri(e2.TEXTURE_2D, e2.TEXTURE_MAG_FILTER, n2 ?? e2.LINEAR), e2.bindTexture(e2.TEXTURE_2D, null), t2; +} +function ra(t2, e2, n2) { + ta(t2, e2), t2.A || (t2.A = qo(e2.createFramebuffer(), "Failed to create framebuffe.")), e2.bindFramebuffer(e2.FRAMEBUFFER, t2.A), e2.framebufferTexture2D(e2.FRAMEBUFFER, e2.COLOR_ATTACHMENT0, e2.TEXTURE_2D, n2, 0); +} +function ia(t2) { + t2.g?.bindFramebuffer(t2.g.FRAMEBUFFER, null); +} +var sa = class { + G() { + return "\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D inputTexture;\n void main() {\n gl_FragColor = texture2D(inputTexture, vTex);\n }\n "; + } + m() { + const t2 = this.g; + if (this.h = qo(t2.createProgram(), "Failed to create WebGL program"), this.aa = Zo(this, "\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 }", t2.VERTEX_SHADER), this.Z = Zo(this, this.G(), t2.FRAGMENT_SHADER), t2.linkProgram(this.h), !t2.getProgramParameter(this.h, t2.LINK_STATUS)) throw Error(`Error during program linking: ${t2.getProgramInfoLog(this.h)}`); + this.O = t2.getAttribLocation(this.h, "aVertex"), this.I = t2.getAttribLocation(this.h, "aTex"); + } + C() { + } + l() { + } + close() { + if (this.h) { + const t2 = this.g; + t2.deleteProgram(this.h), t2.deleteShader(this.aa), t2.deleteShader(this.Z); + } + this.A && this.g.deleteFramebuffer(this.A), this.v && this.v.close(), this.s && this.s.close(); + } +}; +var oa = class extends sa { + G() { + return "\n precision mediump float;\n uniform sampler2D backgroundTexture;\n uniform sampler2D maskTexture;\n uniform sampler2D colorMappingTexture;\n varying vec2 vTex;\n void main() {\n vec4 backgroundColor = texture2D(backgroundTexture, vTex);\n float category = texture2D(maskTexture, vTex).r;\n vec4 categoryColor = texture2D(colorMappingTexture, vec2(category, 0.0));\n gl_FragColor = mix(backgroundColor, categoryColor, categoryColor.a);\n }\n "; + } + C() { + const t2 = this.g; + t2.activeTexture(t2.TEXTURE1), this.B = na(this, t2, t2.LINEAR), t2.activeTexture(t2.TEXTURE2), this.j = na(this, t2, t2.NEAREST); + } + m() { + super.m(); + const t2 = this.g; + this.K = qo(t2.getUniformLocation(this.h, "backgroundTexture"), "Uniform location"), this.T = qo(t2.getUniformLocation(this.h, "colorMappingTexture"), "Uniform location"), this.J = qo(t2.getUniformLocation(this.h, "maskTexture"), "Uniform location"); + } + l() { + super.l(); + const t2 = this.g; + t2.uniform1i(this.J, 0), t2.uniform1i(this.K, 1), t2.uniform1i(this.T, 2); + } + close() { + this.B && this.g.deleteTexture(this.B), this.j && this.g.deleteTexture(this.j), super.close(); + } +}; +var aa = class extends sa { + G() { + return "\n precision mediump float;\n uniform sampler2D maskTexture;\n uniform sampler2D defaultTexture;\n uniform sampler2D overlayTexture;\n varying vec2 vTex;\n void main() {\n float confidence = texture2D(maskTexture, vTex).r;\n vec4 defaultColor = texture2D(defaultTexture, vTex);\n vec4 overlayColor = texture2D(overlayTexture, vTex);\n // Apply the alpha from the overlay and merge in the default color\n overlayColor = mix(defaultColor, overlayColor, overlayColor.a);\n gl_FragColor = mix(defaultColor, overlayColor, confidence);\n }\n "; + } + C() { + const t2 = this.g; + t2.activeTexture(t2.TEXTURE1), this.j = na(this, t2), t2.activeTexture(t2.TEXTURE2), this.B = na(this, t2); + } + m() { + super.m(); + const t2 = this.g; + this.J = qo(t2.getUniformLocation(this.h, "defaultTexture"), "Uniform location"), this.K = qo(t2.getUniformLocation(this.h, "overlayTexture"), "Uniform location"), this.H = qo(t2.getUniformLocation(this.h, "maskTexture"), "Uniform location"); + } + l() { + super.l(); + const t2 = this.g; + t2.uniform1i(this.H, 0), t2.uniform1i(this.J, 1), t2.uniform1i(this.K, 2); + } + close() { + this.j && this.g.deleteTexture(this.j), this.B && this.g.deleteTexture(this.B), super.close(); + } +}; +function ca(t2, e2) { + switch (e2) { + case 0: + return t2.g.find((t3) => t3 instanceof Uint8Array); + case 1: + return t2.g.find((t3) => t3 instanceof Float32Array); + case 2: + return t2.g.find((t3) => "undefined" != typeof WebGLTexture && t3 instanceof WebGLTexture); + default: + throw Error(`Type is not supported: ${e2}`); + } +} +function ha(t2) { + var e2 = ca(t2, 1); + if (!e2) { + if (e2 = ca(t2, 0)) e2 = new Float32Array(e2).map((t3) => t3 / 255); + else { + e2 = new Float32Array(t2.width * t2.height); + const r2 = la(t2); + var n2 = fa(t2); + if (ra(n2, r2, ua(t2)), "iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform) || navigator.userAgent.includes("Mac") && "document" in self && "ontouchend" in self.document) { + n2 = new Float32Array(t2.width * t2.height * 4), r2.readPixels(0, 0, t2.width, t2.height, r2.RGBA, r2.FLOAT, n2); + for (let t3 = 0, r3 = 0; t3 < e2.length; ++t3, r3 += 4) e2[t3] = n2[r3]; + } else r2.readPixels(0, 0, t2.width, t2.height, r2.RED, r2.FLOAT, e2); + } + t2.g.push(e2); + } + return e2; +} +function ua(t2) { + let e2 = ca(t2, 2); + if (!e2) { + const n2 = la(t2); + e2 = pa(t2); + const r2 = ha(t2), i2 = da(t2); + n2.texImage2D(n2.TEXTURE_2D, 0, i2, t2.width, t2.height, 0, n2.RED, n2.FLOAT, r2), ga(t2); + } + return e2; +} +function la(t2) { + if (!t2.canvas) throw Error("Conversion to different image formats require that a canvas is passed when initializing the image."); + return t2.h || (t2.h = qo(t2.canvas.getContext("webgl2"), "You cannot use a canvas that is already bound to a different type of rendering context.")), t2.h; +} +function da(t2) { + if (t2 = la(t2), !ma) if (t2.getExtension("EXT_color_buffer_float") && t2.getExtension("OES_texture_float_linear") && t2.getExtension("EXT_float_blend")) ma = t2.R32F; + else { + if (!t2.getExtension("EXT_color_buffer_half_float")) throw Error("GPU does not fully support 4-channel float32 or float16 formats"); + ma = t2.R16F; + } + return ma; +} +function fa(t2) { + return t2.l || (t2.l = new sa()), t2.l; +} +function pa(t2) { + const e2 = la(t2); + e2.viewport(0, 0, t2.width, t2.height), e2.activeTexture(e2.TEXTURE0); + let n2 = ca(t2, 2); + return n2 || (n2 = na(fa(t2), e2, t2.m ? e2.LINEAR : e2.NEAREST), t2.g.push(n2), t2.j = true), e2.bindTexture(e2.TEXTURE_2D, n2), n2; +} +function ga(t2) { + t2.h.bindTexture(t2.h.TEXTURE_2D, null); +} +var ma; +var ya = class { + constructor(t2, e2, n2, r2, i2, s2, o2) { + this.g = t2, this.m = e2, this.j = n2, this.canvas = r2, this.l = i2, this.width = s2, this.height = o2, this.j && (0 === --_a && console.error("You seem to be creating MPMask instances without invoking .close(). This leaks resources.")); + } + Fa() { + return !!ca(this, 0); + } + ja() { + return !!ca(this, 1); + } + P() { + return !!ca(this, 2); + } + ia() { + return (e2 = ca(t2 = this, 0)) || (e2 = ha(t2), e2 = new Uint8Array(e2.map((t3) => 255 * t3)), t2.g.push(e2)), e2; + var t2, e2; + } + ha() { + return ha(this); + } + M() { + return ua(this); + } + clone() { + const t2 = []; + for (const e2 of this.g) { + let n2; + if (e2 instanceof Uint8Array) n2 = new Uint8Array(e2); + else if (e2 instanceof Float32Array) n2 = new Float32Array(e2); + else { + if (!(e2 instanceof WebGLTexture)) throw Error(`Type is not supported: ${e2}`); + { + const t3 = la(this), e3 = fa(this); + t3.activeTexture(t3.TEXTURE1), n2 = na(e3, t3, this.m ? t3.LINEAR : t3.NEAREST), t3.bindTexture(t3.TEXTURE_2D, n2); + const r2 = da(this); + t3.texImage2D(t3.TEXTURE_2D, 0, r2, this.width, this.height, 0, t3.RED, t3.FLOAT, null), t3.bindTexture(t3.TEXTURE_2D, null), ra(e3, t3, n2), ea(e3, t3, false, () => { + pa(this), t3.clearColor(0, 0, 0, 0), t3.clear(t3.COLOR_BUFFER_BIT), t3.drawArrays(t3.TRIANGLE_FAN, 0, 4), ga(this); + }), ia(e3), ga(this); + } + } + t2.push(n2); + } + return new ya(t2, this.m, this.P(), this.canvas, this.l, this.width, this.height); + } + close() { + this.j && la(this).deleteTexture(ca(this, 2)), _a = -1; + } +}; +ya.prototype.close = ya.prototype.close, ya.prototype.clone = ya.prototype.clone, ya.prototype.getAsWebGLTexture = ya.prototype.M, ya.prototype.getAsFloat32Array = ya.prototype.ha, ya.prototype.getAsUint8Array = ya.prototype.ia, ya.prototype.hasWebGLTexture = ya.prototype.P, ya.prototype.hasFloat32Array = ya.prototype.ja, ya.prototype.hasUint8Array = ya.prototype.Fa; +var _a = 250; +var va = { color: "white", lineWidth: 4, radius: 6 }; +function Ea(t2) { + return { ...va, fillColor: (t2 = t2 || {}).color, ...t2 }; +} +function wa(t2, e2) { + return t2 instanceof Function ? t2(e2) : t2; +} +function Ta(t2, e2, n2) { + return Math.max(Math.min(e2, n2), Math.min(Math.max(e2, n2), t2)); +} +function Aa(t2) { + if (!t2.l) throw Error("CPU rendering requested but CanvasRenderingContext2D not provided."); + return t2.l; +} +function ba(t2) { + if (!t2.j) throw Error("GPU rendering requested but WebGL2RenderingContext not provided."); + return t2.j; +} +function ka(t2, e2, n2) { + if (e2.P()) n2(e2.M()); + else { + const r2 = e2.ja() ? e2.ha() : e2.ia(); + t2.m = t2.m ?? new sa(); + const i2 = ba(t2); + n2((t2 = new ya([r2], e2.m, false, i2.canvas, t2.m, e2.width, e2.height)).M()), t2.close(); + } +} +function Sa(t2, e2, n2, r2) { + const i2 = function(t3) { + return t3.g || (t3.g = new oa()), t3.g; + }(t2), s2 = ba(t2), o2 = Array.isArray(n2) ? new ImageData(new Uint8ClampedArray(n2), 1, 1) : n2; + ea(i2, s2, true, () => { + !function(t4, e3, n3, r3) { + const i3 = t4.g; + if (i3.activeTexture(i3.TEXTURE0), i3.bindTexture(i3.TEXTURE_2D, e3), i3.activeTexture(i3.TEXTURE1), i3.bindTexture(i3.TEXTURE_2D, t4.B), i3.texImage2D(i3.TEXTURE_2D, 0, i3.RGBA, i3.RGBA, i3.UNSIGNED_BYTE, n3), t4.H && function(t5, e4) { + if (t5 !== e4) return false; + t5 = t5.entries(), e4 = e4.entries(); + for (const [r4, i4] of t5) { + t5 = r4; + const s3 = i4; + var n4 = e4.next(); + if (n4.done) return false; + const [o3, a2] = n4.value; + if (n4 = a2, t5 !== o3 || s3[0] !== n4[0] || s3[1] !== n4[1] || s3[2] !== n4[2] || s3[3] !== n4[3]) return false; + } + return !!e4.next().done; + }(t4.H, r3)) i3.activeTexture(i3.TEXTURE2), i3.bindTexture(i3.TEXTURE_2D, t4.j); + else { + t4.H = r3; + const e4 = Array(1024).fill(0); + r3.forEach((t5, n4) => { + if (4 !== t5.length) throw Error(`Color at index ${n4} is not a four-channel value.`); + e4[4 * n4] = t5[0], e4[4 * n4 + 1] = t5[1], e4[4 * n4 + 2] = t5[2], e4[4 * n4 + 3] = t5[3]; + }), i3.activeTexture(i3.TEXTURE2), i3.bindTexture(i3.TEXTURE_2D, t4.j), i3.texImage2D(i3.TEXTURE_2D, 0, i3.RGBA, 256, 1, 0, i3.RGBA, i3.UNSIGNED_BYTE, new Uint8Array(e4)); + } + }(i2, e2, o2, r2), s2.clearColor(0, 0, 0, 0), s2.clear(s2.COLOR_BUFFER_BIT), s2.drawArrays(s2.TRIANGLE_FAN, 0, 4); + const t3 = i2.g; + t3.activeTexture(t3.TEXTURE0), t3.bindTexture(t3.TEXTURE_2D, null), t3.activeTexture(t3.TEXTURE1), t3.bindTexture(t3.TEXTURE_2D, null), t3.activeTexture(t3.TEXTURE2), t3.bindTexture(t3.TEXTURE_2D, null); + }); +} +function xa(t2, e2, n2, r2) { + const i2 = ba(t2), s2 = function(t3) { + return t3.h || (t3.h = new aa()), t3.h; + }(t2), o2 = Array.isArray(n2) ? new ImageData(new Uint8ClampedArray(n2), 1, 1) : n2, a2 = Array.isArray(r2) ? new ImageData(new Uint8ClampedArray(r2), 1, 1) : r2; + ea(s2, i2, true, () => { + var t3 = s2.g; + t3.activeTexture(t3.TEXTURE0), t3.bindTexture(t3.TEXTURE_2D, e2), t3.activeTexture(t3.TEXTURE1), t3.bindTexture(t3.TEXTURE_2D, s2.j), t3.texImage2D(t3.TEXTURE_2D, 0, t3.RGBA, t3.RGBA, t3.UNSIGNED_BYTE, o2), t3.activeTexture(t3.TEXTURE2), t3.bindTexture(t3.TEXTURE_2D, s2.B), t3.texImage2D(t3.TEXTURE_2D, 0, t3.RGBA, t3.RGBA, t3.UNSIGNED_BYTE, a2), i2.clearColor(0, 0, 0, 0), i2.clear(i2.COLOR_BUFFER_BIT), i2.drawArrays(i2.TRIANGLE_FAN, 0, 4), i2.bindTexture(i2.TEXTURE_2D, null), (t3 = s2.g).activeTexture(t3.TEXTURE0), t3.bindTexture(t3.TEXTURE_2D, null), t3.activeTexture(t3.TEXTURE1), t3.bindTexture(t3.TEXTURE_2D, null), t3.activeTexture(t3.TEXTURE2), t3.bindTexture(t3.TEXTURE_2D, null); + }); +} +var La = class { + constructor(t2, e2) { + t2 instanceof CanvasRenderingContext2D || t2 instanceof OffscreenCanvasRenderingContext2D ? (this.l = t2, this.j = e2) : this.j = t2; + } + ya(t2, e2) { + if (t2) { + var n2 = Aa(this); + e2 = Ea(e2), n2.save(); + var r2 = n2.canvas, i2 = 0; + for (const s2 of t2) n2.fillStyle = wa(e2.fillColor, { index: i2, from: s2 }), n2.strokeStyle = wa(e2.color, { index: i2, from: s2 }), n2.lineWidth = wa(e2.lineWidth, { index: i2, from: s2 }), (t2 = new Path2D()).arc(s2.x * r2.width, s2.y * r2.height, wa(e2.radius, { index: i2, from: s2 }), 0, 2 * Math.PI), n2.fill(t2), n2.stroke(t2), ++i2; + n2.restore(); + } + } + xa(t2, e2, n2) { + if (t2 && e2) { + var r2 = Aa(this); + n2 = Ea(n2), r2.save(); + var i2 = r2.canvas, s2 = 0; + for (const o2 of e2) { + r2.beginPath(), e2 = t2[o2.start]; + const a2 = t2[o2.end]; + e2 && a2 && (r2.strokeStyle = wa(n2.color, { index: s2, from: e2, to: a2 }), r2.lineWidth = wa(n2.lineWidth, { index: s2, from: e2, to: a2 }), r2.moveTo(e2.x * i2.width, e2.y * i2.height), r2.lineTo(a2.x * i2.width, a2.y * i2.height)), ++s2, r2.stroke(); + } + r2.restore(); + } + } + ua(t2, e2) { + const n2 = Aa(this); + e2 = Ea(e2), n2.save(), n2.beginPath(), n2.lineWidth = wa(e2.lineWidth, {}), n2.strokeStyle = wa(e2.color, {}), n2.fillStyle = wa(e2.fillColor, {}), n2.moveTo(t2.originX, t2.originY), n2.lineTo(t2.originX + t2.width, t2.originY), n2.lineTo(t2.originX + t2.width, t2.originY + t2.height), n2.lineTo(t2.originX, t2.originY + t2.height), n2.lineTo(t2.originX, t2.originY), n2.stroke(), n2.fill(), n2.restore(); + } + va(t2, e2, n2 = [0, 0, 0, 255]) { + this.l ? function(t3, e3, n3, r2) { + const i2 = ba(t3); + ka(t3, e3, (e4) => { + Sa(t3, e4, n3, r2), (e4 = Aa(t3)).drawImage(i2.canvas, 0, 0, e4.canvas.width, e4.canvas.height); + }); + }(this, t2, n2, e2) : Sa(this, t2.M(), n2, e2); + } + wa(t2, e2, n2) { + this.l ? function(t3, e3, n3, r2) { + const i2 = ba(t3); + ka(t3, e3, (e4) => { + xa(t3, e4, n3, r2), (e4 = Aa(t3)).drawImage(i2.canvas, 0, 0, e4.canvas.width, e4.canvas.height); + }); + }(this, t2, e2, n2) : xa(this, t2.M(), e2, n2); + } + close() { + this.g?.close(), this.g = void 0, this.h?.close(), this.h = void 0, this.m?.close(), this.m = void 0; + } +}; +function Ra(t2, e2) { + switch (e2) { + case 0: + return t2.g.find((t3) => t3 instanceof ImageData); + case 1: + return t2.g.find((t3) => "undefined" != typeof ImageBitmap && t3 instanceof ImageBitmap); + case 2: + return t2.g.find((t3) => "undefined" != typeof WebGLTexture && t3 instanceof WebGLTexture); + default: + throw Error(`Type is not supported: ${e2}`); + } +} +function Fa(t2) { + var e2 = Ra(t2, 0); + if (!e2) { + e2 = Ma(t2); + const n2 = Pa(t2), r2 = new Uint8Array(t2.width * t2.height * 4); + ra(n2, e2, Ia(t2)), e2.readPixels(0, 0, t2.width, t2.height, e2.RGBA, e2.UNSIGNED_BYTE, r2), ia(n2), e2 = new ImageData(new Uint8ClampedArray(r2.buffer), t2.width, t2.height), t2.g.push(e2); + } + return e2; +} +function Ia(t2) { + let e2 = Ra(t2, 2); + if (!e2) { + const n2 = Ma(t2); + e2 = Oa(t2); + const r2 = Ra(t2, 1) || Fa(t2); + n2.texImage2D(n2.TEXTURE_2D, 0, n2.RGBA, n2.RGBA, n2.UNSIGNED_BYTE, r2), Ca(t2); + } + return e2; +} +function Ma(t2) { + if (!t2.canvas) throw Error("Conversion to different image formats require that a canvas is passed when initializing the image."); + return t2.h || (t2.h = qo(t2.canvas.getContext("webgl2"), "You cannot use a canvas that is already bound to a different type of rendering context.")), t2.h; +} +function Pa(t2) { + return t2.l || (t2.l = new sa()), t2.l; +} +function Oa(t2) { + const e2 = Ma(t2); + e2.viewport(0, 0, t2.width, t2.height), e2.activeTexture(e2.TEXTURE0); + let n2 = Ra(t2, 2); + return n2 || (n2 = na(Pa(t2), e2), t2.g.push(n2), t2.m = true), e2.bindTexture(e2.TEXTURE_2D, n2), n2; +} +function Ca(t2) { + t2.h.bindTexture(t2.h.TEXTURE_2D, null); +} +function Ua(t2) { + const e2 = Ma(t2); + return ea(Pa(t2), e2, true, () => function(t3, e3) { + const n2 = t3.canvas; + if (n2.width === t3.width && n2.height === t3.height) return e3(); + const r2 = n2.width, i2 = n2.height; + return n2.width = t3.width, n2.height = t3.height, t3 = e3(), n2.width = r2, n2.height = i2, t3; + }(t2, () => { + if (e2.bindFramebuffer(e2.FRAMEBUFFER, null), e2.clearColor(0, 0, 0, 0), e2.clear(e2.COLOR_BUFFER_BIT), e2.drawArrays(e2.TRIANGLE_FAN, 0, 4), !(t2.canvas instanceof OffscreenCanvas)) throw Error("Conversion to ImageBitmap requires that the MediaPipe Tasks is initialized with an OffscreenCanvas"); + return t2.canvas.transferToImageBitmap(); + })); +} +La.prototype.close = La.prototype.close, La.prototype.drawConfidenceMask = La.prototype.wa, La.prototype.drawCategoryMask = La.prototype.va, La.prototype.drawBoundingBox = La.prototype.ua, La.prototype.drawConnectors = La.prototype.xa, La.prototype.drawLandmarks = La.prototype.ya, La.lerp = function(t2, e2, n2, r2, i2) { + return Ta(r2 * (1 - (t2 - e2) / (n2 - e2)) + i2 * (1 - (n2 - t2) / (n2 - e2)), r2, i2); +}, La.clamp = Ta; +var Da = class { + constructor(t2, e2, n2, r2, i2, s2, o2) { + this.g = t2, this.j = e2, this.m = n2, this.canvas = r2, this.l = i2, this.width = s2, this.height = o2, (this.j || this.m) && (0 === --Na && console.error("You seem to be creating MPImage instances without invoking .close(). This leaks resources.")); + } + Ea() { + return !!Ra(this, 0); + } + ka() { + return !!Ra(this, 1); + } + P() { + return !!Ra(this, 2); + } + Ca() { + return Fa(this); + } + Ba() { + var t2 = Ra(this, 1); + return t2 || (Ia(this), Oa(this), t2 = Ua(this), Ca(this), this.g.push(t2), this.j = true), t2; + } + M() { + return Ia(this); + } + clone() { + const t2 = []; + for (const e2 of this.g) { + let n2; + if (e2 instanceof ImageData) n2 = new ImageData(e2.data, this.width, this.height); + else if (e2 instanceof WebGLTexture) { + const t3 = Ma(this), e3 = Pa(this); + t3.activeTexture(t3.TEXTURE1), n2 = na(e3, t3), t3.bindTexture(t3.TEXTURE_2D, n2), t3.texImage2D(t3.TEXTURE_2D, 0, t3.RGBA, this.width, this.height, 0, t3.RGBA, t3.UNSIGNED_BYTE, null), t3.bindTexture(t3.TEXTURE_2D, null), ra(e3, t3, n2), ea(e3, t3, false, () => { + Oa(this), t3.clearColor(0, 0, 0, 0), t3.clear(t3.COLOR_BUFFER_BIT), t3.drawArrays(t3.TRIANGLE_FAN, 0, 4), Ca(this); + }), ia(e3), Ca(this); + } else { + if (!(e2 instanceof ImageBitmap)) throw Error(`Type is not supported: ${e2}`); + Ia(this), Oa(this), n2 = Ua(this), Ca(this); + } + t2.push(n2); + } + return new Da(t2, this.ka(), this.P(), this.canvas, this.l, this.width, this.height); + } + close() { + this.j && Ra(this, 1).close(), this.m && Ma(this).deleteTexture(Ra(this, 2)), Na = -1; + } +}; +Da.prototype.close = Da.prototype.close, Da.prototype.clone = Da.prototype.clone, Da.prototype.getAsWebGLTexture = Da.prototype.M, Da.prototype.getAsImageBitmap = Da.prototype.Ba, Da.prototype.getAsImageData = Da.prototype.Ca, Da.prototype.hasWebGLTexture = Da.prototype.P, Da.prototype.hasImageBitmap = Da.prototype.ka, Da.prototype.hasImageData = Da.prototype.Ea; +var Na = 250; +function Ba(...t2) { + return t2.map(([t3, e2]) => ({ start: t3, end: e2 })); +} +var Ga = /* @__PURE__ */ function(t2) { + return class extends t2 { + La() { + this.i._registerModelResourcesGraphService(); + } + }; +}((ja = class { + constructor(t2, e2) { + this.l = true, this.i = t2, this.g = null, this.h = 0, this.m = "function" == typeof this.i._addIntToInputStream, void 0 !== e2 ? this.i.canvas = e2 : Oo() ? this.i.canvas = new OffscreenCanvas(1, 1) : (console.warn("OffscreenCanvas not supported and GraphRunner constructor glCanvas parameter is undefined. Creating backup canvas."), this.i.canvas = document.createElement("canvas")); + } + async initializeGraph(t2) { + const e2 = await (await fetch(t2)).arrayBuffer(); + t2 = !(t2.endsWith(".pbtxt") || t2.endsWith(".textproto")), this.setGraph(new Uint8Array(e2), t2); + } + setGraphFromString(t2) { + this.setGraph(new TextEncoder().encode(t2), false); + } + setGraph(t2, e2) { + const n2 = t2.length, r2 = this.i._malloc(n2); + this.i.HEAPU8.set(t2, r2), e2 ? this.i._changeBinaryGraph(n2, r2) : this.i._changeTextGraph(n2, r2), this.i._free(r2); + } + configureAudio(t2, e2, n2, r2, i2) { + this.i._configureAudio || console.warn('Attempting to use configureAudio without support for input audio. Is build dep ":gl_graph_runner_audio" missing?'), Do(this, r2 || "input_audio", (r3) => { + Do(this, i2 = i2 || "audio_header", (i3) => { + this.i._configureAudio(r3, i3, t2, e2 ?? 0, n2); + }); + }); + } + setAutoResizeCanvas(t2) { + this.l = t2; + } + setAutoRenderToScreen(t2) { + this.i._setAutoRenderToScreen(t2); + } + setGpuBufferVerticalFlip(t2) { + this.i.gpuOriginForWebTexturesIsBottomLeft = t2; + } + da(t2) { + Go(this, "__graph_config__", (e2) => { + t2(e2); + }), Do(this, "__graph_config__", (t3) => { + this.i._getGraphConfig(t3, void 0); + }), delete this.i.simpleListeners.__graph_config__; + } + attachErrorListener(t2) { + this.i.errorListener = t2; + } + attachEmptyPacketListener(t2, e2) { + this.i.emptyPacketListeners = this.i.emptyPacketListeners || {}, this.i.emptyPacketListeners[t2] = e2; + } + addAudioToStream(t2, e2, n2) { + this.addAudioToStreamWithShape(t2, 0, 0, e2, n2); + } + addAudioToStreamWithShape(t2, e2, n2, r2, i2) { + const s2 = 4 * t2.length; + this.h !== s2 && (this.g && this.i._free(this.g), this.g = this.i._malloc(s2), this.h = s2), this.i.HEAPF32.set(t2, this.g / 4), Do(this, r2, (t3) => { + this.i._addAudioToInputStream(this.g, e2, n2, t3, i2); + }); + } + addGpuBufferToStream(t2, e2, n2) { + Do(this, e2, (e3) => { + const [r2, i2] = No(this, t2, e3); + this.i._addBoundTextureToStream(e3, r2, i2, n2); + }); + } + addBoolToStream(t2, e2, n2) { + Do(this, e2, (e3) => { + this.i._addBoolToInputStream(t2, e3, n2); + }); + } + addDoubleToStream(t2, e2, n2) { + Do(this, e2, (e3) => { + this.i._addDoubleToInputStream(t2, e3, n2); + }); + } + addFloatToStream(t2, e2, n2) { + Do(this, e2, (e3) => { + this.i._addFloatToInputStream(t2, e3, n2); + }); + } + addIntToStream(t2, e2, n2) { + Do(this, e2, (e3) => { + this.i._addIntToInputStream(t2, e3, n2); + }); + } + addUintToStream(t2, e2, n2) { + Do(this, e2, (e3) => { + this.i._addUintToInputStream(t2, e3, n2); + }); + } + addStringToStream(t2, e2, n2) { + Do(this, e2, (e3) => { + Do(this, t2, (t3) => { + this.i._addStringToInputStream(t3, e3, n2); + }); + }); + } + addStringRecordToStream(t2, e2, n2) { + Do(this, e2, (e3) => { + Bo(this, Object.keys(t2), (r2) => { + Bo(this, Object.values(t2), (i2) => { + this.i._addFlatHashMapToInputStream(r2, i2, Object.keys(t2).length, e3, n2); + }); + }); + }); + } + addProtoToStream(t2, e2, n2, r2) { + Do(this, n2, (n3) => { + Do(this, e2, (e3) => { + const i2 = this.i._malloc(t2.length); + this.i.HEAPU8.set(t2, i2), this.i._addProtoToInputStream(i2, t2.length, e3, n3, r2), this.i._free(i2); + }); + }); + } + addEmptyPacketToStream(t2, e2) { + Do(this, t2, (t3) => { + this.i._addEmptyPacketToInputStream(t3, e2); + }); + } + addBoolVectorToStream(t2, e2, n2) { + Do(this, e2, (e3) => { + const r2 = this.i._allocateBoolVector(t2.length); + if (!r2) throw Error("Unable to allocate new bool vector on heap."); + for (const e4 of t2) this.i._addBoolVectorEntry(r2, e4); + this.i._addBoolVectorToInputStream(r2, e3, n2); + }); + } + addDoubleVectorToStream(t2, e2, n2) { + Do(this, e2, (e3) => { + const r2 = this.i._allocateDoubleVector(t2.length); + if (!r2) throw Error("Unable to allocate new double vector on heap."); + for (const e4 of t2) this.i._addDoubleVectorEntry(r2, e4); + this.i._addDoubleVectorToInputStream(r2, e3, n2); + }); + } + addFloatVectorToStream(t2, e2, n2) { + Do(this, e2, (e3) => { + const r2 = this.i._allocateFloatVector(t2.length); + if (!r2) throw Error("Unable to allocate new float vector on heap."); + for (const e4 of t2) this.i._addFloatVectorEntry(r2, e4); + this.i._addFloatVectorToInputStream(r2, e3, n2); + }); + } + addIntVectorToStream(t2, e2, n2) { + Do(this, e2, (e3) => { + const r2 = this.i._allocateIntVector(t2.length); + if (!r2) throw Error("Unable to allocate new int vector on heap."); + for (const e4 of t2) this.i._addIntVectorEntry(r2, e4); + this.i._addIntVectorToInputStream(r2, e3, n2); + }); + } + addUintVectorToStream(t2, e2, n2) { + Do(this, e2, (e3) => { + const r2 = this.i._allocateUintVector(t2.length); + if (!r2) throw Error("Unable to allocate new unsigned int vector on heap."); + for (const e4 of t2) this.i._addUintVectorEntry(r2, e4); + this.i._addUintVectorToInputStream(r2, e3, n2); + }); + } + addStringVectorToStream(t2, e2, n2) { + Do(this, e2, (e3) => { + const r2 = this.i._allocateStringVector(t2.length); + if (!r2) throw Error("Unable to allocate new string vector on heap."); + for (const e4 of t2) Do(this, e4, (t3) => { + this.i._addStringVectorEntry(r2, t3); + }); + this.i._addStringVectorToInputStream(r2, e3, n2); + }); + } + addBoolToInputSidePacket(t2, e2) { + Do(this, e2, (e3) => { + this.i._addBoolToInputSidePacket(t2, e3); + }); + } + addDoubleToInputSidePacket(t2, e2) { + Do(this, e2, (e3) => { + this.i._addDoubleToInputSidePacket(t2, e3); + }); + } + addFloatToInputSidePacket(t2, e2) { + Do(this, e2, (e3) => { + this.i._addFloatToInputSidePacket(t2, e3); + }); + } + addIntToInputSidePacket(t2, e2) { + Do(this, e2, (e3) => { + this.i._addIntToInputSidePacket(t2, e3); + }); + } + addUintToInputSidePacket(t2, e2) { + Do(this, e2, (e3) => { + this.i._addUintToInputSidePacket(t2, e3); + }); + } + addStringToInputSidePacket(t2, e2) { + Do(this, e2, (e3) => { + Do(this, t2, (t3) => { + this.i._addStringToInputSidePacket(t3, e3); + }); + }); + } + addProtoToInputSidePacket(t2, e2, n2) { + Do(this, n2, (n3) => { + Do(this, e2, (e3) => { + const r2 = this.i._malloc(t2.length); + this.i.HEAPU8.set(t2, r2), this.i._addProtoToInputSidePacket(r2, t2.length, e3, n3), this.i._free(r2); + }); + }); + } + addBoolVectorToInputSidePacket(t2, e2) { + Do(this, e2, (e3) => { + const n2 = this.i._allocateBoolVector(t2.length); + if (!n2) throw Error("Unable to allocate new bool vector on heap."); + for (const e4 of t2) this.i._addBoolVectorEntry(n2, e4); + this.i._addBoolVectorToInputSidePacket(n2, e3); + }); + } + addDoubleVectorToInputSidePacket(t2, e2) { + Do(this, e2, (e3) => { + const n2 = this.i._allocateDoubleVector(t2.length); + if (!n2) throw Error("Unable to allocate new double vector on heap."); + for (const e4 of t2) this.i._addDoubleVectorEntry(n2, e4); + this.i._addDoubleVectorToInputSidePacket(n2, e3); + }); + } + addFloatVectorToInputSidePacket(t2, e2) { + Do(this, e2, (e3) => { + const n2 = this.i._allocateFloatVector(t2.length); + if (!n2) throw Error("Unable to allocate new float vector on heap."); + for (const e4 of t2) this.i._addFloatVectorEntry(n2, e4); + this.i._addFloatVectorToInputSidePacket(n2, e3); + }); + } + addIntVectorToInputSidePacket(t2, e2) { + Do(this, e2, (e3) => { + const n2 = this.i._allocateIntVector(t2.length); + if (!n2) throw Error("Unable to allocate new int vector on heap."); + for (const e4 of t2) this.i._addIntVectorEntry(n2, e4); + this.i._addIntVectorToInputSidePacket(n2, e3); + }); + } + addUintVectorToInputSidePacket(t2, e2) { + Do(this, e2, (e3) => { + const n2 = this.i._allocateUintVector(t2.length); + if (!n2) throw Error("Unable to allocate new unsigned int vector on heap."); + for (const e4 of t2) this.i._addUintVectorEntry(n2, e4); + this.i._addUintVectorToInputSidePacket(n2, e3); + }); + } + addStringVectorToInputSidePacket(t2, e2) { + Do(this, e2, (e3) => { + const n2 = this.i._allocateStringVector(t2.length); + if (!n2) throw Error("Unable to allocate new string vector on heap."); + for (const e4 of t2) Do(this, e4, (t3) => { + this.i._addStringVectorEntry(n2, t3); + }); + this.i._addStringVectorToInputSidePacket(n2, e3); + }); + } + attachBoolListener(t2, e2) { + Go(this, t2, e2), Do(this, t2, (t3) => { + this.i._attachBoolListener(t3); + }); + } + attachBoolVectorListener(t2, e2) { + jo(this, t2, e2), Do(this, t2, (t3) => { + this.i._attachBoolVectorListener(t3); + }); + } + attachIntListener(t2, e2) { + Go(this, t2, e2), Do(this, t2, (t3) => { + this.i._attachIntListener(t3); + }); + } + attachIntVectorListener(t2, e2) { + jo(this, t2, e2), Do(this, t2, (t3) => { + this.i._attachIntVectorListener(t3); + }); + } + attachUintListener(t2, e2) { + Go(this, t2, e2), Do(this, t2, (t3) => { + this.i._attachUintListener(t3); + }); + } + attachUintVectorListener(t2, e2) { + jo(this, t2, e2), Do(this, t2, (t3) => { + this.i._attachUintVectorListener(t3); + }); + } + attachDoubleListener(t2, e2) { + Go(this, t2, e2), Do(this, t2, (t3) => { + this.i._attachDoubleListener(t3); + }); + } + attachDoubleVectorListener(t2, e2) { + jo(this, t2, e2), Do(this, t2, (t3) => { + this.i._attachDoubleVectorListener(t3); + }); + } + attachFloatListener(t2, e2) { + Go(this, t2, e2), Do(this, t2, (t3) => { + this.i._attachFloatListener(t3); + }); + } + attachFloatVectorListener(t2, e2) { + jo(this, t2, e2), Do(this, t2, (t3) => { + this.i._attachFloatVectorListener(t3); + }); + } + attachStringListener(t2, e2) { + Go(this, t2, e2), Do(this, t2, (t3) => { + this.i._attachStringListener(t3); + }); + } + attachStringVectorListener(t2, e2) { + jo(this, t2, e2), Do(this, t2, (t3) => { + this.i._attachStringVectorListener(t3); + }); + } + attachProtoListener(t2, e2, n2) { + Go(this, t2, e2), Do(this, t2, (t3) => { + this.i._attachProtoListener(t3, n2 || false); + }); + } + attachProtoVectorListener(t2, e2, n2) { + jo(this, t2, e2), Do(this, t2, (t3) => { + this.i._attachProtoVectorListener(t3, n2 || false); + }); + } + attachAudioListener(t2, e2, n2) { + this.i._attachAudioListener || console.warn('Attempting to use attachAudioListener without support for output audio. Is build dep ":gl_graph_runner_audio_out" missing?'), Go(this, t2, (t3, n3) => { + t3 = new Float32Array(t3.buffer, t3.byteOffset, t3.length / 4), e2(t3, n3); + }), Do(this, t2, (t3) => { + this.i._attachAudioListener(t3, n2 || false); + }); + } + finishProcessing() { + this.i._waitUntilIdle(); + } + closeGraph() { + this.i._closeGraph(), this.i.simpleListeners = void 0, this.i.emptyPacketListeners = void 0; + } +}, class extends ja { + get ea() { + return this.i; + } + qa(t2, e2, n2) { + Do(this, e2, (e3) => { + const [r2, i2] = No(this, t2, e3); + this.ea._addBoundTextureAsImageToStream(e3, r2, i2, n2); + }); + } + U(t2, e2) { + Go(this, t2, e2), Do(this, t2, (t3) => { + this.ea._attachImageListener(t3); + }); + } + ca(t2, e2) { + jo(this, t2, e2), Do(this, t2, (t3) => { + this.ea._attachImageVectorListener(t3); + }); + } +})); +var ja; +var Va = class extends Ga { +}; +async function Xa(t2, e2, n2) { + return async function(t3, e3, n3, r2) { + return Vo(t3, e3, n3, r2); + }(t2, n2.canvas ?? (Oo() ? void 0 : document.createElement("canvas")), e2, n2); +} +function Ha(t2, e2, n2, r2) { + if (t2.T) { + const s2 = new fs(); + if (n2?.regionOfInterest) { + if (!t2.pa) throw Error("This task doesn't support region-of-interest."); + var i2 = n2.regionOfInterest; + if (i2.left >= i2.right || i2.top >= i2.bottom) throw Error("Expected RectF with left < right and top < bottom."); + if (i2.left < 0 || i2.top < 0 || i2.right > 1 || i2.bottom > 1) throw Error("Expected RectF values to be in [0,1]."); + gn(s2, 1, (i2.left + i2.right) / 2), gn(s2, 2, (i2.top + i2.bottom) / 2), gn(s2, 4, i2.right - i2.left), gn(s2, 3, i2.bottom - i2.top); + } else gn(s2, 1, 0.5), gn(s2, 2, 0.5), gn(s2, 4, 1), gn(s2, 3, 1); + if (n2?.rotationDegrees) { + if (n2?.rotationDegrees % 90 != 0) throw Error("Expected rotation to be a multiple of 90\xB0."); + if (gn(s2, 5, -Math.PI * n2.rotationDegrees / 180), n2?.rotationDegrees % 180 != 0) { + const [t3, r3] = Uo(e2); + n2 = dn(s2, 3) * r3 / t3, i2 = dn(s2, 4) * t3 / r3, gn(s2, 4, n2), gn(s2, 3, i2); + } + } + t2.g.addProtoToStream(s2.g(), "mediapipe.NormalizedRect", t2.T, r2); + } + t2.g.qa(e2, t2.aa, r2 ?? performance.now()), t2.finishProcessing(); +} +function Wa(t2, e2, n2) { + if (t2.baseOptions?.g()) throw Error("Task is not initialized with image mode. 'runningMode' must be set to 'IMAGE'."); + Ha(t2, e2, n2, t2.B + 1); +} +function za(t2, e2, n2, r2) { + if (!t2.baseOptions?.g()) throw Error("Task is not initialized with video mode. 'runningMode' must be set to 'VIDEO'."); + Ha(t2, e2, n2, r2); +} +function Ka(t2, e2, n2, r2) { + var i2 = e2.data; + const s2 = e2.width, o2 = s2 * (e2 = e2.height); + if ((i2 instanceof Uint8Array || i2 instanceof Float32Array) && i2.length !== o2) throw Error("Unsupported channel count: " + i2.length / o2); + return t2 = new ya([i2], n2, false, t2.g.i.canvas, t2.O, s2, e2), r2 ? t2.clone() : t2; +} +var Ya = class extends $o { + constructor(t2, e2, n2, r2) { + super(t2), this.g = t2, this.aa = e2, this.T = n2, this.pa = r2, this.O = new sa(); + } + l(t2, e2 = true) { + if ("runningMode" in t2 && fn(this.baseOptions, 2, !!t2.runningMode && "IMAGE" !== t2.runningMode), void 0 !== t2.canvas && this.g.i.canvas !== t2.canvas) throw Error("You must create a new task to reset the canvas."); + return super.l(t2, e2); + } + close() { + this.O.close(), super.close(); + } +}; +Ya.prototype.close = Ya.prototype.close; +var $a = class extends Ya { + constructor(t2, e2) { + super(new Va(t2, e2), "image_in", "norm_rect_in", false), this.j = { detections: [] }, sn(t2 = this.h = new Is(), 0, 1, e2 = new Ls()), gn(this.h, 2, 0.5), gn(this.h, 3, 0.3); + } + get baseOptions() { + return en(this.h, Ls, 1); + } + set baseOptions(t2) { + sn(this.h, 0, 1, t2); + } + o(t2) { + return "minDetectionConfidence" in t2 && gn(this.h, 2, t2.minDetectionConfidence ?? 0.5), "minSuppressionThreshold" in t2 && gn(this.h, 3, t2.minSuppressionThreshold ?? 0.3), this.l(t2); + } + D(t2, e2) { + return this.j = { detections: [] }, Wa(this, t2, e2), this.j; + } + F(t2, e2, n2) { + return this.j = { detections: [] }, za(this, t2, n2, e2), this.j; + } + m() { + var t2 = new qi(); + Yi(t2, "image_in"), Yi(t2, "norm_rect_in"), $i(t2, "detections"); + const e2 = new Di(); + Xn(e2, Ps, this.h); + const n2 = new Xi(); + Gi(n2, "mediapipe.tasks.vision.face_detector.FaceDetectorGraph"), ji(n2, "IMAGE:image_in"), ji(n2, "NORM_RECT:norm_rect_in"), Vi(n2, "DETECTIONS:detections"), n2.o(e2), Ki(t2, n2), this.g.attachProtoVectorListener("detections", (t3, e3) => { + for (const e4 of t3) t3 = os(e4), this.j.detections.push(bo(t3)); + Wo(this, e3); + }), this.g.attachEmptyPacketListener("detections", (t3) => { + Wo(this, t3); + }), t2 = t2.g(), this.setGraph(new Uint8Array(t2), true); + } +}; +$a.prototype.detectForVideo = $a.prototype.F, $a.prototype.detect = $a.prototype.D, $a.prototype.setOptions = $a.prototype.o, $a.createFromModelPath = async function(t2, e2) { + return Xa($a, t2, { baseOptions: { modelAssetPath: e2 } }); +}, $a.createFromModelBuffer = function(t2, e2) { + return Xa($a, t2, { baseOptions: { modelAssetBuffer: e2 } }); +}, $a.createFromOptions = function(t2, e2) { + return Xa($a, t2, e2); +}; +var qa = Ba([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]); +var Ja = Ba([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]); +var Za = Ba([276, 283], [283, 282], [282, 295], [295, 285], [300, 293], [293, 334], [334, 296], [296, 336]); +var Qa = Ba([474, 475], [475, 476], [476, 477], [477, 474]); +var tc = Ba([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]); +var ec = Ba([46, 53], [53, 52], [52, 65], [65, 55], [70, 63], [63, 105], [105, 66], [66, 107]); +var nc = Ba([469, 470], [470, 471], [471, 472], [472, 469]); +var rc = Ba([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]); +var ic = [...qa, ...Ja, ...Za, ...tc, ...ec, ...rc]; +var sc = Ba([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]); +function oc(t2) { + t2.j = { faceLandmarks: [], faceBlendshapes: [], facialTransformationMatrixes: [] }; +} +var ac = class extends Ya { + constructor(t2, e2) { + super(new Va(t2, e2), "image_in", "norm_rect", false), this.j = { faceLandmarks: [], faceBlendshapes: [], facialTransformationMatrixes: [] }, this.outputFacialTransformationMatrixes = this.outputFaceBlendshapes = false, sn(t2 = this.h = new Us(), 0, 1, e2 = new Ls()), this.v = new Cs(), sn(this.h, 0, 3, this.v), this.s = new Is(), sn(this.h, 0, 2, this.s), pn(this.s, 4, 1), gn(this.s, 2, 0.5), gn(this.v, 2, 0.5), gn(this.h, 4, 0.5); + } + get baseOptions() { + return en(this.h, Ls, 1); + } + set baseOptions(t2) { + sn(this.h, 0, 1, t2); + } + o(t2) { + return "numFaces" in t2 && pn(this.s, 4, t2.numFaces ?? 1), "minFaceDetectionConfidence" in t2 && gn(this.s, 2, t2.minFaceDetectionConfidence ?? 0.5), "minTrackingConfidence" in t2 && gn(this.h, 4, t2.minTrackingConfidence ?? 0.5), "minFacePresenceConfidence" in t2 && gn(this.v, 2, t2.minFacePresenceConfidence ?? 0.5), "outputFaceBlendshapes" in t2 && (this.outputFaceBlendshapes = !!t2.outputFaceBlendshapes), "outputFacialTransformationMatrixes" in t2 && (this.outputFacialTransformationMatrixes = !!t2.outputFacialTransformationMatrixes), this.l(t2); + } + D(t2, e2) { + return oc(this), Wa(this, t2, e2), this.j; + } + F(t2, e2, n2) { + return oc(this), za(this, t2, n2, e2), this.j; + } + m() { + var t2 = new qi(); + Yi(t2, "image_in"), Yi(t2, "norm_rect"), $i(t2, "face_landmarks"); + const e2 = new Di(); + Xn(e2, Bs, this.h); + const n2 = new Xi(); + Gi(n2, "mediapipe.tasks.vision.face_landmarker.FaceLandmarkerGraph"), ji(n2, "IMAGE:image_in"), ji(n2, "NORM_RECT:norm_rect"), Vi(n2, "NORM_LANDMARKS:face_landmarks"), n2.o(e2), Ki(t2, n2), this.g.attachProtoVectorListener("face_landmarks", (t3, e3) => { + for (const e4 of t3) t3 = us(e4), this.j.faceLandmarks.push(ko(t3)); + Wo(this, e3); + }), this.g.attachEmptyPacketListener("face_landmarks", (t3) => { + Wo(this, t3); + }), this.outputFaceBlendshapes && ($i(t2, "blendshapes"), Vi(n2, "BLENDSHAPES:blendshapes"), this.g.attachProtoVectorListener("blendshapes", (t3, e3) => { + if (this.outputFaceBlendshapes) for (const e4 of t3) t3 = ns(e4), this.j.faceBlendshapes.push(Ao(t3.g() ?? [])); + Wo(this, e3); + }), this.g.attachEmptyPacketListener("blendshapes", (t3) => { + Wo(this, t3); + })), this.outputFacialTransformationMatrixes && ($i(t2, "face_geometry"), Vi(n2, "FACE_GEOMETRY:face_geometry"), this.g.attachProtoVectorListener("face_geometry", (t3, e3) => { + if (this.outputFacialTransformationMatrixes) for (const e4 of t3) (t3 = en(Os(e4), ls, 2)) && this.j.facialTransformationMatrixes.push({ rows: un(t3, 1) ?? 0 ?? 0, columns: un(t3, 2) ?? 0 ?? 0, data: Ve(t3, 3, $t, je()).slice() ?? [] }); + Wo(this, e3); + }), this.g.attachEmptyPacketListener("face_geometry", (t3) => { + Wo(this, t3); + })), t2 = t2.g(), this.setGraph(new Uint8Array(t2), true); + } +}; +ac.prototype.detectForVideo = ac.prototype.F, ac.prototype.detect = ac.prototype.D, ac.prototype.setOptions = ac.prototype.o, ac.createFromModelPath = function(t2, e2) { + return Xa(ac, t2, { baseOptions: { modelAssetPath: e2 } }); +}, ac.createFromModelBuffer = function(t2, e2) { + return Xa(ac, t2, { baseOptions: { modelAssetBuffer: e2 } }); +}, ac.createFromOptions = function(t2, e2) { + return Xa(ac, t2, e2); +}, ac.FACE_LANDMARKS_LIPS = qa, ac.FACE_LANDMARKS_LEFT_EYE = Ja, ac.FACE_LANDMARKS_LEFT_EYEBROW = Za, ac.FACE_LANDMARKS_LEFT_IRIS = Qa, ac.FACE_LANDMARKS_RIGHT_EYE = tc, ac.FACE_LANDMARKS_RIGHT_EYEBROW = ec, ac.FACE_LANDMARKS_RIGHT_IRIS = nc, ac.FACE_LANDMARKS_FACE_OVAL = rc, ac.FACE_LANDMARKS_CONTOURS = ic, ac.FACE_LANDMARKS_TESSELATION = sc; +var cc = class extends Ya { + constructor(t2, e2) { + super(new Va(t2, e2), "image_in", "norm_rect", true), sn(t2 = this.j = new Gs(), 0, 1, e2 = new Ls()); + } + get baseOptions() { + return en(this.j, Ls, 1); + } + set baseOptions(t2) { + sn(this.j, 0, 1, t2); + } + o(t2) { + return super.l(t2); + } + Oa(t2, e2, n2) { + const r2 = "function" != typeof e2 ? e2 : {}; + if (this.h = "function" == typeof e2 ? e2 : n2, Wa(this, t2, r2 ?? {}), !this.h) return this.s; + } + m() { + var t2 = new qi(); + Yi(t2, "image_in"), Yi(t2, "norm_rect"), $i(t2, "stylized_image"); + const e2 = new Di(); + Xn(e2, js, this.j); + const n2 = new Xi(); + Gi(n2, "mediapipe.tasks.vision.face_stylizer.FaceStylizerGraph"), ji(n2, "IMAGE:image_in"), ji(n2, "NORM_RECT:norm_rect"), Vi(n2, "STYLIZED_IMAGE:stylized_image"), n2.o(e2), Ki(t2, n2), this.g.U("stylized_image", (t3, e3) => { + var n3 = !this.h, r2 = t3.data, i2 = t3.width; + const s2 = i2 * (t3 = t3.height); + if (r2 instanceof Uint8Array) if (r2.length === 3 * s2) { + const e4 = new Uint8ClampedArray(4 * s2); + for (let t4 = 0; t4 < s2; ++t4) e4[4 * t4] = r2[3 * t4], e4[4 * t4 + 1] = r2[3 * t4 + 1], e4[4 * t4 + 2] = r2[3 * t4 + 2], e4[4 * t4 + 3] = 255; + r2 = new ImageData(e4, i2, t3); + } else { + if (r2.length !== 4 * s2) throw Error("Unsupported channel count: " + r2.length / s2); + r2 = new ImageData(new Uint8ClampedArray(r2.buffer, r2.byteOffset, r2.length), i2, t3); + } + else if (!(r2 instanceof WebGLTexture)) throw Error(`Unsupported format: ${r2.constructor.name}`); + i2 = new Da([r2], false, false, this.g.i.canvas, this.O, i2, t3), this.s = n3 = n3 ? i2.clone() : i2, this.h && this.h(n3), Wo(this, e3); + }), this.g.attachEmptyPacketListener("stylized_image", (t3) => { + this.s = null, this.h && this.h(null), Wo(this, t3); + }), t2 = t2.g(), this.setGraph(new Uint8Array(t2), true); + } +}; +cc.prototype.stylize = cc.prototype.Oa, cc.prototype.setOptions = cc.prototype.o, cc.createFromModelPath = function(t2, e2) { + return Xa(cc, t2, { baseOptions: { modelAssetPath: e2 } }); +}, cc.createFromModelBuffer = function(t2, e2) { + return Xa(cc, t2, { baseOptions: { modelAssetBuffer: e2 } }); +}, cc.createFromOptions = function(t2, e2) { + return Xa(cc, t2, e2); +}; +var hc = Ba([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]); +function uc(t2) { + t2.gestures = [], t2.landmarks = [], t2.worldLandmarks = [], t2.handedness = []; +} +function lc(t2) { + return 0 === t2.gestures.length ? { gestures: [], landmarks: [], worldLandmarks: [], handedness: [], handednesses: [] } : { gestures: t2.gestures, landmarks: t2.landmarks, worldLandmarks: t2.worldLandmarks, handedness: t2.handedness, handednesses: t2.handedness }; +} +function dc(t2, e2 = true) { + const n2 = []; + for (const i2 of t2) { + var r2 = ns(i2); + t2 = []; + for (const n3 of r2.g()) r2 = e2 && null != un(n3, 1) ? un(n3, 1) ?? 0 : -1, t2.push({ score: dn(n3, 2) ?? 0, index: r2, categoryName: ln(n3, 3) ?? "" ?? "", displayName: ln(n3, 4) ?? "" ?? "" }); + n2.push(t2); + } + return n2; +} +var fc = class extends Ya { + constructor(t2, e2) { + super(new Va(t2, e2), "image_in", "norm_rect", false), this.gestures = [], this.landmarks = [], this.worldLandmarks = [], this.handedness = [], sn(t2 = this.j = new Ys(), 0, 1, e2 = new Ls()), this.s = new Ks(), sn(this.j, 0, 2, this.s), this.C = new zs(), sn(this.s, 0, 3, this.C), this.v = new Ws(), sn(this.s, 0, 2, this.v), this.h = new Hs(), sn(this.j, 0, 3, this.h), gn(this.v, 2, 0.5), gn(this.s, 4, 0.5), gn(this.C, 2, 0.5); + } + get baseOptions() { + return en(this.j, Ls, 1); + } + set baseOptions(t2) { + sn(this.j, 0, 1, t2); + } + o(t2) { + if (pn(this.v, 3, t2.numHands ?? 1), "minHandDetectionConfidence" in t2 && gn(this.v, 2, t2.minHandDetectionConfidence ?? 0.5), "minTrackingConfidence" in t2 && gn(this.s, 4, t2.minTrackingConfidence ?? 0.5), "minHandPresenceConfidence" in t2 && gn(this.C, 2, t2.minHandPresenceConfidence ?? 0.5), t2.cannedGesturesClassifierOptions) { + var e2 = new Vs(), n2 = e2, r2 = To(t2.cannedGesturesClassifierOptions, en(this.h, Vs, 3)?.h()); + sn(n2, 0, 2, r2), sn(this.h, 0, 3, e2); + } else void 0 === t2.cannedGesturesClassifierOptions && en(this.h, Vs, 3)?.g(); + return t2.customGesturesClassifierOptions ? (sn(n2 = e2 = new Vs(), 0, 2, r2 = To(t2.customGesturesClassifierOptions, en(this.h, Vs, 4)?.h())), sn(this.h, 0, 4, e2)) : void 0 === t2.customGesturesClassifierOptions && en(this.h, Vs, 4)?.g(), this.l(t2); + } + Ja(t2, e2) { + return uc(this), Wa(this, t2, e2), lc(this); + } + Ka(t2, e2, n2) { + return uc(this), za(this, t2, n2, e2), lc(this); + } + m() { + var t2 = new qi(); + Yi(t2, "image_in"), Yi(t2, "norm_rect"), $i(t2, "hand_gestures"), $i(t2, "hand_landmarks"), $i(t2, "world_hand_landmarks"), $i(t2, "handedness"); + const e2 = new Di(); + Xn(e2, Qs, this.j); + const n2 = new Xi(); + Gi(n2, "mediapipe.tasks.vision.gesture_recognizer.GestureRecognizerGraph"), ji(n2, "IMAGE:image_in"), ji(n2, "NORM_RECT:norm_rect"), Vi(n2, "HAND_GESTURES:hand_gestures"), Vi(n2, "LANDMARKS:hand_landmarks"), Vi(n2, "WORLD_LANDMARKS:world_hand_landmarks"), Vi(n2, "HANDEDNESS:handedness"), n2.o(e2), Ki(t2, n2), this.g.attachProtoVectorListener("hand_landmarks", (t3, e3) => { + for (const e4 of t3) { + t3 = us(e4); + const n3 = []; + for (const e5 of rn(t3, hs, 1)) n3.push({ x: dn(e5, 1) ?? 0, y: dn(e5, 2) ?? 0, z: dn(e5, 3) ?? 0, visibility: dn(e5, 4) ?? 0 }); + this.landmarks.push(n3); + } + Wo(this, e3); + }), this.g.attachEmptyPacketListener("hand_landmarks", (t3) => { + Wo(this, t3); + }), this.g.attachProtoVectorListener("world_hand_landmarks", (t3, e3) => { + for (const e4 of t3) { + t3 = cs(e4); + const n3 = []; + for (const e5 of rn(t3, as, 1)) n3.push({ x: dn(e5, 1) ?? 0, y: dn(e5, 2) ?? 0, z: dn(e5, 3) ?? 0, visibility: dn(e5, 4) ?? 0 }); + this.worldLandmarks.push(n3); + } + Wo(this, e3); + }), this.g.attachEmptyPacketListener("world_hand_landmarks", (t3) => { + Wo(this, t3); + }), this.g.attachProtoVectorListener("hand_gestures", (t3, e3) => { + this.gestures.push(...dc(t3, false)), Wo(this, e3); + }), this.g.attachEmptyPacketListener("hand_gestures", (t3) => { + Wo(this, t3); + }), this.g.attachProtoVectorListener("handedness", (t3, e3) => { + this.handedness.push(...dc(t3)), Wo(this, e3); + }), this.g.attachEmptyPacketListener("handedness", (t3) => { + Wo(this, t3); + }), t2 = t2.g(), this.setGraph(new Uint8Array(t2), true); + } +}; +function pc(t2) { + return { landmarks: t2.landmarks, worldLandmarks: t2.worldLandmarks, handednesses: t2.handedness, handedness: t2.handedness }; +} +fc.prototype.recognizeForVideo = fc.prototype.Ka, fc.prototype.recognize = fc.prototype.Ja, fc.prototype.setOptions = fc.prototype.o, fc.createFromModelPath = function(t2, e2) { + return Xa(fc, t2, { baseOptions: { modelAssetPath: e2 } }); +}, fc.createFromModelBuffer = function(t2, e2) { + return Xa(fc, t2, { baseOptions: { modelAssetBuffer: e2 } }); +}, fc.createFromOptions = function(t2, e2) { + return Xa(fc, t2, e2); +}, fc.HAND_CONNECTIONS = hc; +var gc = class extends Ya { + constructor(t2, e2) { + super(new Va(t2, e2), "image_in", "norm_rect", false), this.landmarks = [], this.worldLandmarks = [], this.handedness = [], sn(t2 = this.h = new Ks(), 0, 1, e2 = new Ls()), this.s = new zs(), sn(this.h, 0, 3, this.s), this.j = new Ws(), sn(this.h, 0, 2, this.j), pn(this.j, 3, 1), gn(this.j, 2, 0.5), gn(this.s, 2, 0.5), gn(this.h, 4, 0.5); + } + get baseOptions() { + return en(this.h, Ls, 1); + } + set baseOptions(t2) { + sn(this.h, 0, 1, t2); + } + o(t2) { + return "numHands" in t2 && pn(this.j, 3, t2.numHands ?? 1), "minHandDetectionConfidence" in t2 && gn(this.j, 2, t2.minHandDetectionConfidence ?? 0.5), "minTrackingConfidence" in t2 && gn(this.h, 4, t2.minTrackingConfidence ?? 0.5), "minHandPresenceConfidence" in t2 && gn(this.s, 2, t2.minHandPresenceConfidence ?? 0.5), this.l(t2); + } + D(t2, e2) { + return this.landmarks = [], this.worldLandmarks = [], this.handedness = [], Wa(this, t2, e2), pc(this); + } + F(t2, e2, n2) { + return this.landmarks = [], this.worldLandmarks = [], this.handedness = [], za(this, t2, n2, e2), pc(this); + } + m() { + var t2 = new qi(); + Yi(t2, "image_in"), Yi(t2, "norm_rect"), $i(t2, "hand_landmarks"), $i(t2, "world_hand_landmarks"), $i(t2, "handedness"); + const e2 = new Di(); + Xn(e2, to, this.h); + const n2 = new Xi(); + Gi(n2, "mediapipe.tasks.vision.hand_landmarker.HandLandmarkerGraph"), ji(n2, "IMAGE:image_in"), ji(n2, "NORM_RECT:norm_rect"), Vi(n2, "LANDMARKS:hand_landmarks"), Vi(n2, "WORLD_LANDMARKS:world_hand_landmarks"), Vi(n2, "HANDEDNESS:handedness"), n2.o(e2), Ki(t2, n2), this.g.attachProtoVectorListener("hand_landmarks", (t3, e3) => { + for (const e4 of t3) t3 = us(e4), this.landmarks.push(ko(t3)); + Wo(this, e3); + }), this.g.attachEmptyPacketListener("hand_landmarks", (t3) => { + Wo(this, t3); + }), this.g.attachProtoVectorListener("world_hand_landmarks", (t3, e3) => { + for (const e4 of t3) t3 = cs(e4), this.worldLandmarks.push(So(t3)); + Wo(this, e3); + }), this.g.attachEmptyPacketListener("world_hand_landmarks", (t3) => { + Wo(this, t3); + }), this.g.attachProtoVectorListener("handedness", (t3, e3) => { + var n3 = this.handedness, r2 = n3.push; + const i2 = []; + for (const e4 of t3) { + t3 = ns(e4); + const n4 = []; + for (const e5 of t3.g()) n4.push({ score: dn(e5, 2) ?? 0, index: un(e5, 1) ?? 0 ?? -1, categoryName: ln(e5, 3) ?? "" ?? "", displayName: ln(e5, 4) ?? "" ?? "" }); + i2.push(n4); + } + r2.call(n3, ...i2), Wo(this, e3); + }), this.g.attachEmptyPacketListener("handedness", (t3) => { + Wo(this, t3); + }), t2 = t2.g(), this.setGraph(new Uint8Array(t2), true); + } +}; +gc.prototype.detectForVideo = gc.prototype.F, gc.prototype.detect = gc.prototype.D, gc.prototype.setOptions = gc.prototype.o, gc.createFromModelPath = function(t2, e2) { + return Xa(gc, t2, { baseOptions: { modelAssetPath: e2 } }); +}, gc.createFromModelBuffer = function(t2, e2) { + return Xa(gc, t2, { baseOptions: { modelAssetBuffer: e2 } }); +}, gc.createFromOptions = function(t2, e2) { + return Xa(gc, t2, e2); +}, gc.HAND_CONNECTIONS = hc; +var mc = Ba([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]); +function yc(t2) { + t2.h = { faceLandmarks: [], faceBlendshapes: [], poseLandmarks: [], poseWorldLandmarks: [], poseSegmentationMasks: [], leftHandLandmarks: [], leftHandWorldLandmarks: [], rightHandLandmarks: [], rightHandWorldLandmarks: [] }; +} +function _c(t2) { + try { + if (!t2.C) return t2.h; + t2.C(t2.h); + } finally { + Yo(t2); + } +} +function vc(t2, e2) { + t2 = us(t2), e2.push(ko(t2)); +} +var Ec = class extends Ya { + constructor(t2, e2) { + super(new Va(t2, e2), "input_frames_image", null, false), this.h = { faceLandmarks: [], faceBlendshapes: [], poseLandmarks: [], poseWorldLandmarks: [], poseSegmentationMasks: [], leftHandLandmarks: [], leftHandWorldLandmarks: [], rightHandLandmarks: [], rightHandWorldLandmarks: [] }, this.outputPoseSegmentationMasks = this.outputFaceBlendshapes = false, sn(t2 = this.j = new io(), 0, 1, e2 = new Ls()), this.J = new zs(), sn(this.j, 0, 2, this.J), this.Z = new eo(), sn(this.j, 0, 3, this.Z), this.s = new Is(), sn(this.j, 0, 4, this.s), this.H = new Cs(), sn(this.j, 0, 5, this.H), this.v = new no(), sn(this.j, 0, 6, this.v), this.K = new ro(), sn(this.j, 0, 7, this.K), gn(this.s, 2, 0.5), gn(this.s, 3, 0.3), gn(this.H, 2, 0.5), gn(this.v, 2, 0.5), gn(this.v, 3, 0.3), gn(this.K, 2, 0.5), gn(this.J, 2, 0.5); + } + get baseOptions() { + return en(this.j, Ls, 1); + } + set baseOptions(t2) { + sn(this.j, 0, 1, t2); + } + o(t2) { + return "minFaceDetectionConfidence" in t2 && gn(this.s, 2, t2.minFaceDetectionConfidence ?? 0.5), "minFaceSuppressionThreshold" in t2 && gn(this.s, 3, t2.minFaceSuppressionThreshold ?? 0.3), "minFacePresenceConfidence" in t2 && gn(this.H, 2, t2.minFacePresenceConfidence ?? 0.5), "outputFaceBlendshapes" in t2 && (this.outputFaceBlendshapes = !!t2.outputFaceBlendshapes), "minPoseDetectionConfidence" in t2 && gn(this.v, 2, t2.minPoseDetectionConfidence ?? 0.5), "minPoseSuppressionThreshold" in t2 && gn(this.v, 3, t2.minPoseSuppressionThreshold ?? 0.3), "minPosePresenceConfidence" in t2 && gn(this.K, 2, t2.minPosePresenceConfidence ?? 0.5), "outputPoseSegmentationMasks" in t2 && (this.outputPoseSegmentationMasks = !!t2.outputPoseSegmentationMasks), "minHandLandmarksConfidence" in t2 && gn(this.J, 2, t2.minHandLandmarksConfidence ?? 0.5), this.l(t2); + } + D(t2, e2, n2) { + const r2 = "function" != typeof e2 ? e2 : {}; + return this.C = "function" == typeof e2 ? e2 : n2, yc(this), Wa(this, t2, r2), _c(this); + } + F(t2, e2, n2, r2) { + const i2 = "function" != typeof n2 ? n2 : {}; + return this.C = "function" == typeof n2 ? n2 : r2, yc(this), za(this, t2, i2, e2), _c(this); + } + m() { + var t2 = new qi(); + Yi(t2, "input_frames_image"), $i(t2, "pose_landmarks"), $i(t2, "pose_world_landmarks"), $i(t2, "face_landmarks"), $i(t2, "left_hand_landmarks"), $i(t2, "left_hand_world_landmarks"), $i(t2, "right_hand_landmarks"), $i(t2, "right_hand_world_landmarks"); + const e2 = new Di(), n2 = new bi(); + Ke(n2, 1, ae("type.googleapis.com/mediapipe.tasks.vision.holistic_landmarker.proto.HolisticLandmarkerGraphOptions"), ""), function(t3, e3) { + if (null != e3) if (Array.isArray(e3)) De(t3, 2, Re(e3)); + else { + if (!("string" == typeof e3 || e3 instanceof N || O(e3))) throw Error("invalid value in Any.value field: " + e3 + " expected a ByteString, a base64 encoded string, a Uint8Array or a jspb array"); + Ke(t3, 2, ft(e3, false), U()); + } + }(n2, this.j.g()); + const r2 = new Xi(); + Gi(r2, "mediapipe.tasks.vision.holistic_landmarker.HolisticLandmarkerGraph"), hn(r2, 8, bi, n2), ji(r2, "IMAGE:input_frames_image"), Vi(r2, "POSE_LANDMARKS:pose_landmarks"), Vi(r2, "POSE_WORLD_LANDMARKS:pose_world_landmarks"), Vi(r2, "FACE_LANDMARKS:face_landmarks"), Vi(r2, "LEFT_HAND_LANDMARKS:left_hand_landmarks"), Vi(r2, "LEFT_HAND_WORLD_LANDMARKS:left_hand_world_landmarks"), Vi(r2, "RIGHT_HAND_LANDMARKS:right_hand_landmarks"), Vi(r2, "RIGHT_HAND_WORLD_LANDMARKS:right_hand_world_landmarks"), r2.o(e2), Ki(t2, r2), zo(this, t2), this.g.attachProtoListener("pose_landmarks", (t3, e3) => { + vc(t3, this.h.poseLandmarks), Wo(this, e3); + }), this.g.attachEmptyPacketListener("pose_landmarks", (t3) => { + Wo(this, t3); + }), this.g.attachProtoListener("pose_world_landmarks", (t3, e3) => { + var n3 = this.h.poseWorldLandmarks; + t3 = cs(t3), n3.push(So(t3)), Wo(this, e3); + }), this.g.attachEmptyPacketListener("pose_world_landmarks", (t3) => { + Wo(this, t3); + }), this.outputPoseSegmentationMasks && (Vi(r2, "POSE_SEGMENTATION_MASK:pose_segmentation_mask"), Ko(this, "pose_segmentation_mask"), this.g.U("pose_segmentation_mask", (t3, e3) => { + this.h.poseSegmentationMasks = [Ka(this, t3, true, !this.C)], Wo(this, e3); + }), this.g.attachEmptyPacketListener("pose_segmentation_mask", (t3) => { + this.h.poseSegmentationMasks = [], Wo(this, t3); + })), this.g.attachProtoListener("face_landmarks", (t3, e3) => { + vc(t3, this.h.faceLandmarks), Wo(this, e3); + }), this.g.attachEmptyPacketListener("face_landmarks", (t3) => { + Wo(this, t3); + }), this.outputFaceBlendshapes && ($i(t2, "extra_blendshapes"), Vi(r2, "FACE_BLENDSHAPES:extra_blendshapes"), this.g.attachProtoListener("extra_blendshapes", (t3, e3) => { + var n3 = this.h.faceBlendshapes; + this.outputFaceBlendshapes && (t3 = ns(t3), n3.push(Ao(t3.g() ?? []))), Wo(this, e3); + }), this.g.attachEmptyPacketListener("extra_blendshapes", (t3) => { + Wo(this, t3); + })), this.g.attachProtoListener("left_hand_landmarks", (t3, e3) => { + vc(t3, this.h.leftHandLandmarks), Wo(this, e3); + }), this.g.attachEmptyPacketListener("left_hand_landmarks", (t3) => { + Wo(this, t3); + }), this.g.attachProtoListener("left_hand_world_landmarks", (t3, e3) => { + var n3 = this.h.leftHandWorldLandmarks; + t3 = cs(t3), n3.push(So(t3)), Wo(this, e3); + }), this.g.attachEmptyPacketListener("left_hand_world_landmarks", (t3) => { + Wo(this, t3); + }), this.g.attachProtoListener("right_hand_landmarks", (t3, e3) => { + vc(t3, this.h.rightHandLandmarks), Wo(this, e3); + }), this.g.attachEmptyPacketListener("right_hand_landmarks", (t3) => { + Wo(this, t3); + }), this.g.attachProtoListener("right_hand_world_landmarks", (t3, e3) => { + var n3 = this.h.rightHandWorldLandmarks; + t3 = cs(t3), n3.push(So(t3)), Wo(this, e3); + }), this.g.attachEmptyPacketListener("right_hand_world_landmarks", (t3) => { + Wo(this, t3); + }), t2 = t2.g(), this.setGraph(new Uint8Array(t2), true); + } +}; +Ec.prototype.detectForVideo = Ec.prototype.F, Ec.prototype.detect = Ec.prototype.D, Ec.prototype.setOptions = Ec.prototype.o, Ec.createFromModelPath = function(t2, e2) { + return Xa(Ec, t2, { baseOptions: { modelAssetPath: e2 } }); +}, Ec.createFromModelBuffer = function(t2, e2) { + return Xa(Ec, t2, { baseOptions: { modelAssetBuffer: e2 } }); +}, Ec.createFromOptions = function(t2, e2) { + return Xa(Ec, t2, e2); +}, Ec.HAND_CONNECTIONS = hc, Ec.POSE_CONNECTIONS = mc, Ec.FACE_LANDMARKS_LIPS = qa, Ec.FACE_LANDMARKS_LEFT_EYE = Ja, Ec.FACE_LANDMARKS_LEFT_EYEBROW = Za, Ec.FACE_LANDMARKS_LEFT_IRIS = Qa, Ec.FACE_LANDMARKS_RIGHT_EYE = tc, Ec.FACE_LANDMARKS_RIGHT_EYEBROW = ec, Ec.FACE_LANDMARKS_RIGHT_IRIS = nc, Ec.FACE_LANDMARKS_FACE_OVAL = rc, Ec.FACE_LANDMARKS_CONTOURS = ic, Ec.FACE_LANDMARKS_TESSELATION = sc; +var wc = class extends Ya { + constructor(t2, e2) { + super(new Va(t2, e2), "input_image", "norm_rect", true), this.j = { classifications: [] }, sn(t2 = this.h = new ao(), 0, 1, e2 = new Ls()); + } + get baseOptions() { + return en(this.h, Ls, 1); + } + set baseOptions(t2) { + sn(this.h, 0, 1, t2); + } + o(t2) { + return sn(this.h, 0, 2, To(t2, en(this.h, ws, 2))), this.l(t2); + } + sa(t2, e2) { + return this.j = { classifications: [] }, Wa(this, t2, e2), this.j; + } + ta(t2, e2, n2) { + return this.j = { classifications: [] }, za(this, t2, n2, e2), this.j; + } + m() { + var t2 = new qi(); + Yi(t2, "input_image"), Yi(t2, "norm_rect"), $i(t2, "classifications"); + const e2 = new Di(); + Xn(e2, co, this.h); + const n2 = new Xi(); + Gi(n2, "mediapipe.tasks.vision.image_classifier.ImageClassifierGraph"), ji(n2, "IMAGE:input_image"), ji(n2, "NORM_RECT:norm_rect"), Vi(n2, "CLASSIFICATIONS:classifications"), n2.o(e2), Ki(t2, n2), this.g.attachProtoListener("classifications", (t3, e3) => { + this.j = function(t4) { + const e4 = { classifications: rn(t4, ps, 1).map((t5) => Ao(en(t5, ts, 4)?.g() ?? [], un(t5, 2) ?? 0, ln(t5, 3) ?? "")) }; + return null != ie(Ce(t4, 2)) && (e4.timestampMs = ie(Ce(t4, 2)) ?? 0), e4; + }(gs(t3)), Wo(this, e3); + }), this.g.attachEmptyPacketListener("classifications", (t3) => { + Wo(this, t3); + }), t2 = t2.g(), this.setGraph(new Uint8Array(t2), true); + } +}; +wc.prototype.classifyForVideo = wc.prototype.ta, wc.prototype.classify = wc.prototype.sa, wc.prototype.setOptions = wc.prototype.o, wc.createFromModelPath = function(t2, e2) { + return Xa(wc, t2, { baseOptions: { modelAssetPath: e2 } }); +}, wc.createFromModelBuffer = function(t2, e2) { + return Xa(wc, t2, { baseOptions: { modelAssetBuffer: e2 } }); +}, wc.createFromOptions = function(t2, e2) { + return Xa(wc, t2, e2); +}; +var Tc = class extends Ya { + constructor(t2, e2) { + super(new Va(t2, e2), "image_in", "norm_rect", true), this.h = new ho(), this.embeddings = { embeddings: [] }, sn(t2 = this.h, 0, 1, e2 = new Ls()); + } + get baseOptions() { + return en(this.h, Ls, 1); + } + set baseOptions(t2) { + sn(this.h, 0, 1, t2); + } + o(t2) { + var e2 = this.h, n2 = en(this.h, As, 2); + return n2 = n2 ? n2.clone() : new As(), void 0 !== t2.l2Normalize ? fn(n2, 1, t2.l2Normalize) : "l2Normalize" in t2 && De(n2, 1), void 0 !== t2.quantize ? fn(n2, 2, t2.quantize) : "quantize" in t2 && De(n2, 2), sn(e2, 0, 2, n2), this.l(t2); + } + za(t2, e2) { + return Wa(this, t2, e2), this.embeddings; + } + Aa(t2, e2, n2) { + return za(this, t2, n2, e2), this.embeddings; + } + m() { + var t2 = new qi(); + Yi(t2, "image_in"), Yi(t2, "norm_rect"), $i(t2, "embeddings_out"); + const e2 = new Di(); + Xn(e2, uo, this.h); + const n2 = new Xi(); + Gi(n2, "mediapipe.tasks.vision.image_embedder.ImageEmbedderGraph"), ji(n2, "IMAGE:image_in"), ji(n2, "NORM_RECT:norm_rect"), Vi(n2, "EMBEDDINGS:embeddings_out"), n2.o(e2), Ki(t2, n2), this.g.attachProtoListener("embeddings_out", (t3, e3) => { + t3 = Es(t3), this.embeddings = function(t4) { + return { embeddings: rn(t4, _s, 1).map((t5) => { + const e4 = { headIndex: un(t5, 3) ?? 0 ?? -1, headName: ln(t5, 4) ?? "" ?? "" }; + if (void 0 !== tn(t5, ms, $e(t5, 1))) t5 = Ve(t5 = en(t5, ms, $e(t5, 1)), 1, $t, je()), e4.floatEmbedding = t5.slice(); + else { + const n3 = new Uint8Array(0); + e4.quantizedEmbedding = en(t5, ys, $e(t5, 2))?.oa()?.h() ?? n3; + } + return e4; + }), timestampMs: ie(Ce(t4, 2)) ?? 0 }; + }(t3), Wo(this, e3); + }), this.g.attachEmptyPacketListener("embeddings_out", (t3) => { + Wo(this, t3); + }), t2 = t2.g(), this.setGraph(new Uint8Array(t2), true); + } +}; +Tc.cosineSimilarity = function(t2, e2) { + if (t2.floatEmbedding && e2.floatEmbedding) t2 = Lo(t2.floatEmbedding, e2.floatEmbedding); + else { + if (!t2.quantizedEmbedding || !e2.quantizedEmbedding) throw Error("Cannot compute cosine similarity between quantized and float embeddings."); + t2 = Lo(xo(t2.quantizedEmbedding), xo(e2.quantizedEmbedding)); + } + return t2; +}, Tc.prototype.embedForVideo = Tc.prototype.Aa, Tc.prototype.embed = Tc.prototype.za, Tc.prototype.setOptions = Tc.prototype.o, Tc.createFromModelPath = function(t2, e2) { + return Xa(Tc, t2, { baseOptions: { modelAssetPath: e2 } }); +}, Tc.createFromModelBuffer = function(t2, e2) { + return Xa(Tc, t2, { baseOptions: { modelAssetBuffer: e2 } }); +}, Tc.createFromOptions = function(t2, e2) { + return Xa(Tc, t2, e2); +}; +var Ac = class { + constructor(t2, e2, n2) { + this.confidenceMasks = t2, this.categoryMask = e2, this.qualityScores = n2; + } + close() { + this.confidenceMasks?.forEach((t2) => { + t2.close(); + }), this.categoryMask?.close(); + } +}; +function bc(t2) { + t2.categoryMask = void 0, t2.confidenceMasks = void 0, t2.qualityScores = void 0; +} +function kc(t2) { + try { + const e2 = new Ac(t2.confidenceMasks, t2.categoryMask, t2.qualityScores); + if (!t2.j) return e2; + t2.j(e2); + } finally { + Yo(t2); + } +} +Ac.prototype.close = Ac.prototype.close; +var Sc = class extends Ya { + constructor(t2, e2) { + super(new Va(t2, e2), "image_in", "norm_rect", false), this.s = [], this.outputCategoryMask = false, this.outputConfidenceMasks = true, this.h = new mo(), this.v = new lo(), sn(this.h, 0, 3, this.v), sn(t2 = this.h, 0, 1, e2 = new Ls()); + } + get baseOptions() { + return en(this.h, Ls, 1); + } + set baseOptions(t2) { + sn(this.h, 0, 1, t2); + } + o(t2) { + return void 0 !== t2.displayNamesLocale ? De(this.h, 2, ae(t2.displayNamesLocale)) : "displayNamesLocale" in t2 && De(this.h, 2), "outputCategoryMask" in t2 && (this.outputCategoryMask = t2.outputCategoryMask ?? false), "outputConfidenceMasks" in t2 && (this.outputConfidenceMasks = t2.outputConfidenceMasks ?? true), super.l(t2); + } + I() { + !function(t2) { + const e2 = rn(t2.da(), Xi, 1).filter((t3) => (ln(t3, 1) ?? "").includes("mediapipe.tasks.TensorsToSegmentationCalculator")); + if (t2.s = [], e2.length > 1) throw Error("The graph has more than one mediapipe.tasks.TensorsToSegmentationCalculator."); + 1 === e2.length && (en(e2[0], Di, 7)?.l()?.g() ?? /* @__PURE__ */ new Map()).forEach((e3, n2) => { + t2.s[Number(n2)] = ln(e3, 1) ?? ""; + }); + }(this); + } + segment(t2, e2, n2) { + const r2 = "function" != typeof e2 ? e2 : {}; + return this.j = "function" == typeof e2 ? e2 : n2, bc(this), Wa(this, t2, r2), kc(this); + } + Ma(t2, e2, n2, r2) { + const i2 = "function" != typeof n2 ? n2 : {}; + return this.j = "function" == typeof n2 ? n2 : r2, bc(this), za(this, t2, i2, e2), kc(this); + } + Da() { + return this.s; + } + m() { + var t2 = new qi(); + Yi(t2, "image_in"), Yi(t2, "norm_rect"); + const e2 = new Di(); + Xn(e2, yo, this.h); + const n2 = new Xi(); + Gi(n2, "mediapipe.tasks.vision.image_segmenter.ImageSegmenterGraph"), ji(n2, "IMAGE:image_in"), ji(n2, "NORM_RECT:norm_rect"), n2.o(e2), Ki(t2, n2), zo(this, t2), this.outputConfidenceMasks && ($i(t2, "confidence_masks"), Vi(n2, "CONFIDENCE_MASKS:confidence_masks"), Ko(this, "confidence_masks"), this.g.ca("confidence_masks", (t3, e3) => { + this.confidenceMasks = t3.map((t4) => Ka(this, t4, true, !this.j)), Wo(this, e3); + }), this.g.attachEmptyPacketListener("confidence_masks", (t3) => { + this.confidenceMasks = [], Wo(this, t3); + })), this.outputCategoryMask && ($i(t2, "category_mask"), Vi(n2, "CATEGORY_MASK:category_mask"), Ko(this, "category_mask"), this.g.U("category_mask", (t3, e3) => { + this.categoryMask = Ka(this, t3, false, !this.j), Wo(this, e3); + }), this.g.attachEmptyPacketListener("category_mask", (t3) => { + this.categoryMask = void 0, Wo(this, t3); + })), $i(t2, "quality_scores"), Vi(n2, "QUALITY_SCORES:quality_scores"), this.g.attachFloatVectorListener("quality_scores", (t3, e3) => { + this.qualityScores = t3, Wo(this, e3); + }), this.g.attachEmptyPacketListener("quality_scores", (t3) => { + this.categoryMask = void 0, Wo(this, t3); + }), t2 = t2.g(), this.setGraph(new Uint8Array(t2), true); + } +}; +Sc.prototype.getLabels = Sc.prototype.Da, Sc.prototype.segmentForVideo = Sc.prototype.Ma, Sc.prototype.segment = Sc.prototype.segment, Sc.prototype.setOptions = Sc.prototype.o, Sc.createFromModelPath = function(t2, e2) { + return Xa(Sc, t2, { baseOptions: { modelAssetPath: e2 } }); +}, Sc.createFromModelBuffer = function(t2, e2) { + return Xa(Sc, t2, { baseOptions: { modelAssetBuffer: e2 } }); +}, Sc.createFromOptions = function(t2, e2) { + return Xa(Sc, t2, e2); +}; +var xc = class { + constructor(t2, e2, n2) { + this.confidenceMasks = t2, this.categoryMask = e2, this.qualityScores = n2; + } + close() { + this.confidenceMasks?.forEach((t2) => { + t2.close(); + }), this.categoryMask?.close(); + } +}; +xc.prototype.close = xc.prototype.close; +var Lc = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var Rc = [0, oi, -2]; +var Fc = [0, Qr, -3, hi, Qr, -1]; +var Ic = [0, Fc]; +var Mc = [0, Fc, oi, -1]; +var Pc = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var Oc = [0, Qr, -1, hi]; +var Cc = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var Uc = class extends Hn { + constructor(t2) { + super(t2); + } +}; +var Dc = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 14, 15]; +var Nc = class extends Hn { + constructor(t2) { + super(t2); + } +}; +Nc.prototype.g = Ai([0, pi, [0, Dc, gi, Fc, gi, [0, Fc, Rc], gi, Ic, gi, [0, Ic, Rc], gi, Oc, gi, [0, Qr, -3, hi, vi], gi, [0, Qr, -3, hi], gi, [0, fi, Qr, -2, hi, oi, hi, -1, 2, Qr, Rc], gi, Mc, gi, [0, Mc, Rc], Qr, Rc, fi, gi, [0, Qr, -3, hi, Rc, -1], gi, [0, pi, Oc]], fi, [0, fi, oi, -1, hi]]); +var Bc = class extends Ya { + constructor(t2, e2) { + super(new Va(t2, e2), "image_in", "norm_rect_in", false), this.outputCategoryMask = false, this.outputConfidenceMasks = true, this.h = new mo(), this.s = new lo(), sn(this.h, 0, 3, this.s), sn(t2 = this.h, 0, 1, e2 = new Ls()); + } + get baseOptions() { + return en(this.h, Ls, 1); + } + set baseOptions(t2) { + sn(this.h, 0, 1, t2); + } + o(t2) { + return "outputCategoryMask" in t2 && (this.outputCategoryMask = t2.outputCategoryMask ?? false), "outputConfidenceMasks" in t2 && (this.outputConfidenceMasks = t2.outputConfidenceMasks ?? true), super.l(t2); + } + segment(t2, e2, n2, r2) { + const i2 = "function" != typeof n2 ? n2 : {}; + this.j = "function" == typeof n2 ? n2 : r2, this.qualityScores = this.categoryMask = this.confidenceMasks = void 0, n2 = this.B + 1, r2 = new Nc(); + const s2 = new Uc(); + var o2 = new Lc(); + if (pn(o2, 1, 255), sn(s2, 0, 12, o2), e2.keypoint && e2.scribble) throw Error("Cannot provide both keypoint and scribble."); + if (e2.keypoint) { + var a2 = new Pc(); + fn(a2, 3, true), gn(a2, 1, e2.keypoint.x), gn(a2, 2, e2.keypoint.y), on(s2, 5, Dc, a2); + } else { + if (!e2.scribble) throw Error("Must provide either a keypoint or a scribble."); + for (a2 of (o2 = new Cc(), e2.scribble)) fn(e2 = new Pc(), 3, true), gn(e2, 1, a2.x), gn(e2, 2, a2.y), hn(o2, 1, Pc, e2); + on(s2, 15, Dc, o2); + } + hn(r2, 1, Uc, s2), this.g.addProtoToStream(r2.g(), "drishti.RenderData", "roi_in", n2), Wa(this, t2, i2); + t: { + try { + const t3 = new xc(this.confidenceMasks, this.categoryMask, this.qualityScores); + if (!this.j) { + var c2 = t3; + break t; + } + this.j(t3); + } finally { + Yo(this); + } + c2 = void 0; + } + return c2; + } + m() { + var t2 = new qi(); + Yi(t2, "image_in"), Yi(t2, "roi_in"), Yi(t2, "norm_rect_in"); + const e2 = new Di(); + Xn(e2, yo, this.h); + const n2 = new Xi(); + Gi(n2, "mediapipe.tasks.vision.interactive_segmenter.InteractiveSegmenterGraph"), ji(n2, "IMAGE:image_in"), ji(n2, "ROI:roi_in"), ji(n2, "NORM_RECT:norm_rect_in"), n2.o(e2), Ki(t2, n2), zo(this, t2), this.outputConfidenceMasks && ($i(t2, "confidence_masks"), Vi(n2, "CONFIDENCE_MASKS:confidence_masks"), Ko(this, "confidence_masks"), this.g.ca("confidence_masks", (t3, e3) => { + this.confidenceMasks = t3.map((t4) => Ka(this, t4, true, !this.j)), Wo(this, e3); + }), this.g.attachEmptyPacketListener("confidence_masks", (t3) => { + this.confidenceMasks = [], Wo(this, t3); + })), this.outputCategoryMask && ($i(t2, "category_mask"), Vi(n2, "CATEGORY_MASK:category_mask"), Ko(this, "category_mask"), this.g.U("category_mask", (t3, e3) => { + this.categoryMask = Ka(this, t3, false, !this.j), Wo(this, e3); + }), this.g.attachEmptyPacketListener("category_mask", (t3) => { + this.categoryMask = void 0, Wo(this, t3); + })), $i(t2, "quality_scores"), Vi(n2, "QUALITY_SCORES:quality_scores"), this.g.attachFloatVectorListener("quality_scores", (t3, e3) => { + this.qualityScores = t3, Wo(this, e3); + }), this.g.attachEmptyPacketListener("quality_scores", (t3) => { + this.categoryMask = void 0, Wo(this, t3); + }), t2 = t2.g(), this.setGraph(new Uint8Array(t2), true); + } +}; +Bc.prototype.segment = Bc.prototype.segment, Bc.prototype.setOptions = Bc.prototype.o, Bc.createFromModelPath = function(t2, e2) { + return Xa(Bc, t2, { baseOptions: { modelAssetPath: e2 } }); +}, Bc.createFromModelBuffer = function(t2, e2) { + return Xa(Bc, t2, { baseOptions: { modelAssetBuffer: e2 } }); +}, Bc.createFromOptions = function(t2, e2) { + return Xa(Bc, t2, e2); +}; +var Gc = class extends Ya { + constructor(t2, e2) { + super(new Va(t2, e2), "input_frame_gpu", "norm_rect", false), this.j = { detections: [] }, sn(t2 = this.h = new _o(), 0, 1, e2 = new Ls()); + } + get baseOptions() { + return en(this.h, Ls, 1); + } + set baseOptions(t2) { + sn(this.h, 0, 1, t2); + } + o(t2) { + return void 0 !== t2.displayNamesLocale ? De(this.h, 2, ae(t2.displayNamesLocale)) : "displayNamesLocale" in t2 && De(this.h, 2), void 0 !== t2.maxResults ? pn(this.h, 3, t2.maxResults) : "maxResults" in t2 && De(this.h, 3), void 0 !== t2.scoreThreshold ? gn(this.h, 4, t2.scoreThreshold) : "scoreThreshold" in t2 && De(this.h, 4), void 0 !== t2.categoryAllowlist ? mn(this.h, 5, t2.categoryAllowlist) : "categoryAllowlist" in t2 && De(this.h, 5), void 0 !== t2.categoryDenylist ? mn(this.h, 6, t2.categoryDenylist) : "categoryDenylist" in t2 && De(this.h, 6), this.l(t2); + } + D(t2, e2) { + return this.j = { detections: [] }, Wa(this, t2, e2), this.j; + } + F(t2, e2, n2) { + return this.j = { detections: [] }, za(this, t2, n2, e2), this.j; + } + m() { + var t2 = new qi(); + Yi(t2, "input_frame_gpu"), Yi(t2, "norm_rect"), $i(t2, "detections"); + const e2 = new Di(); + Xn(e2, vo, this.h); + const n2 = new Xi(); + Gi(n2, "mediapipe.tasks.vision.ObjectDetectorGraph"), ji(n2, "IMAGE:input_frame_gpu"), ji(n2, "NORM_RECT:norm_rect"), Vi(n2, "DETECTIONS:detections"), n2.o(e2), Ki(t2, n2), this.g.attachProtoVectorListener("detections", (t3, e3) => { + for (const e4 of t3) t3 = os(e4), this.j.detections.push(bo(t3)); + Wo(this, e3); + }), this.g.attachEmptyPacketListener("detections", (t3) => { + Wo(this, t3); + }), t2 = t2.g(), this.setGraph(new Uint8Array(t2), true); + } +}; +Gc.prototype.detectForVideo = Gc.prototype.F, Gc.prototype.detect = Gc.prototype.D, Gc.prototype.setOptions = Gc.prototype.o, Gc.createFromModelPath = async function(t2, e2) { + return Xa(Gc, t2, { baseOptions: { modelAssetPath: e2 } }); +}, Gc.createFromModelBuffer = function(t2, e2) { + return Xa(Gc, t2, { baseOptions: { modelAssetBuffer: e2 } }); +}, Gc.createFromOptions = function(t2, e2) { + return Xa(Gc, t2, e2); +}; +var jc = class { + constructor(t2, e2, n2) { + this.landmarks = t2, this.worldLandmarks = e2, this.segmentationMasks = n2; + } + close() { + this.segmentationMasks?.forEach((t2) => { + t2.close(); + }); + } +}; +function Vc(t2) { + t2.landmarks = [], t2.worldLandmarks = [], t2.segmentationMasks = void 0; +} +function Xc(t2) { + try { + const e2 = new jc(t2.landmarks, t2.worldLandmarks, t2.segmentationMasks); + if (!t2.s) return e2; + t2.s(e2); + } finally { + Yo(t2); + } +} +jc.prototype.close = jc.prototype.close; +var Hc = class extends Ya { + constructor(t2, e2) { + super(new Va(t2, e2), "image_in", "norm_rect", false), this.landmarks = [], this.worldLandmarks = [], this.outputSegmentationMasks = false, sn(t2 = this.h = new Eo(), 0, 1, e2 = new Ls()), this.v = new ro(), sn(this.h, 0, 3, this.v), this.j = new no(), sn(this.h, 0, 2, this.j), pn(this.j, 4, 1), gn(this.j, 2, 0.5), gn(this.v, 2, 0.5), gn(this.h, 4, 0.5); + } + get baseOptions() { + return en(this.h, Ls, 1); + } + set baseOptions(t2) { + sn(this.h, 0, 1, t2); + } + o(t2) { + return "numPoses" in t2 && pn(this.j, 4, t2.numPoses ?? 1), "minPoseDetectionConfidence" in t2 && gn(this.j, 2, t2.minPoseDetectionConfidence ?? 0.5), "minTrackingConfidence" in t2 && gn(this.h, 4, t2.minTrackingConfidence ?? 0.5), "minPosePresenceConfidence" in t2 && gn(this.v, 2, t2.minPosePresenceConfidence ?? 0.5), "outputSegmentationMasks" in t2 && (this.outputSegmentationMasks = t2.outputSegmentationMasks ?? false), this.l(t2); + } + D(t2, e2, n2) { + const r2 = "function" != typeof e2 ? e2 : {}; + return this.s = "function" == typeof e2 ? e2 : n2, Vc(this), Wa(this, t2, r2), Xc(this); + } + F(t2, e2, n2, r2) { + const i2 = "function" != typeof n2 ? n2 : {}; + return this.s = "function" == typeof n2 ? n2 : r2, Vc(this), za(this, t2, i2, e2), Xc(this); + } + m() { + var t2 = new qi(); + Yi(t2, "image_in"), Yi(t2, "norm_rect"), $i(t2, "normalized_landmarks"), $i(t2, "world_landmarks"), $i(t2, "segmentation_masks"); + const e2 = new Di(); + Xn(e2, wo, this.h); + const n2 = new Xi(); + Gi(n2, "mediapipe.tasks.vision.pose_landmarker.PoseLandmarkerGraph"), ji(n2, "IMAGE:image_in"), ji(n2, "NORM_RECT:norm_rect"), Vi(n2, "NORM_LANDMARKS:normalized_landmarks"), Vi(n2, "WORLD_LANDMARKS:world_landmarks"), n2.o(e2), Ki(t2, n2), zo(this, t2), this.g.attachProtoVectorListener("normalized_landmarks", (t3, e3) => { + this.landmarks = []; + for (const e4 of t3) t3 = us(e4), this.landmarks.push(ko(t3)); + Wo(this, e3); + }), this.g.attachEmptyPacketListener("normalized_landmarks", (t3) => { + this.landmarks = [], Wo(this, t3); + }), this.g.attachProtoVectorListener("world_landmarks", (t3, e3) => { + this.worldLandmarks = []; + for (const e4 of t3) t3 = cs(e4), this.worldLandmarks.push(So(t3)); + Wo(this, e3); + }), this.g.attachEmptyPacketListener("world_landmarks", (t3) => { + this.worldLandmarks = [], Wo(this, t3); + }), this.outputSegmentationMasks && (Vi(n2, "SEGMENTATION_MASK:segmentation_masks"), Ko(this, "segmentation_masks"), this.g.ca("segmentation_masks", (t3, e3) => { + this.segmentationMasks = t3.map((t4) => Ka(this, t4, true, !this.s)), Wo(this, e3); + }), this.g.attachEmptyPacketListener("segmentation_masks", (t3) => { + this.segmentationMasks = [], Wo(this, t3); + })), t2 = t2.g(), this.setGraph(new Uint8Array(t2), true); + } +}; +Hc.prototype.detectForVideo = Hc.prototype.F, Hc.prototype.detect = Hc.prototype.D, Hc.prototype.setOptions = Hc.prototype.o, Hc.createFromModelPath = function(t2, e2) { + return Xa(Hc, t2, { baseOptions: { modelAssetPath: e2 } }); +}, Hc.createFromModelBuffer = function(t2, e2) { + return Xa(Hc, t2, { baseOptions: { modelAssetBuffer: e2 } }); +}, Hc.createFromOptions = function(t2, e2) { + return Xa(Hc, t2, e2); +}, Hc.POSE_CONNECTIONS = mc; + +// src/gesture/landmarks.ts +var LANDMARK = { + WRIST: 0, + THUMB_CMC: 1, + THUMB_MCP: 2, + THUMB_IP: 3, + THUMB_TIP: 4, + INDEX_MCP: 5, + INDEX_PIP: 6, + INDEX_DIP: 7, + INDEX_TIP: 8, + MIDDLE_MCP: 9, + MIDDLE_PIP: 10, + MIDDLE_DIP: 11, + MIDDLE_TIP: 12, + RING_MCP: 13, + RING_PIP: 14, + RING_DIP: 15, + RING_TIP: 16, + PINKY_MCP: 17, + PINKY_PIP: 18, + PINKY_DIP: 19, + PINKY_TIP: 20 +}; +function dist2d(a2, b2) { + const dx = a2.x - b2.x; + const dy = a2.y - b2.y; + return Math.hypot(dx, dy); +} +function midpoint(a2, b2) { + return { x: (a2.x + b2.x) / 2, y: (a2.y + b2.y) / 2 }; +} + +// src/gesture/OneEuroFilter.ts +function smoothingAlpha(cutoffHz, dtSec) { + const tau = 1 / (2 * Math.PI * cutoffHz); + return 1 / (1 + tau / dtSec); +} +var LowPass = class { + constructor() { + __publicField(this, "value", null); + } + filter(x2, alpha) { + this.value = this.value === null ? x2 : alpha * x2 + (1 - alpha) * this.value; + return this.value; + } + reset() { + this.value = null; + } + get initialized() { + return this.value !== null; + } +}; +var OneEuroFilter = class { + /** + * @param minCutoff Baseline cutoff (Hz). Lower → smoother but laggier when still. + * @param beta Speed coefficient. Higher → less lag during fast moves. + * @param dCutoff Cutoff for the derivative low-pass (Hz). 1.0 is fine. + */ + constructor(minCutoff = 1, beta = 0.01, dCutoff = 1) { + this.minCutoff = minCutoff; + this.beta = beta; + this.dCutoff = dCutoff; + __publicField(this, "signal", new LowPass()); + __publicField(this, "derivative", new LowPass()); + __publicField(this, "lastTimeSec", null); + __publicField(this, "lastRaw", 0); + } + reset() { + this.signal.reset(); + this.derivative.reset(); + this.lastTimeSec = null; + this.lastRaw = 0; + } + /** @param timeSec strictly-increasing timestamp in seconds. */ + filter(x2, timeSec) { + let dt2 = this.lastTimeSec === null ? 1 / 60 : timeSec - this.lastTimeSec; + if (dt2 <= 0) dt2 = 1 / 60; + this.lastTimeSec = timeSec; + const dRaw = this.signal.initialized ? (x2 - this.lastRaw) / dt2 : 0; + this.lastRaw = x2; + const edRaw = this.derivative.filter(dRaw, smoothingAlpha(this.dCutoff, dt2)); + const cutoff = this.minCutoff + this.beta * Math.abs(edRaw); + return this.signal.filter(x2, smoothingAlpha(cutoff, dt2)); + } +}; + +// src/gesture/pinch.ts +function pinchDistance(landmarks) { + const thumb = landmarks[LANDMARK.THUMB_TIP]; + const index = landmarks[LANDMARK.INDEX_TIP]; + const wrist = landmarks[LANDMARK.WRIST]; + const middleMcp = landmarks[LANDMARK.MIDDLE_MCP]; + const handSize = dist2d(wrist, middleMcp) || 1e-6; + return dist2d(thumb, index) / handSize; +} +var PinchDetector = class { + constructor(onThreshold = 0.35, offThreshold = 0.5, persistFrames = 2) { + this.onThreshold = onThreshold; + this.offThreshold = offThreshold; + this.persistFrames = persistFrames; + __publicField(this, "pinching", false); + __publicField(this, "pendingFrames", 0); + } + reset() { + this.pinching = false; + this.pendingFrames = 0; + } + get isPinching() { + return this.pinching; + } + /** Feed one frame's distance. Returns true if the committed state CHANGED. */ + update(distance) { + const target = this.pinching ? distance < this.offThreshold : distance < this.onThreshold; + if (target === this.pinching) { + this.pendingFrames = 0; + return false; + } + this.pendingFrames += 1; + if (this.pendingFrames >= this.persistFrames) { + this.pinching = target; + this.pendingFrames = 0; + return true; + } + return false; + } +}; + +// src/gesture/commands.ts +var GESTURE_COMMANDS = { + Open_Palm: { name: "halt-all", holdMs: -1 }, + // holdMs filled from palmHoldMs + Thumb_Up: { name: "approve" }, + Victory: { name: "new-session" } +}; +var CommandDetector = class { + constructor(palmHoldMs = 1e3) { + this.palmHoldMs = palmHoldMs; + /** gesture category → timestamp (ms) it was first seen in the current hold. */ + __publicField(this, "heldSince", /* @__PURE__ */ new Map()); + /** gestures that already fired during the current hold (cleared on release). */ + __publicField(this, "fired", /* @__PURE__ */ new Set()); + } + reset() { + this.heldSince.clear(); + this.fired.clear(); + } + holdMsFor(spec) { + return spec.holdMs === -1 ? this.palmHoldMs : spec.holdMs ?? 0; + } + /** + * Feed the set of command-gestures currently shown (across all hands). + * @returns the commands that fired on this frame (usually empty). + */ + update(gestures, nowMs) { + for (const g2 of [...this.heldSince.keys()]) { + if (!gestures.has(g2)) { + this.heldSince.delete(g2); + this.fired.delete(g2); + } + } + const fired = []; + for (const g2 of gestures) { + const spec = GESTURE_COMMANDS[g2]; + if (!spec) continue; + const since = this.heldSince.get(g2) ?? nowMs; + if (!this.heldSince.has(g2)) this.heldSince.set(g2, since); + if (this.fired.has(g2)) continue; + if (nowMs - since >= this.holdMsFor(spec)) { + fired.push(spec.name); + this.fired.add(g2); + } + } + return fired; + } + /** 0–1 charge of the held halt-all gesture (1 once fired, 0 when released). */ + haltProgress(nowMs) { + const since = this.heldSince.get("Open_Palm"); + if (since === void 0) return 0; + if (this.fired.has("Open_Palm")) return 1; + return Math.min(1, (nowMs - since) / this.palmHoldMs); + } +}; + +// src/gesture/GestureController.ts +var DEFAULTS = { + numHands: 1, + deviceId: "", + pinchOn: 0.35, + pinchOff: 0.5, + minCutoff: 1, + beta: 0.01, + palmHoldMs: 1e3, + minDetectionConfidence: 0.6, + minTrackingConfidence: 0.6, + // Pinned to the @mediapipe/tasks-vision version in package.json. + wasmBase: "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.21/wasm", + modelUrl: "https://storage.googleapis.com/mediapipe-models/gesture_recognizer/gesture_recognizer/float16/1/gesture_recognizer.task" +}; +var GestureController = class { + constructor(options) { + __publicField(this, "opts"); + __publicField(this, "recognizer", null); + __publicField(this, "stream", null); + __publicField(this, "rafId", null); + __publicField(this, "running", false); + // Timestamps must be strictly increasing for recognizeForVideo. + __publicField(this, "lastVideoTime", -1); + __publicField(this, "lastTimestamp", -1); + // FPS tracking (rolling over a short window). + __publicField(this, "frameTimes", []); + // Per-hand smoothing + pinch state, keyed by handedness ("Left"/"Right") so a + // hand keeps its own filters even when MediaPipe reorders the hands array. + __publicField(this, "handStates", /* @__PURE__ */ new Map()); + // Discrete gesture → command bus (debounced; Open_Palm held = halt-all). + __publicField(this, "commands"); + // Internal storage is intentionally loose; the public on/off/emit signatures + // below keep callers fully type-safe per event name. + __publicField(this, "listeners", {}); + // ---- Loop ------------------------------------------------------------ + __publicField(this, "loop", () => { + if (!this.running || !this.recognizer) return; + this.rafId = requestAnimationFrame(this.loop); + const video = this.opts.video; + if (video.readyState < 2) return; + let ts2 = performance.now(); + if (ts2 <= this.lastTimestamp) ts2 = this.lastTimestamp + 1; + this.lastTimestamp = ts2; + if (video.currentTime === this.lastVideoTime) return; + this.lastVideoTime = video.currentTime; + let result; + try { + result = this.recognizer.recognizeForVideo(video, ts2); + } catch (err) { + console.error("recognizeForVideo failed", err); + return; + } + this.trackFps(ts2); + this.publish(result, ts2); + }); + this.opts = { + surface: options.surface ?? options.video, + numHands: options.numHands ?? DEFAULTS.numHands, + deviceId: options.deviceId ?? DEFAULTS.deviceId, + pinchOn: options.pinchOn ?? DEFAULTS.pinchOn, + pinchOff: options.pinchOff ?? DEFAULTS.pinchOff, + minCutoff: options.minCutoff ?? DEFAULTS.minCutoff, + beta: options.beta ?? DEFAULTS.beta, + palmHoldMs: options.palmHoldMs ?? DEFAULTS.palmHoldMs, + minDetectionConfidence: options.minDetectionConfidence ?? DEFAULTS.minDetectionConfidence, + minTrackingConfidence: options.minTrackingConfidence ?? DEFAULTS.minTrackingConfidence, + wasmBase: options.wasmBase ?? DEFAULTS.wasmBase, + modelUrl: options.modelUrl ?? DEFAULTS.modelUrl, + video: options.video + }; + this.commands = new CommandDetector(this.opts.palmHoldMs); + } + /** Get (or lazily create) the smoothing + pinch state for one hand. */ + handState(key) { + let state = this.handStates.get(key); + if (!state) { + state = { + cursorX: new OneEuroFilter(this.opts.minCutoff, this.opts.beta), + cursorY: new OneEuroFilter(this.opts.minCutoff, this.opts.beta), + pinch: new PinchDetector(this.opts.pinchOn, this.opts.pinchOff), + label: key, + lastX: 0, + lastY: 0 + }; + this.handStates.set(key, state); + } + return state; + } + // ---- Event emitter --------------------------------------------------- + on(event, handler) { + var _a2; + ((_a2 = this.listeners)[event] ?? (_a2[event] = /* @__PURE__ */ new Set())).add( + handler + ); + return this; + } + off(event, handler) { + this.listeners[event]?.delete(handler); + return this; + } + emit(event, payload) { + this.listeners[event]?.forEach((h2) => h2(payload)); + } + // ---- Lifecycle ------------------------------------------------------- + /** Request the camera, load the model, and start the recognition loop. */ + async start() { + if (this.running) return; + await this.openCamera(); + await this.loadRecognizer(); + this.running = true; + this.lastVideoTime = -1; + this.lastTimestamp = -1; + this.frameTimes = []; + this.handStates.clear(); + this.commands.reset(); + this.loop(); + } + /** Stop the loop, release the camera, and close the recognizer. */ + stop() { + this.running = false; + if (this.rafId !== null) { + cancelAnimationFrame(this.rafId); + this.rafId = null; + } + if (this.stream) { + this.stream.getTracks().forEach((t2) => t2.stop()); + this.stream = null; + } + this.opts.video.srcObject = null; + this.recognizer?.close(); + this.recognizer = null; + } + /** The camera currently in use (resolved deviceId), or "" if not started. */ + get deviceId() { + return this.opts.deviceId; + } + /** List available video input devices. Labels are only populated once the + * user has granted camera permission (i.e. after the first start()). */ + async listCameras() { + const devices = await navigator.mediaDevices.enumerateDevices(); + return devices.filter((d) => d.kind === "videoinput"); + } + /** Switch to a different camera. Reopens the stream live if already running. */ + async useCamera(deviceId) { + this.opts.deviceId = deviceId; + if (!this.running) return; + if (this.stream) { + this.stream.getTracks().forEach((t2) => t2.stop()); + this.stream = null; + } + await this.openCamera(); + this.handStates.clear(); + this.lastVideoTime = -1; + } + // ---- Setup ----------------------------------------------------------- + async openCamera() { + if (!navigator.mediaDevices?.getUserMedia) { + throw new Error("getUserMedia is not available (needs a secure context)."); + } + const videoConstraints = { + width: { ideal: 1280 }, + height: { ideal: 720 }, + frameRate: { ideal: 60, max: 60 } + }; + if (this.opts.deviceId) + videoConstraints.deviceId = { exact: this.opts.deviceId }; + else videoConstraints.facingMode = "user"; + const stream = await navigator.mediaDevices.getUserMedia({ + video: videoConstraints, + audio: false + }); + this.stream = stream; + this.opts.deviceId = stream.getVideoTracks()[0]?.getSettings().deviceId ?? this.opts.deviceId; + const video = this.opts.video; + video.srcObject = stream; + video.muted = true; + video.playsInline = true; + await video.play(); + if (!video.videoWidth) { + await new Promise((resolve) => { + const onMeta = () => { + video.removeEventListener("loadedmetadata", onMeta); + resolve(); + }; + video.addEventListener("loadedmetadata", onMeta); + }); + } + } + async loadRecognizer() { + const fileset = await Po.forVisionTasks(this.opts.wasmBase); + this.recognizer = await fc.createFromOptions(fileset, { + baseOptions: { + modelAssetPath: this.opts.modelUrl, + delegate: "GPU" + }, + runningMode: "VIDEO", + numHands: this.opts.numHands, + minHandDetectionConfidence: this.opts.minDetectionConfidence, + minHandPresenceConfidence: this.opts.minDetectionConfidence, + minTrackingConfidence: this.opts.minTrackingConfidence + }); + } + trackFps(nowMs) { + this.frameTimes.push(nowMs); + const windowStart = nowMs - 1e3; + while (this.frameTimes.length && this.frameTimes[0] < windowStart) { + this.frameTimes.shift(); + } + } + get fps() { + if (this.frameTimes.length < 2) return 0; + const span = this.frameTimes[this.frameTimes.length - 1] - this.frameTimes[0]; + if (span <= 0) return 0; + return Math.round((this.frameTimes.length - 1) / span * 1e3); + } + publish(result, ts2) { + const allLandmarks = result.landmarks ?? []; + const handedness = result.handedness ?? []; + const gestures = result.gestures ?? []; + const tSec = ts2 / 1e3; + const rect = this.opts.surface.getBoundingClientRect(); + const hands = []; + const activeKeys = /* @__PURE__ */ new Set(); + for (let i2 = 0; i2 < allLandmarks.length; i2++) { + const lm = allLandmarks[i2]; + if (!lm || lm.length === 0) continue; + const label = handedness[i2]?.[0]?.categoryName ?? `hand${i2}`; + let key = label; + if (activeKeys.has(key)) key = `${label}#${i2}`; + activeKeys.add(key); + const state = this.handState(key); + const mid = midpoint(lm[LANDMARK.THUMB_TIP], lm[LANDMARK.INDEX_TIP]); + const cursor = { + x: state.cursorX.filter(mid.x, tSec), + y: state.cursorY.filter(mid.y, tSec) + }; + const pinchDist = pinchDistance(lm); + const changed = state.pinch.update(pinchDist); + const gesture = gestures[i2]?.[0]?.categoryName ?? null; + const sx = (1 - cursor.x) * rect.width; + const sy = cursor.y * rect.height; + state.lastX = sx; + state.lastY = sy; + const pointer = { hand: label, x: sx, y: sy }; + if (state.pinch.isPinching) { + this.emit(changed ? "grab" : "drag", pointer); + } else if (changed) { + this.emit("drop", pointer); + } + hands.push({ + handedness: label, + cursor, + pinchDist, + pinching: state.pinch.isPinching, + gesture: gesture && gesture !== "None" ? gesture : null + }); + } + for (const key of [...this.handStates.keys()]) { + if (activeKeys.has(key)) continue; + const stale = this.handStates.get(key); + if (stale.pinch.isPinching) { + this.emit("drop", { hand: stale.label, x: stale.lastX, y: stale.lastY }); + } + this.handStates.delete(key); + } + const commandGestures = /* @__PURE__ */ new Set(); + for (const h2 of hands) { + if (!h2.pinching && h2.gesture) commandGestures.add(h2.gesture); + } + for (const name of this.commands.update(commandGestures, ts2)) { + this.emit("command", { name }); + } + this.emit("status", { + fps: this.fps, + hands, + haltProgress: this.commands.haltProgress(ts2) + }); + this.emit("results", { result, timestampMs: ts2 }); + } +}; + +// src/codeman/entry.ts +var TAB_SELECTOR = ".session-tab"; +var Z2 = 2147483e3; +var handColor = (handedness, pinching) => pinching ? "#4ade80" : handedness === "Right" ? "#a78bfa" : "#38bdf8"; +var GestureBridge = class { + constructor() { + __publicField(this, "surface"); + __publicField(this, "canvas"); + __publicField(this, "ctx"); + __publicField(this, "video"); + __publicField(this, "button"); + __publicField(this, "status"); + __publicField(this, "gc"); + __publicField(this, "running", false); + /** Per-hand id of the session tab grabbed at pinch-start (detached on drop). */ + __publicField(this, "grabbedByHand", /* @__PURE__ */ new Map()); + injectStyles(); + this.surface = el("div", "cg-surface"); + this.canvas = el("canvas", "cg-canvas"); + this.video = el("video", "cg-preview"); + this.video.muted = true; + this.video.playsInline = true; + const dock = el("div", "cg-dock"); + this.button = el("button", "cg-btn"); + this.button.textContent = "\u{1F590} Gesture"; + this.status = el("span", "cg-status"); + this.status.textContent = "off"; + dock.append(this.button, this.status); + document.body.append(this.surface, this.canvas, this.video, dock); + this.ctx = this.canvas.getContext("2d"); + this.sizeCanvas(); + window.addEventListener("resize", () => this.sizeCanvas()); + this.gc = new GestureController({ + video: this.video, + surface: this.surface, + numHands: 1 + }); + this.gc.on("grab", (p2) => this.onGrab(p2.hand, p2.x, p2.y)); + this.gc.on("drag", (p2) => this.onDrag(p2.hand, p2.x, p2.y)); + this.gc.on("drop", (p2) => this.onDrop(p2.hand)); + this.gc.on("status", ({ fps, hands }) => this.onStatus(fps, hands)); + this.button.addEventListener("click", () => void this.toggle()); + } + async toggle() { + if (this.running) { + this.gc.stop(); + this.running = false; + this.grabbedByHand.clear(); + this.clearHighlights(); + this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); + this.button.classList.remove("on"); + this.status.textContent = "off"; + return; + } + this.button.disabled = true; + this.status.textContent = "starting\u2026"; + try { + await this.gc.start(); + this.running = true; + this.button.classList.add("on"); + this.status.textContent = "on \u2014 pinch a tab"; + } catch (err) { + this.status.textContent = `failed: ${err.message}`; + console.error("[gesture] start failed", err); + } finally { + this.button.disabled = false; + } + } + /** Tab element at a viewport point (our overlays are click-through). */ + tabAt(x2, y2) { + const hit = document.elementFromPoint(x2, y2); + return hit?.closest(TAB_SELECTOR) ?? null; + } + onGrab(hand, x2, y2) { + const tab = this.tabAt(x2, y2); + const id = tab?.dataset.id; + if (id) { + this.grabbedByHand.set(hand, id); + tab.classList.add("cg-grabbed"); + } + } + onDrag(hand, _x, _y) { + } + onDrop(hand) { + const id = this.grabbedByHand.get(hand); + this.grabbedByHand.delete(hand); + if (!id) return; + document.querySelector(`${TAB_SELECTOR}[data-id="${cssEscape(id)}"]`)?.classList.remove("cg-grabbed"); + const app = window.app; + if (app?.detachSession) { + app.detachSession(id); + this.flash(`detached`); + } else { + this.flash("app.detachSession unavailable"); + console.warn("[gesture] window.app.detachSession not found"); + } + } + onStatus(fps, hands) { + const { width, height } = this.canvas; + const dpr = window.devicePixelRatio || 1; + this.ctx.clearRect(0, 0, width, height); + const rect = this.surface.getBoundingClientRect(); + for (const h2 of hands) { + const x2 = (1 - h2.cursor.x) * rect.width; + const y2 = h2.cursor.y * rect.height; + this.ctx.beginPath(); + this.ctx.arc(x2 * dpr, y2 * dpr, (h2.pinching ? 14 : 9) * dpr, 0, Math.PI * 2); + this.ctx.fillStyle = handColor(h2.handedness, h2.pinching); + this.ctx.globalAlpha = 0.85; + this.ctx.fill(); + this.ctx.globalAlpha = 1; + } + if (this.running) this.status.textContent = `on \xB7 ${fps}fps`; + } + flash(msg) { + this.status.textContent = msg; + } + clearHighlights() { + document.querySelectorAll(`${TAB_SELECTOR}.cg-grabbed`).forEach((t2) => t2.classList.remove("cg-grabbed")); + } + sizeCanvas() { + const dpr = window.devicePixelRatio || 1; + this.canvas.width = Math.floor(window.innerWidth * dpr); + this.canvas.height = Math.floor(window.innerHeight * dpr); + } +}; +function el(tag, className) { + const node = document.createElement(tag); + node.className = className; + return node; +} +function cssEscape(s2) { + const cssApi = window.CSS; + return cssApi?.escape ? cssApi.escape(s2) : s2.replace(/["\\]/g, "\\$&"); +} +function injectStyles() { + if (document.getElementById("cg-styles")) return; + const css = ` + .cg-surface, .cg-canvas { position: fixed; inset: 0; pointer-events: none; } + .cg-surface { z-index: ${Z2}; } + .cg-canvas { z-index: ${Z2 + 1}; width: 100vw; height: 100vh; } + .cg-preview { + position: fixed; right: 12px; bottom: 12px; width: 200px; height: 112px; + object-fit: cover; transform: scaleX(-1); border-radius: 8px; z-index: ${Z2 + 2}; + box-shadow: 0 4px 16px rgba(0,0,0,.5); pointer-events: none; background: #000; + } + .cg-dock { + position: fixed; right: 12px; bottom: 132px; z-index: ${Z2 + 3}; + display: flex; align-items: center; gap: 8px; font: 12px/1 system-ui, sans-serif; + } + .cg-btn { + padding: 6px 12px; border-radius: 6px; border: 1px solid #3a3a40; + background: #1b1b1f; color: #e5e5e7; cursor: pointer; + } + .cg-btn.on { background: #16331f; border-color: #2f6b41; color: #4ade80; } + .cg-status { color: #9aa0a6; } + .session-tab.cg-grabbed { outline: 2px solid #4ade80; outline-offset: -2px; } + `; + const style = document.createElement("style"); + style.id = "cg-styles"; + style.textContent = css; + document.head.append(style); +} +if (!window.__codemanGesture) { + window.__codemanGesture = new GestureBridge(); +} diff --git a/src/web/server.ts b/src/web/server.ts index e3f8b6d9..198f1c63 100644 --- a/src/web/server.ts +++ b/src/web/server.ts @@ -1007,6 +1007,13 @@ export class WebServer extends EventEmitter { const safeId = JSON.stringify(soloSessionId).replace(/', `\n`); } + // Gesture-control overlay (Phase 5): dashboard only (not solo popups, which + // have no tab strip), opt-in via CODEMAN_GESTURE=1. The bundle is served + // same-origin from /gesture/ so 'self' covers it; CSP is widened to match in + // registerSecurityHeaders under the same flag. + if (!soloSessionId && process.env.CODEMAN_GESTURE === '1') { + html = html.replace('', `\n`); + } return html; }