ideawave 0.0.62 → 0.0.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.mjs +19 -19
- package/package.json +2 -2
package/dist/index.mjs
CHANGED
|
@@ -1,48 +1,48 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{createRequire as a3}from"node:module";var i3=a3(import.meta.url);function p3(){let Z=globalThis.performance?.now?.()??Date.now();return Math.round(Z*10)/10}function m(Z,Q={}){if(typeof process<"u"&&process.env.IDEAWAVE_AGENT_RUNTIME_TRACE==="0")return;let X=Object.fromEntries(Object.entries(Q).filter(([,K])=>K!==void 0));console.info("[agent-runtime-trace]",JSON.stringify({event:Z,epochMs:Date.now(),monotonicMs:p3(),...typeof document>"u"?{}:{visibility:document.visibilityState},...X}))}var s3=600000,r3=60000,y6=200,o3=2,u=new Map,F0=null;function n3(Z){Z.then((Q)=>Q.dispose()).catch(()=>{return})}function L1(Z){for(let Q of Z.idleWaiters)Q();Z.idleWaiters.clear()}function x0(Z,Q){if(u.get(Z)!==Q)return;u.delete(Z),L1(Q),n3(Q.sessionPromise)}function t3(){if(F0!==null)return;F0=setInterval(()=>{let Z=Date.now();for(let[Q,X]of u){if(X.inUse)continue;if(Z-X.lastUsed<s3)continue;x0(Q,X)}if(u.size===0&&F0!==null)clearInterval(F0),F0=null},r3),F0.unref?.()}function e3(){if(u.size<y6)return;let Z=null,Q=1/0;for(let[K,Y]of u){if(Y.inUse)continue;if(Y.lastUsed>=Q)continue;Z=K,Q=Y.lastUsed}if(!Z)return;let X=u.get(Z);if(!X)return;x0(Z,X)}function Z7(){let Z=0;while(u.size>y6){let Q=null,X=null;for(let[K,Y]of u){if(Y.inUse)continue;if(X&&Y.lastUsed>=X.lastUsed)continue;Q=K,X=Y}if(!Q||!X)break;x0(Q,X),Z+=1}if(Z>0)m("session_pool.global_idle_trimmed",{evictedSessions:Z,poolEntries:u.size})}function Q7(Z){let Q=Array.from(u.entries()).filter(([,K])=>K.frontendSessionId===Z&&!K.inUse).sort(([,K],[,Y])=>K.lastUsed-Y.lastUsed),X=Q.length-o3;if(X<=0)return;for(let[K,Y]of Q.slice(0,X))x0(K,Y);m("session_pool.frontend_idle_trimmed",{frontendSessionId:Z,evictedSessions:X,poolEntries:u.size})}function Y4(Z,Q,X){return`${Z}:${Q}:${X}`}async function P1(Z){let Q=u.get(Z.key);if(Q){if(Q.inUse)return m("session_pool.wait_for_idle",{frontendSessionId:Q.frontendSessionId,poolEntries:u.size}),await new Promise((K)=>Q.idleWaiters.add(K)),P1(Z);if(Q.fingerprint===Z.fingerprint){Q.inUse=!0,Q.lastUsed=Date.now();try{let K=await Q.sessionPromise;if(K.isAlive()){if(Q.frontendSessionId)m("session_pool.reuse",{frontendSessionId:Q.frontendSessionId,poolEntries:u.size});return K}}catch{}x0(Z.key,Q)}else x0(Z.key,Q)}let X=Z.open();if(e3(),u.set(Z.key,{key:Z.key,frontendSessionId:Z.frontendSessionId??null,fingerprint:Z.fingerprint,sessionPromise:X,lastUsed:Date.now(),inUse:!0,idleWaiters:new Set}),t3(),Z.frontendSessionId)m("session_pool.open",{frontendSessionId:Z.frontendSessionId,poolEntries:u.size});try{return await X}catch(K){let Y=u.get(Z.key);if(Y?.sessionPromise===X)x0(Z.key,Y);throw K}}function W4(Z,Q=!1){let X=u.get(Z);if(!X)return;if(Q){x0(Z,X);return}if(X.inUse=!1,X.lastUsed=Date.now(),X.frontendSessionId)Q7(X.frontendSessionId),m("session_pool.release",{frontendSessionId:X.frontendSessionId,poolEntries:u.size});if(Z7(),u.get(Z)===X)L1(X)}async function f6(Z){let Q=Array.from(u.entries()).filter(([,X])=>X.frontendSessionId===Z);for(let[X,K]of Q)u.delete(X),L1(K);return await Promise.all(Q.map(([,X])=>X.sessionPromise.then((K)=>K.dispose()).catch(()=>{return}))),m("session_pool.frontend_evicted",{frontendSessionId:Z,evictedSessions:Q.length,poolEntries:u.size}),Q.length}async function X7(){let Z=Array.from(u.values());u.clear();for(let Q of Z)L1(Q);if(F0!==null)clearInterval(F0),F0=null;await Promise.all(Z.map((Q)=>Q.sessionPromise.then((X)=>X.dispose()).catch(()=>{return})))}function V4(Z){let Q=Object.entries(Z.configValues??{}),X=Q.length>0?JSON.stringify(Object.fromEntries(Q.sort(([K],[Y])=>K.localeCompare(Y)))):"";return[Z.adapterId,Z.configId??"",Z.modelId??"",X,Z.mcpUrl??"",Z.runFolder??"",Z.toolSurface??"full"].join(" ")}var R6=!1;function J7(){if(R6)return;R6=!0;let Z=()=>{X7()};process.once("beforeExit",Z),process.once("SIGTERM",Z),process.once("SIGINT",Z)}J7();import{readFileSync as W7}from"node:fs";import{homedir as K7}from"node:os";import{join as x1}from"node:path";function Y7(){let Z=K7();switch(process.platform){case"win32":return process.env.APPDATA??x1(Z,"AppData","Roaming");case"darwin":return x1(Z,"Library","Application Support");default:return process.env.XDG_CONFIG_HOME??x1(Z,".config")}}function h6(){let Z=process.env.IDEAWAVE_MCP_JSON_PATH;if(Z&&Z.trim().length>0)return Z;return x1(Y7(),"ideawave","mcp.json")}var N6=null;function D6(Z){N6=Z}var V7=86400000;function H7(){let Z;try{Z=W7(h6(),"utf8")}catch{return null}let Q;try{Q=JSON.parse(Z)}catch{return null}if(typeof Q.url!=="string")return null;if(typeof Q.startedAt==="string"){let X=Date.parse(Q.startedAt);if(!Number.isNaN(X)){if(Date.now()-X>V7)return null}}if(typeof Q.pid==="number"&&Q.pid>0)try{process.kill(Q.pid,0)}catch(X){if(X?.code!=="EPERM")return null}return{url:Q.url}}function M6(Z,Q={}){let X=[];if(Q.userId&&Q.userId.trim().length>0)X.push({name:"X-Ideawave-User-Id",value:Q.userId.trim()});if(Q.frontendSessionId&&Q.frontendSessionId.trim().length>0)X.push({name:"X-Ideawave-Frontend-Session-Id",value:Q.frontendSessionId.trim()});if(Q.toolSurface==="read")X.push({name:"X-Ideawave-Tool-Surface",value:"read"});if(Q.imagesSupported)X.push({name:"X-Ideawave-Images-Supported",value:"1"});if(Q.cardId&&Q.cardId.trim().length>0)X.push({name:"X-Ideawave-Card-Id",value:Q.cardId.trim()});if(Q.boardId&&Q.boardId.trim().length>0)X.push({name:"X-Ideawave-Board-Id",value:Q.boardId.trim()});if(Q.runFolder&&Q.runFolder.trim().length>0)X.push({name:"X-Ideawave-Run-Folder",value:Q.runFolder.trim()});return{type:"http",name:"ideawave-board",url:Z,headers:X}}function H4(Z={}){let Q=N6;if(Q)return M6(Q.url,Z);let X=H7();if(!X)return null;return M6(X.url,Z)}var $6="browser-proxy-v2",G6="browser-proxy-v3",j7=new Set(["hello","frontend_hello","cli_status","browser_status","bridge_probe","bridge_probe_ack","bridge_ping","bridge_pong","tool_metadata","run_turn","cancel_run","tool_result","request_tool_metadata","tool_call","partial_text","tool_activity","run_settled","runtime_rpc","runtime_rpc_result","browser_rpc","browser_rpc_result","warmup_run","warmup_result"]);function b1(Z){try{let Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&typeof Q.type==="string"&&j7.has(Q.type))return Q}catch{}return null}function O1(Z){return JSON.stringify(Z)}import i0 from"node:fs/promises";import F7 from"node:path";import{z as h}from"zod";var g6=h.object({id:h.string(),name:h.string().nullable().default(null),description:h.string().nullable().default(null)}),k6=h.union([h.string(),h.boolean()]),z7=h.object({value:h.string(),name:h.string(),description:h.string().nullable().default(null),group:h.string().nullable().default(null),groupName:h.string().nullable().default(null)}),E6=h.object({id:h.string(),name:h.string(),category:h.string().nullable().default(null),description:h.string().nullable().default(null),type:h.enum(["select","boolean"]),currentValue:k6.nullable().default(null),options:h.array(z7).default([])}),j4=h.record(h.string(),k6).default({}),q7=h.discriminatedUnion("kind",[h.object({id:h.string(),kind:h.literal("registered"),adapterId:h.enum(["claude-code","opencode","codex","copilot"]),displayName:h.string(),runFolder:h.string().nullable(),defaultModelId:h.string().nullable().default(null),defaultConfigValues:j4,discoveredModels:h.array(g6).default([]),discoveredConfigOptions:h.array(E6).default([]),discoveredAt:h.string().nullable().default(null)}),h.object({id:h.string(),kind:h.literal("custom"),displayName:h.string(),command:h.string(),args:h.array(h.string()),env:h.record(h.string(),h.string()),runFolder:h.string().nullable(),defaultModelId:h.string().nullable().default(null),defaultConfigValues:j4,discoveredModels:h.array(g6).default([]),discoveredConfigOptions:h.array(E6).default([]),discoveredAt:h.string().nullable().default(null)})]),m6=h.object({runtimeConfigId:h.string(),runFolder:h.string().nullable(),modelId:h.string().nullable().default(null),configValues:j4}),C1=h.object({version:h.literal(1),globalDefaultConfigId:h.string().nullable(),runtimes:h.array(q7),boardOverrides:h.record(h.string(),m6).default({}),cardOverrides:h.record(h.string(),m6).default({})});import U7 from"node:os";import v1 from"node:path";function B7(){let Z=U7.homedir();switch(process.platform){case"win32":return process.env.APPDATA??v1.join(Z,"AppData","Roaming");case"darwin":return v1.join(Z,"Library","Application Support");default:return process.env.XDG_CONFIG_HOME??v1.join(Z,".config")}}function R1(){let Z=process.env.IDEAWAVE_RUNTIME_CONFIG_PATH;if(Z)return Z;return v1.join(B7(),"ideawave","runtimes.json")}var w7={version:1,globalDefaultConfigId:null,runtimes:[],boardOverrides:{},cardOverrides:{}},_6=new Map;function L7(Z){return _6.get(Z)??Promise.resolve()}function P7(Z,Q){_6.set(Z,Q)}async function J0(Z){let Q=Z??R1(),X;try{X=await i0.readFile(Q,"utf-8")}catch(Y){if(Y.code==="ENOENT")return structuredClone(w7);throw Y}return C1.parse(JSON.parse(X))}async function V0(Z,Q){let X=Q??R1(),K=L7(X).then(async()=>{let Y=await J0(X),W=structuredClone(Y),z=await Z(W);return await x7(W,X),z});return P7(X,K.catch(()=>{return})),K}async function x7(Z,Q){let X=Q??R1(),K=F7.dirname(X);await i0.mkdir(K,{recursive:!0});let Y=`${X}.tmp.${process.pid}.${Math.random().toString(36).slice(2)}`,W=JSON.stringify(Z,null,2);await i0.writeFile(Y,W,"utf-8");try{await i0.rename(Y,X)}catch(z){throw await i0.unlink(Y).catch(()=>{return}),z}}import{spawn as N7}from"node:child_process";import{closeSync as D7,existsSync as A6,mkdirSync as l6,openSync as $7,readFileSync as G7,renameSync as g7,rmSync as c6,statSync as E7,unlinkSync as m7,writeFileSync as k7}from"node:fs";import u6 from"node:os";import $0 from"node:path";var b7=/\.(?:cmd|bat)$/i;function O7(Z){return process.platform==="win32"&&b7.test(Z)}function y1(Z){return O7(Z)?{shell:!0,windowsHide:!0}:{}}import{execFile as h7}from"node:child_process";import{promisify as M7}from"node:util";import{execFile as C7}from"node:child_process";import{promisify as v7}from"node:util";var R7=v7(C7),z4=new Map,S6=5000,y7=/\.(?:cmd|bat|com|exe)$/i;function f7(Z){let Q=Z.split(/\r?\n/).map((X)=>X.trim()).filter((X)=>X.length>0);if(Q.length===0)return null;if(process.platform!=="win32")return Q[0]??null;return Q.find((X)=>y7.test(X))??Q[0]??null}async function I6(Z,Q=R7){let X=z4.get(Z);if(X&&X.expiresAt>Date.now())return X.value;let K=process.platform==="win32"?"where":"which";try{let{stdout:Y}=await Q(K,[Z],{timeout:2000}),W=f7(Y);return z4.set(Z,{value:W,expiresAt:Date.now()+S6}),W}catch{return z4.set(Z,{value:null,expiresAt:Date.now()+S6}),null}}class p0 extends Error{code;constructor(Z,Q){super(Z);this.name="AcpError",this.code=Q}}class D0 extends p0{constructor(Z="No ACP runtime configured"){super(Z,"RUNTIME_NOT_CONFIGURED");this.name="RuntimeNotConfiguredError"}}class S extends p0{constructor(Z){super(Z,"RUNTIME_UNREACHABLE");this.name="RuntimeUnreachableError"}}class I0 extends p0{authMethods;constructor(Z,Q){super(Z,"AUTH_REQUIRED");this.name="AuthRequiredError",this.authMethods=Q}}class q0 extends p0{constructor(Z="ACP session timed out"){super(Z,"SESSION_TIMEOUT");this.name="SessionTimeoutError"}}var OJ=M7(h7);function d(Z,...Q){return I6(Z,...Q)}function X0(Z){let Q={};for(let[X,K]of Object.entries(process.env))if(typeof K==="string")Q[X]=K;return{...Q,...Z??{}}}var U4=[{adapterId:"claude-code",runtimeBinary:"claude",packageName:"@agentclientprotocol/claude-agent-acp",version:"0.50.0",warmupArgs:["--cli","--help"]},{adapterId:"codex",runtimeBinary:"codex",packageName:"@agentclientprotocol/codex-acp",version:"1.0.2",warmupArgs:["--version"]}],_7=1800000,f1=new Map;function B4(){if(process.env.IDEAWAVE_ACP_BRIDGE_CACHE_DIR)return process.env.IDEAWAVE_ACP_BRIDGE_CACHE_DIR;if(process.platform==="win32"){let Z=process.env.LOCALAPPDATA??$0.join(u6.homedir(),"AppData","Local");return $0.join(Z,"ideawave","acp-bridges")}return $0.join(process.env.XDG_CACHE_HOME??$0.join(u6.homedir(),".cache"),"ideawave","acp-bridges")}function S7(Z){return Z.replace(/^@/,"").replace(/[/\\]/g,"-")}function h1(){return $0.join(B4(),"install-state.json")}function F4(Z){return $0.join(B4(),`${S7(Z.packageName)}@${Z.version}.install.lock`)}function w4(){return process.platform==="win32"?"npx.cmd":"npx"}function L4(Z){return`${Z.packageName}@${Z.version}`}function d6(){let Z=h1();if(!A6(Z))return{};try{return JSON.parse(G7(Z,"utf8"))}catch{return{}}}function q4(Z,Q){let X=B4();l6(X,{recursive:!0});let K=d6();K.bridges={...K.bridges??{},[Z.adapterId]:Q},k7(`${h1()}.tmp`,`${JSON.stringify(K,null,2)}
|
|
3
|
-
`),g7(`${h1()}.tmp`,h1())}function a6(Z){return U4.find((Q)=>Q.packageName===Z)??null}function K0(Z,Q,X){return{adapterId:Z.adapterId,packageName:Z.packageName,version:Z.version,status:Q,...X?{error:X}:{}}}function T6(Z,Q){return Q?.packageName===Z.packageName&&Q.version===Z.version}function i6(Z){try{return Date.now()-E7(Z).mtimeMs>_7}catch{return!1}}function I7(Z){let Q=F4(Z);if(!A6(Q))return!1;if(i6(Q))return c6(Q,{force:!0}),!1;return!0}function u7(Z){let Q=F4(Z);if(l6($0.dirname(Q),{recursive:!0}),i6(Q))c6(Q,{force:!0});try{let X=$7(Q,"wx");return D7(X),!0}catch{return!1}}function T7(Z){m7(F4(Z))}function P4(Z){let Q=d6().bridges?.[Z.adapterId];if(T6(Z,Q)&&Q.status==="ready")return K0(Z,"ready");if(f1.has(Z.adapterId)||I7(Z))return K0(Z,"installing");if(T6(Z,Q)&&Q.status==="failed")return K0(Z,"failed",Q.error);return K0(Z,"missing")}function s0(Z,Q){Z?.onStatusChange?.(Q)}function A7(Z,Q){let X=P4(Z);if(X.status==="ready")return s0(Q,X),X;if(X.status==="installing"){let q=f1.get(Z.adapterId);if(q&&Q?.onStatusChange)q.then((b)=>s0(Q,b));return s0(Q,X),X}if(!u7(Z))return K0(Z,"installing");let K=K0(Z,"installing");q4(Z,K),s0(Q,K);let Y=()=>{},W=new Promise((q)=>{Y=q});f1.set(Z.adapterId,W);let z=!1,B=(q)=>{if(z)return;z=!0;try{T7(Z)}catch{}q4(Z,q),s0(Q,q),f1.delete(Z.adapterId),Y(q)},w;try{let q=w4();w=N7(q,["-y",L4(Z),...Z.warmupArgs],{stdio:"ignore",windowsHide:!0,...y1(q)})}catch(q){let b=K0(Z,"failed",q instanceof Error?q.message:String(q));return B(b),b}return w.on("error",(q)=>{B(K0(Z,"failed",q.message))}),w.on("close",(q)=>{if(q===0){B(K0(Z,"ready"));return}B(K0(Z,"failed",`npx warmup exited ${q??"null"}`))}),w.unref(),K}function u0(Z){let Q=a6(Z);return Q?P4(Q):null}async function p6(Z){let Q=[];for(let X of U4){if(!await d(X.runtimeBinary)){Q.push(K0(X,"not_needed"));continue}Q.push(A7(X,Z))}return Q.filter((X)=>X.status!=="not_needed")}function M1(Z){let Q=a6(Z);if(!Q)return null;if(P4(Q).status!=="ready")return null;return{command:w4(),args:["-y",L4(Q)],env:{}}}function x4(Z,Q){if(Z.command!==w4())return!1;let X=U4.find((K)=>Z.args.includes(L4(K)));if(!X)return!1;return q4(X,K0(X,"failed",Q)),!0}var s6="claude",b4="@agentclientprotocol/claude-agent-acp",r6=["claude-agent-acp","claude-code-acp"],o6="Install Claude Code from https://github.com/anthropics/claude-code",n6={id:"claude-code",displayName:"Claude Code",kind:"registered",supportsImages:!0,resolveSpawnConfig:async()=>{if(!await d(s6))throw new S(`Claude Code CLI not found. ${o6}`);let Q=M1(b4);if(Q)return{command:Q.command,args:Q.args,env:X0(Q.env)};let X=u0(b4),K=X?.status==="installing";for(let W of r6){let z=await d(W);if(z&&!K&&X?.status!=="failed")return{command:z,args:[],env:X0()}}let Y=X?.status==="failed"?`Claude Code ACP bridge install failed. ${X.error??"Restart IdeaWave CLI so it can warm the pinned bridge again."}`:"Claude Code ACP bridge is not ready. Keep IdeaWave CLI running and retry in a moment.";throw new S(Y)},checkReadiness:async()=>{if(!await d(s6))return{status:"not_installed",detail:o6};let Q=u0(b4);if(Q?.status==="ready")return{status:"ready"};if(Q?.status==="installing")return{status:"not_running",detail:"Installing Claude Code ACP bridge..."};if(Q?.status==="failed")return{status:"not_running",detail:Q.error??"Claude Code ACP bridge install failed. Restart IdeaWave CLI so it can warm the pinned bridge again."};for(let X of r6)if(await d(X))return{status:"ready"};return{status:"not_running",detail:"Installing Claude Code ACP bridge..."}},authHint:"Run `claude login` (or set ANTHROPIC_API_KEY)."};var t6="codex",O4="@agentclientprotocol/codex-acp",e6="codex-acp",Z2="Install Codex CLI from https://developers.openai.com/codex/cli",Q2={id:"codex",displayName:"Codex",kind:"registered",resolveSpawnConfig:async()=>{if(!await d(t6))throw new S(`Codex CLI not found. ${Z2}`);let Q=M1(O4);if(Q)return{command:Q.command,args:Q.args,env:X0(Q.env)};let X=u0(O4),K=X?.status==="installing",Y=await d(e6);if(Y&&!K&&X?.status!=="failed")return{command:Y,args:[],env:X0()};let W=X?.status==="failed"?`Codex ACP bridge install failed. ${X.error??"Restart IdeaWave CLI so it can warm the pinned bridge again."}`:"Codex ACP bridge is not ready. Keep IdeaWave CLI running and retry in a moment.";throw new S(W)},checkReadiness:async()=>{if(!await d(t6))return{status:"not_installed",detail:Z2};let Q=u0(O4);if(Q?.status==="ready")return{status:"ready"};if(Q?.status==="installing")return{status:"not_running",detail:"Installing Codex ACP bridge..."};if(Q?.status==="failed")return{status:"not_running",detail:Q.error??"Codex ACP bridge install failed. Restart IdeaWave CLI so it can warm the pinned bridge again."};if(await d(e6))return{status:"ready"};return{status:"not_running",detail:"Installing Codex ACP bridge..."}},authHint:"Run `codex login` (or set OPENAI_API_KEY)."};var X2="copilot",J2="copilot-acp",K2="npm i -g @github/copilot",Y2={id:"copilot",displayName:"GitHub Copilot",kind:"registered",resolveSpawnConfig:async()=>{let Z=await d(X2);if(Z)return{command:Z,args:["--acp"],env:X0()};let Q=await d(J2);if(Q)return{command:Q,args:[],env:X0()};throw new S(`Copilot not installed. Run: ${K2}`)},checkReadiness:async()=>{if(await d(X2))return{status:"ready"};if(await d(J2))return{status:"ready"};return{status:"not_installed",detail:K2}},authHint:"Run `gh auth login` (or `copilot login`)."};import l7 from"node:fs/promises";function c7(Z){return Z.startsWith("/")||/^[a-zA-Z]:[\\/]/.test(Z)}async function W2(Z){if(c7(Z))try{return await l7.access(Z),!0}catch{return!1}return await d(Z)!==null}var V2={id:"custom",displayName:"Custom ACP",kind:"custom",resolveSpawnConfig:async(Z)=>{if(Z.kind!=="custom")throw new S("customAdapter received non-custom entry");if(!await W2(Z.command))throw new S(`custom: command "${Z.command}" not found`);return{command:Z.command,args:Z.args,env:X0(Z.env)}},checkReadiness:async(Z)=>{if(Z.kind!=="custom")return{status:"unknown"};return await W2(Z.command)?{status:"ready"}:{status:"not_installed"}}};var H2="opencode",j2="Install OpenCode from https://opencode.ai",z2={id:"opencode",displayName:"OpenCode",kind:"registered",resolveSpawnConfig:async()=>{let Z=await d(H2);if(!Z)throw new S(`OpenCode not installed. ${j2}`);return{command:Z,args:["acp"],env:X0()}},checkReadiness:async()=>{if(!await d(H2))return{status:"not_installed",detail:j2};return{status:"ready"}},authHint:"Run `opencode auth login <provider>` (or set the provider's API-key env var)."};var q2={"claude-code":n6,opencode:z2,codex:Q2,copilot:Y2};function U0(Z){if(Z.kind==="custom")return V2;let Q=q2[Z.adapterId];if(!Q)throw Error(`Unknown registered adapter: ${Z.adapterId}`);return Q}function T0(){return Object.values(q2)}var C4=new Map,N1=new Map,d7=30000;function D1(Z,Q){let X=C4.get(Z);if(X&&X.expiresAt>Date.now())return Promise.resolve(X.value);let K=N1.get(Z);if(K)return K;let Y=Q().then((W)=>{return C4.set(Z,{value:W,expiresAt:Date.now()+d7}),W}).finally(()=>{N1.delete(Z)});return N1.set(Z,Y),Y}async function U2(Z){let Q=await Promise.all(T0().map((W)=>D1(W.id,async()=>({adapterId:W.id,...await W.checkReadiness({id:"__probe__",kind:"registered",adapterId:W.id,displayName:W.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null})})))),K=(await J0(Z)).runtimes.filter((W)=>W.kind==="custom"),Y=await Promise.all(K.map((W)=>D1(`custom:${W.id}`,async()=>({adapterId:W.id,...await U0(W).checkReadiness(W)}))));return[...Q,...Y]}async function B2(Z,Q){let X=T0().find((W)=>W.id===Z);if(X)return D1(X.id,async()=>({adapterId:X.id,...await X.checkReadiness({id:"__probe__",kind:"registered",adapterId:X.id,displayName:X.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null})}));let Y=(await J0(Q)).runtimes.find((W)=>W.id===Z);if(!Y||Y.kind!=="custom")return null;return D1(`custom:${Y.id}`,async()=>({adapterId:Y.id,...await U0(Y).checkReadiness(Y)}))}function F2(){C4.clear(),N1.clear()}function a7(Z){if(!Z)return null;let Q=Z.indexOf("/");if(Q<=0)return null;return Z.slice(0,Q)}function $1(Z){let Q=[...Z.models];if(Z.adapterId!=="opencode"||Q.length===0)return Q;let X=a7(Z.currentModelId)??(Q.some((Y)=>Y.id.startsWith("opencode/"))?"opencode":null);if(!X)return Q;let K=Q.filter((Y)=>Y.id===Z.currentModelId||Y.id.startsWith(`${X}/`));return K.length>0?K:Q}import{Readable as V9,Writable as H9}from"node:stream";import{ClientSideConnection as f2,ndJsonStream as h2}from"@agentclientprotocol/sdk";import b0 from"node:fs/promises";import Q0 from"node:path";class o0 extends Error{constructor(Z){super(Z);this.name="PathTraversalError"}}class R4 extends Error{constructor(Z){super(Z);this.name="HiddenPathError"}}class y4 extends Error{constructor(Z){super(Z);this.name="RunFolderFileTooLargeError"}}class r0 extends Error{constructor(Z){super(Z);this.name="RunFolderBinaryFileError"}}var i7=new Set([".bzr",".cache",".claude",".config",".env",".git",".hg",".idea",".obsidian",".svn",".vscode","node_modules"]),w2=1e6,p7=4096,s7=new TextDecoder("utf-8",{fatal:!0});function r7(Z){return Z.split(/[\\/]+/).filter((Q)=>Q.length>0)}function G1(Z){if(Q0.isAbsolute(Z))throw new o0("Absolute paths are not allowed");for(let Q of r7(Z)){if(Q===".")continue;if(Q==="..")throw new o0("Parent-directory traversal is not allowed");if(Q.startsWith(".")||i7.has(Q))throw new R4(`Path segment "${Q}" is hidden or configuration data`)}}function o7(Z){G1(Z);let Q=Q0.normalize(Z||".");return Q==="."?"":Q}function n7(Z,Q,X){let K=Q0.relative(Z,Q);if(K===".."||K.startsWith(`..${Q0.sep}`)||Q0.isAbsolute(K))throw new o0(`Path "${X}" resolves outside the run folder`);if(K.length>0)G1(K);return K}async function v4(Z,Q){G1(Q);let X=Q0.resolve(Z,Q||"."),K;try{K=await b0.realpath(X)}catch(Y){if(Y.code!=="ENOENT")throw Y;let W=Q0.dirname(X),z=[Q0.basename(X)];while(W!==Z&&W!==Q0.dirname(W))try{W=await b0.realpath(W);break}catch(B){if(B.code!=="ENOENT")throw B;z.unshift(Q0.basename(W)),W=Q0.dirname(W)}K=Q0.join(W,...z)}return n7(Z,K,Q),K}async function t7(Z,Q){let X=await b0.realpath(Z);return v4(X,Q)}function e7(Z){let Q=Z.subarray(0,Math.min(Z.length,p7));if(Q.length===0)return!1;let X=0;for(let K of Q){if(K===0)return!0;let Y=K===9||K===10||K===12||K===13;if(K<32&&!Y)X+=1}return X/Q.length>0.3}async function g1(Z,Q){let X=await t7(Z,Q),K=await b0.stat(X);if(!K.isFile())throw new r0(`Path "${Q}" is not a text file`);if(K.size>w2)throw new y4(`File "${Q}" is too large to read (${K.size} bytes, max ${w2} bytes)`);let Y=await b0.readFile(X);if(e7(Y))throw new r0(`File "${Q}" appears to be binary, not text`);try{return s7.decode(Y)}catch{throw new r0(`File "${Q}" is not valid UTF-8 text`)}}function Z9(Z){if(Z.isDirectory())return"directory";if(Z.isFile())return"file";if(Z.isSymbolicLink())return"symlink";return"other"}function L2(Z){return Z.split(Q0.sep).join("/")}async function P2(Z,Q=""){let X=await b0.realpath(Z),K=o7(Q),Y=await v4(X,K),W=await b0.readdir(Y,{withFileTypes:!0}),z=[];for(let B of W){let w=K?Q0.join(K,B.name):B.name;try{G1(w);let q=await v4(X,w),b=await b0.stat(q);z.push({name:B.name,path:L2(w),type:Z9(B),size:B.isFile()?b.size:null})}catch{}}return z.sort((B,w)=>{if(B.type==="directory"&&w.type!=="directory")return-1;if(B.type!=="directory"&&w.type==="directory")return 1;return B.name.localeCompare(w.name)}),{path:L2(K),absolutePath:Y,entries:z}}var f4={fs:{readTextFile:!0,writeTextFile:!1},terminal:!1};function x2(Z){return{readTextFile:async(Q)=>{return{content:await g1(Z,Q.path)}}}}import{spawn as Q9}from"node:child_process";function h4(Z){let Q=Q9(Z.command,Z.args,{cwd:Z.cwd,env:Z.env,stdio:["pipe","pipe","pipe"],...y1(Z.command)});if(!Q.stdin||!Q.stdout||!Q.stderr)throw Error("Failed to allocate stdio streams for ACP subprocess");let{stdin:X,stdout:K,stderr:Y}=Q,W=4096,z=[],B=0;Y.on("data",(C)=>{z.push(C),B+=C.length;while(B>W*2&&z.length>1){let N=z.shift();if(N)B-=N.length}});let w=()=>{let C=Buffer.concat(z).toString("utf8");return C.length>W?C.slice(-W):C},q=!1,b=!1,M,x,y=new Promise((C)=>{M=C}),v=new Promise((C)=>{x=C}),$=(C)=>{if(b)return;if(b=!0,M(C),!q)x(C)};return Q.on("exit",(C,N)=>{$({code:C,signal:N,stderr:w()})}),Q.on("error",(C)=>{let N=w(),f=C?.message??String(C);$({code:null,signal:null,stderr:N?`${f}
|
|
4
|
-
${
|
|
5
|
-
... truncated`}function
|
|
2
|
+
import{createRequire as R7}from"node:module";var v7=R7(import.meta.url);function y7(){let Z=globalThis.performance?.now?.()??Date.now();return Math.round(Z*10)/10}function m(Z,Q={}){if(typeof process<"u"&&process.env.IDEAWAVE_AGENT_RUNTIME_TRACE==="0")return;let X=Object.fromEntries(Object.entries(Q).filter(([,J])=>J!==void 0));console.info("[agent-runtime-trace]",JSON.stringify({event:Z,epochMs:Date.now(),monotonicMs:y7(),...typeof document>"u"?{}:{visibility:document.visibilityState},...X}))}var f7=600000,M7=60000,i6=200,N7=2,A=new Map,w0=null;function h7(Z){Z.then((Q)=>Q.dispose()).catch(()=>{return})}function f1(Z){for(let Q of Z.idleWaiters)Q();Z.idleWaiters.clear()}function b0(Z,Q){if(A.get(Z)!==Q)return;A.delete(Z),f1(Q),h7(Q.sessionPromise)}function D7(){if(w0!==null)return;w0=setInterval(()=>{let Z=Date.now();for(let[Q,X]of A){if(X.inUse)continue;if(Z-X.lastUsed<f7)continue;b0(Q,X)}if(A.size===0&&w0!==null)clearInterval(w0),w0=null},M7),w0.unref?.()}function $7(){if(A.size<i6)return;let Z=null,Q=1/0;for(let[J,Y]of A){if(Y.inUse)continue;if(Y.lastUsed>=Q)continue;Z=J,Q=Y.lastUsed}if(!Z)return;let X=A.get(Z);if(!X)return;b0(Z,X)}function G7(){let Z=0;while(A.size>i6){let Q=null,X=null;for(let[J,Y]of A){if(Y.inUse)continue;if(X&&Y.lastUsed>=X.lastUsed)continue;Q=J,X=Y}if(!Q||!X)break;b0(Q,X),Z+=1}if(Z>0)m("session_pool.global_idle_trimmed",{evictedSessions:Z,poolEntries:A.size})}function g7(Z){let Q=Array.from(A.entries()).filter(([,J])=>J.frontendSessionId===Z&&!J.inUse).sort(([,J],[,Y])=>J.lastUsed-Y.lastUsed),X=Q.length-N7;if(X<=0)return;for(let[J,Y]of Q.slice(0,X))b0(J,Y);m("session_pool.frontend_idle_trimmed",{frontendSessionId:Z,evictedSessions:X,poolEntries:A.size})}function O4(Z,Q,X){return`${Z}:${Q}:${X}`}async function M1(Z){let Q=A.get(Z.key);if(Q){if(Q.inUse)return m("session_pool.wait_for_idle",{frontendSessionId:Q.frontendSessionId,poolEntries:A.size}),await new Promise((J)=>Q.idleWaiters.add(J)),M1(Z);if(Q.fingerprint===Z.fingerprint){Q.inUse=!0,Q.lastUsed=Date.now();try{let J=await Q.sessionPromise;if(J.isAlive()){if(Q.frontendSessionId)m("session_pool.reuse",{frontendSessionId:Q.frontendSessionId,poolEntries:A.size});return J}}catch{}b0(Z.key,Q)}else b0(Z.key,Q)}let X=Z.open();if($7(),A.set(Z.key,{key:Z.key,frontendSessionId:Z.frontendSessionId??null,fingerprint:Z.fingerprint,sessionPromise:X,lastUsed:Date.now(),inUse:!0,idleWaiters:new Set}),D7(),Z.frontendSessionId)m("session_pool.open",{frontendSessionId:Z.frontendSessionId,poolEntries:A.size});try{return await X}catch(J){let Y=A.get(Z.key);if(Y?.sessionPromise===X)b0(Z.key,Y);throw J}}function b4(Z,Q=!1){let X=A.get(Z);if(!X)return;if(Q){b0(Z,X);return}if(X.inUse=!1,X.lastUsed=Date.now(),X.frontendSessionId)g7(X.frontendSessionId),m("session_pool.release",{frontendSessionId:X.frontendSessionId,poolEntries:A.size});if(G7(),A.get(Z)===X)f1(X)}async function a6(Z){let Q=Array.from(A.entries()).filter(([,X])=>X.frontendSessionId===Z);for(let[X,J]of Q)A.delete(X),f1(J);return await Promise.all(Q.map(([,X])=>X.sessionPromise.then((J)=>J.dispose()).catch(()=>{return}))),m("session_pool.frontend_evicted",{frontendSessionId:Z,evictedSessions:Q.length,poolEntries:A.size}),Q.length}async function E7(){let Z=Array.from(A.values());A.clear();for(let Q of Z)f1(Q);if(w0!==null)clearInterval(w0),w0=null;await Promise.all(Z.map((Q)=>Q.sessionPromise.then((X)=>X.dispose()).catch(()=>{return})))}function C4(Z){let Q=Object.entries(Z.configValues??{}),X=Q.length>0?JSON.stringify(Object.fromEntries(Q.sort(([J],[Y])=>J.localeCompare(Y)))):"";return[Z.adapterId,Z.configId??"",Z.modelId??"",X,Z.mcpUrl??"",Z.runFolder??"",Z.toolSurface??"full"].join(" ")}var d6=!1;function m7(){if(d6)return;d6=!0;let Z=()=>{E7()};process.once("beforeExit",Z),process.once("SIGTERM",Z),process.once("SIGINT",Z)}m7();import{readFileSync as S7}from"node:fs";import{homedir as k7}from"node:os";import{join as N1}from"node:path";function _7(){let Z=k7();switch(process.platform){case"win32":return process.env.APPDATA??N1(Z,"AppData","Roaming");case"darwin":return N1(Z,"Library","Application Support");default:return process.env.XDG_CONFIG_HOME??N1(Z,".config")}}function p6(){let Z=process.env.IDEAWAVE_MCP_JSON_PATH;if(Z&&Z.trim().length>0)return Z;return N1(_7(),"ideawave","mcp.json")}var r6=null;function o6(Z){r6=Z}var I7=86400000;function T7(){let Z;try{Z=S7(p6(),"utf8")}catch{return null}let Q;try{Q=JSON.parse(Z)}catch{return null}if(typeof Q.url!=="string")return null;if(typeof Q.startedAt==="string"){let X=Date.parse(Q.startedAt);if(!Number.isNaN(X)){if(Date.now()-X>I7)return null}}if(typeof Q.pid==="number"&&Q.pid>0)try{process.kill(Q.pid,0)}catch(X){if(X?.code!=="EPERM")return null}return{url:Q.url}}function s6(Z,Q={}){let X=[];if(Q.userId&&Q.userId.trim().length>0)X.push({name:"X-Ideawave-User-Id",value:Q.userId.trim()});if(Q.frontendSessionId&&Q.frontendSessionId.trim().length>0)X.push({name:"X-Ideawave-Frontend-Session-Id",value:Q.frontendSessionId.trim()});if(Q.toolSurface==="read")X.push({name:"X-Ideawave-Tool-Surface",value:"read"});if(Q.imagesSupported)X.push({name:"X-Ideawave-Images-Supported",value:"1"});if(Q.cardId&&Q.cardId.trim().length>0)X.push({name:"X-Ideawave-Card-Id",value:Q.cardId.trim()});if(Q.boardId&&Q.boardId.trim().length>0)X.push({name:"X-Ideawave-Board-Id",value:Q.boardId.trim()});if(Q.runFolder&&Q.runFolder.trim().length>0)X.push({name:"X-Ideawave-Run-Folder",value:Q.runFolder.trim()});return{type:"http",name:"ideawave-board",url:Z,headers:X}}function R4(Z={}){let Q=r6;if(Q)return s6(Q.url,Z);let X=T7();if(!X)return null;return s6(X.url,Z)}var n6="browser-proxy-v2",t6="browser-proxy-v3",A7=new Set(["hello","frontend_hello","cli_status","browser_status","bridge_probe","bridge_probe_ack","bridge_ping","bridge_pong","tool_metadata","run_turn","cancel_run","tool_result","request_tool_metadata","tool_call","partial_text","tool_activity","run_settled","runtime_rpc","runtime_rpc_result","browser_rpc","browser_rpc_result","warmup_run","warmup_result"]);function h1(Z){try{let Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&typeof Q.type==="string"&&A7.has(Q.type))return Q}catch{}return null}function D1(Z){return JSON.stringify(Z)}import t0 from"node:fs/promises";import i7 from"node:path";import{z as $}from"zod";var e6=$.object({id:$.string(),name:$.string().nullable().default(null),description:$.string().nullable().default(null)}),X2=$.union([$.string(),$.boolean()]),u7=$.object({value:$.string(),name:$.string(),description:$.string().nullable().default(null),group:$.string().nullable().default(null),groupName:$.string().nullable().default(null)}),Z2=$.object({id:$.string(),name:$.string(),category:$.string().nullable().default(null),description:$.string().nullable().default(null),type:$.enum(["select","boolean"]),currentValue:X2.nullable().default(null),options:$.array(u7).default([])}),v4=$.record($.string(),X2).default({}),c7=$.discriminatedUnion("kind",[$.object({id:$.string(),kind:$.literal("registered"),adapterId:$.enum(["claude-code","opencode","codex","copilot"]),displayName:$.string(),runFolder:$.string().nullable(),defaultModelId:$.string().nullable().default(null),defaultConfigValues:v4,discoveredModels:$.array(e6).default([]),discoveredConfigOptions:$.array(Z2).default([]),discoveredAt:$.string().nullable().default(null)}),$.object({id:$.string(),kind:$.literal("custom"),displayName:$.string(),command:$.string(),args:$.array($.string()),env:$.record($.string(),$.string()),runFolder:$.string().nullable(),defaultModelId:$.string().nullable().default(null),defaultConfigValues:v4,discoveredModels:$.array(e6).default([]),discoveredConfigOptions:$.array(Z2).default([]),discoveredAt:$.string().nullable().default(null)})]),Q2=$.object({runtimeConfigId:$.string(),runFolder:$.string().nullable(),modelId:$.string().nullable().default(null),configValues:v4}),$1=$.object({version:$.literal(1),globalDefaultConfigId:$.string().nullable(),runtimes:$.array(c7),boardOverrides:$.record($.string(),Q2).default({}),cardOverrides:$.record($.string(),Q2).default({})});import l7 from"node:os";import G1 from"node:path";function d7(){let Z=l7.homedir();switch(process.platform){case"win32":return process.env.APPDATA??G1.join(Z,"AppData","Roaming");case"darwin":return G1.join(Z,"Library","Application Support");default:return process.env.XDG_CONFIG_HOME??G1.join(Z,".config")}}function g1(){let Z=process.env.IDEAWAVE_RUNTIME_CONFIG_PATH;if(Z)return Z;return G1.join(d7(),"ideawave","runtimes.json")}var a7={version:1,globalDefaultConfigId:null,runtimes:[],boardOverrides:{},cardOverrides:{}},K2=new Map;function p7(Z){return K2.get(Z)??Promise.resolve()}function s7(Z,Q){K2.set(Z,Q)}async function J0(Z){let Q=Z??g1(),X;try{X=await t0.readFile(Q,"utf-8")}catch(Y){if(Y.code==="ENOENT")return structuredClone(a7);throw Y}return $1.parse(JSON.parse(X))}async function j0(Z,Q){let X=Q??g1(),J=p7(X).then(async()=>{let Y=await J0(X),W=structuredClone(Y),z=await Z(W);return await r7(W,X),z});return s7(X,J.catch(()=>{return})),J}async function r7(Z,Q){let X=Q??g1(),J=i7.dirname(X);await t0.mkdir(J,{recursive:!0});let Y=`${X}.tmp.${process.pid}.${Math.random().toString(36).slice(2)}`,W=JSON.stringify(Z,null,2);await t0.writeFile(Y,W,"utf-8");try{await t0.rename(Y,X)}catch(z){throw await t0.unlink(Y).catch(()=>{return}),z}}import{spawn as Y9}from"node:child_process";import{closeSync as W9,existsSync as j2,mkdirSync as H2,openSync as V9,readFileSync as j9,renameSync as H9,rmSync as z2,statSync as z9,unlinkSync as q9,writeFileSync as U9}from"node:fs";import W2 from"node:os";import E0 from"node:path";var o7=/\.(?:cmd|bat)$/i;function n7(Z){return process.platform==="win32"&&o7.test(Z)}function E1(Z){return n7(Z)?{shell:!0,windowsHide:!0}:{}}import{execFile as K9}from"node:child_process";import{promisify as J9}from"node:util";import{execFile as t7}from"node:child_process";import{promisify as e7}from"node:util";var Z9=e7(t7),y4=new Map,J2=5000,Q9=/\.(?:cmd|bat|com|exe)$/i;function X9(Z){let Q=Z.split(/\r?\n/).map((X)=>X.trim()).filter((X)=>X.length>0);if(Q.length===0)return null;if(process.platform!=="win32")return Q[0]??null;return Q.find((X)=>Q9.test(X))??Q[0]??null}async function Y2(Z,Q=Z9){let X=y4.get(Z);if(X&&X.expiresAt>Date.now())return X.value;let J=process.platform==="win32"?"where":"which";try{let{stdout:Y}=await Q(J,[Z],{timeout:2000}),W=X9(Y);return y4.set(Z,{value:W,expiresAt:Date.now()+J2}),W}catch{return y4.set(Z,{value:null,expiresAt:Date.now()+J2}),null}}class e0 extends Error{code;constructor(Z,Q){super(Z);this.name="AcpError",this.code=Q}}class g0 extends e0{constructor(Z="No ACP runtime configured"){super(Z,"RUNTIME_NOT_CONFIGURED");this.name="RuntimeNotConfiguredError"}}class I extends e0{constructor(Z){super(Z,"RUNTIME_UNREACHABLE");this.name="RuntimeUnreachableError"}}class u0 extends e0{authMethods;constructor(Z,Q){super(Z,"AUTH_REQUIRED");this.name="AuthRequiredError",this.authMethods=Q}}class U0 extends e0{constructor(Z="ACP session timed out"){super(Z,"SESSION_TIMEOUT");this.name="SessionTimeoutError"}}var DJ=J9(K9);function i(Z,...Q){return Y2(Z,...Q)}function K0(Z){let Q={};for(let[X,J]of Object.entries(process.env))if(typeof J==="string")Q[X]=J;return{...Q,...Z??{}}}var M4=[{adapterId:"claude-code",runtimeBinary:"claude",packageName:"@agentclientprotocol/claude-agent-acp",version:"0.61.0",warmupArgs:["--cli","--help"]},{adapterId:"codex",runtimeBinary:"codex",packageName:"@agentclientprotocol/codex-acp",version:"1.1.7",warmupArgs:["--version"]}],B9=1800000,m1=new Map;function N4(){if(process.env.IDEAWAVE_ACP_BRIDGE_CACHE_DIR)return process.env.IDEAWAVE_ACP_BRIDGE_CACHE_DIR;if(process.platform==="win32"){let Z=process.env.LOCALAPPDATA??E0.join(W2.homedir(),"AppData","Local");return E0.join(Z,"ideawave","acp-bridges")}return E0.join(process.env.XDG_CACHE_HOME??E0.join(W2.homedir(),".cache"),"ideawave","acp-bridges")}function F9(Z){return Z.replace(/^@/,"").replace(/[/\\]/g,"-")}function k1(){return E0.join(N4(),"install-state.json")}function h4(Z){return E0.join(N4(),`${F9(Z.packageName)}@${Z.version}.install.lock`)}function D4(){return process.platform==="win32"?"npx.cmd":"npx"}function $4(Z){return`${Z.packageName}@${Z.version}`}function q2(){let Z=k1();if(!j2(Z))return{};try{return JSON.parse(j9(Z,"utf8"))}catch{return{}}}function f4(Z,Q){let X=N4();H2(X,{recursive:!0});let J=q2();J.bridges={...J.bridges??{},[Z.adapterId]:Q},U9(`${k1()}.tmp`,`${JSON.stringify(J,null,2)}
|
|
3
|
+
`),H9(`${k1()}.tmp`,k1())}function U2(Z){return M4.find((Q)=>Q.packageName===Z)??null}function Y0(Z,Q,X){return{adapterId:Z.adapterId,packageName:Z.packageName,version:Z.version,status:Q,...X?{error:X}:{}}}function V2(Z,Q){return Q?.packageName===Z.packageName&&Q.version===Z.version}function B2(Z){try{return Date.now()-z9(Z).mtimeMs>B9}catch{return!1}}function L9(Z){let Q=h4(Z);if(!j2(Q))return!1;if(B2(Q))return z2(Q,{force:!0}),!1;return!0}function w9(Z){let Q=h4(Z);if(H2(E0.dirname(Q),{recursive:!0}),B2(Q))z2(Q,{force:!0});try{let X=V9(Q,"wx");return W9(X),!0}catch{return!1}}function P9(Z){q9(h4(Z))}function G4(Z){let Q=q2().bridges?.[Z.adapterId];if(V2(Z,Q)&&Q.status==="ready")return Y0(Z,"ready");if(m1.has(Z.adapterId)||L9(Z))return Y0(Z,"installing");if(V2(Z,Q)&&Q.status==="failed")return Y0(Z,"failed",Q.error);return Y0(Z,"missing")}function Z1(Z,Q){Z?.onStatusChange?.(Q)}function x9(Z,Q){let X=G4(Z);if(X.status==="ready")return Z1(Q,X),X;if(X.status==="installing"){let U=m1.get(Z.adapterId);if(U&&Q?.onStatusChange)U.then((x)=>Z1(Q,x));return Z1(Q,X),X}if(!w9(Z))return Y0(Z,"installing");let J=Y0(Z,"installing");f4(Z,J),Z1(Q,J);let Y=()=>{},W=new Promise((U)=>{Y=U});m1.set(Z.adapterId,W);let z=!1,q=(U)=>{if(z)return;z=!0;try{P9(Z)}catch{}f4(Z,U),Z1(Q,U),m1.delete(Z.adapterId),Y(U)},L;try{let U=D4();L=Y9(U,["-y",$4(Z),...Z.warmupArgs],{stdio:"ignore",windowsHide:!0,...E1(U)})}catch(U){let x=Y0(Z,"failed",U instanceof Error?U.message:String(U));return q(x),x}return L.on("error",(U)=>{q(Y0(Z,"failed",U.message))}),L.on("close",(U)=>{if(U===0){q(Y0(Z,"ready"));return}q(Y0(Z,"failed",`npx warmup exited ${U??"null"}`))}),L.unref(),J}function c0(Z){let Q=U2(Z);return Q?G4(Q):null}async function F2(Z){let Q=[];for(let X of M4){if(!await i(X.runtimeBinary)){Q.push(Y0(X,"not_needed"));continue}Q.push(x9(X,Z))}return Q.filter((X)=>X.status!=="not_needed")}function _1(Z){let Q=U2(Z);if(!Q)return null;if(G4(Q).status!=="ready")return null;return{command:D4(),args:["-y",$4(Q)],env:{}}}function g4(Z,Q){if(Z.command!==D4())return!1;let X=M4.find((J)=>Z.args.includes($4(J)));if(!X)return!1;return f4(X,Y0(X,"failed",Q)),!0}var L2="claude",E4="@agentclientprotocol/claude-agent-acp",w2=["claude-agent-acp","claude-code-acp"],P2="Install Claude Code from https://github.com/anthropics/claude-code",x2={id:"claude-code",displayName:"Claude Code",kind:"registered",supportsImages:!0,resolveSpawnConfig:async()=>{if(!await i(L2))throw new I(`Claude Code CLI not found. ${P2}`);let Q=_1(E4);if(Q)return{command:Q.command,args:Q.args,env:K0(Q.env)};let X=c0(E4),J=X?.status==="installing";for(let W of w2){let z=await i(W);if(z&&!J&&X?.status!=="failed")return{command:z,args:[],env:K0()}}let Y=X?.status==="failed"?`Claude Code ACP bridge install failed. ${X.error??"Restart IdeaWave CLI so it can warm the pinned bridge again."}`:"Claude Code ACP bridge is not ready. Keep IdeaWave CLI running and retry in a moment.";throw new I(Y)},checkReadiness:async()=>{if(!await i(L2))return{status:"not_installed",detail:P2};let Q=c0(E4);if(Q?.status==="ready")return{status:"ready"};if(Q?.status==="installing")return{status:"not_running",detail:"Installing Claude Code ACP bridge..."};if(Q?.status==="failed")return{status:"not_running",detail:Q.error??"Claude Code ACP bridge install failed. Restart IdeaWave CLI so it can warm the pinned bridge again."};for(let X of w2)if(await i(X))return{status:"ready"};return{status:"not_running",detail:"Installing Claude Code ACP bridge..."}},authHint:"Run `claude login` (or set ANTHROPIC_API_KEY)."};var O2="codex",m4="@agentclientprotocol/codex-acp",b2="codex-acp",C2="Install Codex CLI from https://developers.openai.com/codex/cli",R2={id:"codex",displayName:"Codex",kind:"registered",resolveSpawnConfig:async()=>{if(!await i(O2))throw new I(`Codex CLI not found. ${C2}`);let Q=_1(m4);if(Q)return{command:Q.command,args:Q.args,env:K0(Q.env)};let X=c0(m4),J=X?.status==="installing",Y=await i(b2);if(Y&&!J&&X?.status!=="failed")return{command:Y,args:[],env:K0()};let W=X?.status==="failed"?`Codex ACP bridge install failed. ${X.error??"Restart IdeaWave CLI so it can warm the pinned bridge again."}`:"Codex ACP bridge is not ready. Keep IdeaWave CLI running and retry in a moment.";throw new I(W)},checkReadiness:async()=>{if(!await i(O2))return{status:"not_installed",detail:C2};let Q=c0(m4);if(Q?.status==="ready")return{status:"ready"};if(Q?.status==="installing")return{status:"not_running",detail:"Installing Codex ACP bridge..."};if(Q?.status==="failed")return{status:"not_running",detail:Q.error??"Codex ACP bridge install failed. Restart IdeaWave CLI so it can warm the pinned bridge again."};if(await i(b2))return{status:"ready"};return{status:"not_running",detail:"Installing Codex ACP bridge..."}},authHint:"Run `codex login` (or set OPENAI_API_KEY)."};var v2="copilot",y2="copilot-acp",f2="npm i -g @github/copilot",M2={id:"copilot",displayName:"GitHub Copilot",kind:"registered",resolveSpawnConfig:async()=>{let Z=await i(v2);if(Z)return{command:Z,args:["--acp"],env:K0()};let Q=await i(y2);if(Q)return{command:Q,args:[],env:K0()};throw new I(`Copilot not installed. Run: ${f2}`)},checkReadiness:async()=>{if(await i(v2))return{status:"ready"};if(await i(y2))return{status:"ready"};return{status:"not_installed",detail:f2}},authHint:"Run `gh auth login` (or `copilot login`)."};import O9 from"node:fs/promises";function b9(Z){return Z.startsWith("/")||/^[a-zA-Z]:[\\/]/.test(Z)}async function N2(Z){if(b9(Z))try{return await O9.access(Z),!0}catch{return!1}return await i(Z)!==null}var h2={id:"custom",displayName:"Custom ACP",kind:"custom",resolveSpawnConfig:async(Z)=>{if(Z.kind!=="custom")throw new I("customAdapter received non-custom entry");if(!await N2(Z.command))throw new I(`custom: command "${Z.command}" not found`);return{command:Z.command,args:Z.args,env:K0(Z.env)}},checkReadiness:async(Z)=>{if(Z.kind!=="custom")return{status:"unknown"};return await N2(Z.command)?{status:"ready"}:{status:"not_installed"}}};var D2="opencode",$2="Install OpenCode from https://opencode.ai",G2={id:"opencode",displayName:"OpenCode",kind:"registered",resolveSpawnConfig:async()=>{let Z=await i(D2);if(!Z)throw new I(`OpenCode not installed. ${$2}`);return{command:Z,args:["acp"],env:K0()}},checkReadiness:async()=>{if(!await i(D2))return{status:"not_installed",detail:$2};return{status:"ready"}},authHint:"Run `opencode auth login <provider>` (or set the provider's API-key env var)."};var g2={"claude-code":x2,opencode:G2,codex:R2,copilot:M2};function B0(Z){if(Z.kind==="custom")return h2;let Q=g2[Z.adapterId];if(!Q)throw Error(`Unknown registered adapter: ${Z.adapterId}`);return Q}function l0(){return Object.values(g2)}var k4=new Map,S1=new Map,C9=30000;function I1(Z,Q){let X=k4.get(Z);if(X&&X.expiresAt>Date.now())return Promise.resolve(X.value);let J=S1.get(Z);if(J)return J;let Y=Q().then((W)=>{return k4.set(Z,{value:W,expiresAt:Date.now()+C9}),W}).finally(()=>{S1.delete(Z)});return S1.set(Z,Y),Y}async function E2(Z){let Q=await Promise.all(l0().map((W)=>I1(W.id,async()=>({adapterId:W.id,...await W.checkReadiness({id:"__probe__",kind:"registered",adapterId:W.id,displayName:W.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null})})))),J=(await J0(Z)).runtimes.filter((W)=>W.kind==="custom"),Y=await Promise.all(J.map((W)=>I1(`custom:${W.id}`,async()=>({adapterId:W.id,...await B0(W).checkReadiness(W)}))));return[...Q,...Y]}async function m2(Z,Q){let X=l0().find((W)=>W.id===Z);if(X)return I1(X.id,async()=>({adapterId:X.id,...await X.checkReadiness({id:"__probe__",kind:"registered",adapterId:X.id,displayName:X.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null})}));let Y=(await J0(Q)).runtimes.find((W)=>W.id===Z);if(!Y||Y.kind!=="custom")return null;return I1(`custom:${Y.id}`,async()=>({adapterId:Y.id,...await B0(Y).checkReadiness(Y)}))}function k2(){k4.clear(),S1.clear()}function R9(Z){if(!Z)return null;let Q=Z.indexOf("/");if(Q<=0)return null;return Z.slice(0,Q)}function T1(Z){let Q=[...Z.models];if(Z.adapterId!=="opencode"||Q.length===0)return Q;let X=R9(Z.currentModelId)??(Q.some((Y)=>Y.id.startsWith("opencode/"))?"opencode":null);if(!X)return Q;let J=Q.filter((Y)=>Y.id===Z.currentModelId||Y.id.startsWith(`${X}/`));return J.length>0?J:Q}import{Readable as I9,Writable as T9}from"node:stream";import{ClientSideConnection as a2,ndJsonStream as p2}from"@agentclientprotocol/sdk";import C0 from"node:fs/promises";import X0 from"node:path";class X1 extends Error{constructor(Z){super(Z);this.name="PathTraversalError"}}class S4 extends Error{constructor(Z){super(Z);this.name="HiddenPathError"}}class I4 extends Error{constructor(Z){super(Z);this.name="RunFolderFileTooLargeError"}}class Q1 extends Error{constructor(Z){super(Z);this.name="RunFolderBinaryFileError"}}var v9=new Set([".bzr",".cache",".claude",".config",".env",".git",".hg",".idea",".obsidian",".svn",".vscode","node_modules"]),_2=1e6,y9=4096,f9=new TextDecoder("utf-8",{fatal:!0});function M9(Z){return Z.split(/[\\/]+/).filter((Q)=>Q.length>0)}function A1(Z){if(X0.isAbsolute(Z))throw new X1("Absolute paths are not allowed");for(let Q of M9(Z)){if(Q===".")continue;if(Q==="..")throw new X1("Parent-directory traversal is not allowed");if(Q.startsWith(".")||v9.has(Q))throw new S4(`Path segment "${Q}" is hidden or configuration data`)}}function N9(Z){A1(Z);let Q=X0.normalize(Z||".");return Q==="."?"":Q}function h9(Z,Q,X){let J=X0.relative(Z,Q);if(J===".."||J.startsWith(`..${X0.sep}`)||X0.isAbsolute(J))throw new X1(`Path "${X}" resolves outside the run folder`);if(J.length>0)A1(J);return J}async function _4(Z,Q){A1(Q);let X=X0.resolve(Z,Q||"."),J;try{J=await C0.realpath(X)}catch(Y){if(Y.code!=="ENOENT")throw Y;let W=X0.dirname(X),z=[X0.basename(X)];while(W!==Z&&W!==X0.dirname(W))try{W=await C0.realpath(W);break}catch(q){if(q.code!=="ENOENT")throw q;z.unshift(X0.basename(W)),W=X0.dirname(W)}J=X0.join(W,...z)}return h9(Z,J,Q),J}async function D9(Z,Q){let X=await C0.realpath(Z);return _4(X,Q)}function $9(Z){let Q=Z.subarray(0,Math.min(Z.length,y9));if(Q.length===0)return!1;let X=0;for(let J of Q){if(J===0)return!0;let Y=J===9||J===10||J===12||J===13;if(J<32&&!Y)X+=1}return X/Q.length>0.3}async function u1(Z,Q){let X=await D9(Z,Q),J=await C0.stat(X);if(!J.isFile())throw new Q1(`Path "${Q}" is not a text file`);if(J.size>_2)throw new I4(`File "${Q}" is too large to read (${J.size} bytes, max ${_2} bytes)`);let Y=await C0.readFile(X);if($9(Y))throw new Q1(`File "${Q}" appears to be binary, not text`);try{return f9.decode(Y)}catch{throw new Q1(`File "${Q}" is not valid UTF-8 text`)}}function G9(Z){if(Z.isDirectory())return"directory";if(Z.isFile())return"file";if(Z.isSymbolicLink())return"symlink";return"other"}function S2(Z){return Z.split(X0.sep).join("/")}async function I2(Z,Q=""){let X=await C0.realpath(Z),J=N9(Q),Y=await _4(X,J),W=await C0.readdir(Y,{withFileTypes:!0}),z=[];for(let q of W){let L=J?X0.join(J,q.name):q.name;try{A1(L);let U=await _4(X,L),x=await C0.stat(U);z.push({name:q.name,path:S2(L),type:G9(q),size:q.isFile()?x.size:null})}catch{}}return z.sort((q,L)=>{if(q.type==="directory"&&L.type!=="directory")return-1;if(q.type!=="directory"&&L.type==="directory")return 1;return q.name.localeCompare(L.name)}),{path:S2(J),absolutePath:Y,entries:z}}var T4={fs:{readTextFile:!0,writeTextFile:!1},terminal:!1};function T2(Z){return{readTextFile:async(Q)=>{return{content:await u1(Z,Q.path)}}}}import{spawn as g9}from"node:child_process";function A4(Z){let Q=g9(Z.command,Z.args,{cwd:Z.cwd,env:Z.env,stdio:["pipe","pipe","pipe"],...E1(Z.command)});if(!Q.stdin||!Q.stdout||!Q.stderr)throw Error("Failed to allocate stdio streams for ACP subprocess");let{stdin:X,stdout:J,stderr:Y}=Q,W=4096,z=[],q=0;Y.on("data",(N)=>{z.push(N),q+=N.length;while(q>W*2&&z.length>1){let R=z.shift();if(R)q-=R.length}});let L=()=>{let N=Buffer.concat(z).toString("utf8");return N.length>W?N.slice(-W):N},U=!1,x=!1,G,h,C=new Promise((N)=>{G=N}),b=new Promise((N)=>{h=N}),f=(N)=>{if(x)return;if(x=!0,G(N),!U)h(N)};return Q.on("exit",(N,R)=>{f({code:N,signal:R,stderr:L()})}),Q.on("error",(N)=>{let R=L(),D=N?.message??String(N);f({code:null,signal:null,stderr:R?`${D}
|
|
4
|
+
${R}`:D})}),{stdin:X,stdout:J,stderr:Y,kill:(N="SIGTERM")=>{if(U)return;U=!0;try{Q.kill(N)}catch{}},waitForExit:C,processCrashed:b}}var E9=["mcp_ideawave_board_","ideawave_board_","ideawave-board_","ideawave-board.","ideawave.board."];function m9(Z){let Q=Z.toLowerCase();for(let X of E9)if(Q.startsWith(X))return Z.slice(X.length);if(/^mcp[-_.]/i.test(Z))return Z.slice(4);return Z}function c1(Z){return m9(Z.trim())}function u4(Z){let Q=c1(Z);if(!Q)return"Tool";if(!/[-_.]/.test(Q))return Q.charAt(0).toUpperCase()+Q.slice(1);let X=Q.replace(/[-_.]+/g," ").replace(/\s+/g," ").trim();if(!X)return"Tool";return X.charAt(0).toUpperCase()+X.slice(1)}function c4(Z){let Q=Z?.toLowerCase();if(Q==="completed"||Q==="complete"||Q==="done"||Q==="success"||Q==="succeeded")return"completed";if(Q==="failed"||Q==="error"||Q==="errored")return"failed";return"running"}function l4(Z){if(typeof Z!=="string")return null;let Q=Z.trim();return Q?Q:null}function A2(Z){if(typeof Z!=="string")return"Tool";let Q=Z.trim();return Q?Q:"Tool"}function k9(Z,Q){if(!Z||typeof Z!=="object"||Array.isArray(Z))return null;let X=Z;for(let J of Q){let Y=X[J];if(typeof Y==="string"&&Y.trim())return Y.trim()}return null}function d4(Z,Q){let X=Z.trim().toLowerCase();if(X==="skill"||X==="workflow"||X==="tool"||X==="invalid"){let J=k9(Q,["skillName","workflowName","toolName","name","title"]);if(J){let Y=X==="skill"?" skill":X==="workflow"?" workflow":"";return`${u4(J)}${Y}`}}if(X==="invalid")return"Tool call";return u4(Z)}var _9=33,u2=1600;function m0(Z){if(Z.length<=u2)return Z;return`${Z.slice(0,u2-22)}
|
|
5
|
+
... truncated`}function d1(Z){let Q=Z.replace(/\r\n?/g,`
|
|
6
6
|
`),X=Q.trim();if(X.startsWith('"')&&X.endsWith('"')||X.startsWith("'")&&X.endsWith("'"))try{let Y=JSON.parse(X);if(typeof Y==="string")return Y.replace(/\r\n?/g,`
|
|
7
|
-
`)}catch{return Q}if(!Q.includes("\\\""))return Q;let
|
|
7
|
+
`)}catch{return Q}if(!Q.includes("\\\""))return Q;let J=Q.replace(/\\r\\n/g,`
|
|
8
8
|
`).replace(/\\n/g,`
|
|
9
9
|
`).replace(/\\r/g,`
|
|
10
|
-
`).replace(/\\t/g,"\t").replace(/\\"/g,'"');try{let Y=JSON.parse(
|
|
10
|
+
`).replace(/\\t/g,"\t").replace(/\\"/g,'"');try{let Y=JSON.parse(J);if(Y!==null&&typeof Y==="object")return J}catch{return Q}return Q}function P0(Z){if(Z===void 0||Z===null)return null;if(typeof Z==="string"){let Q=d1(Z).trim();return Q?m0(Q):null}if(typeof Z==="number"||typeof Z==="boolean"||typeof Z==="bigint")return String(Z);try{return m0(JSON.stringify(Z,null,2))}catch{return m0(d1(String(Z)))}}function S9(Z){if(!Z||typeof Z!=="object")return null;let Q=Z;if(Q.type==="text"&&typeof Q.text==="string")return d1(Q.text);if(Q.type==="image")return"[image]";if(Q.type==="resource")return"[resource]";if(Q.type==="content"){let X=Q.content;if(X&&typeof X==="object"){let J=X;if(J.type==="text"&&typeof J.text==="string")return d1(J.text);if(J.type==="image")return"[image]";if(J.type==="resource")return"[resource]"}}if(Q.type==="diff")return`Diff: ${typeof Q.path==="string"?Q.path:"unknown file"}`;if(Q.type==="terminal")return`Terminal: ${typeof Q.terminalId==="string"?Q.terminalId:"terminal"}`;return P0(Z)}function l1(Z){if(!Array.isArray(Z))return null;let Q=Z.map(S9).filter((X)=>Boolean(X?.trim()));if(Q.length===0)return null;return m0(Q.join(`
|
|
11
11
|
|
|
12
|
-
`))}function
|
|
13
|
-
${
|
|
12
|
+
`))}function i4(Z){if(!Z||typeof Z!=="object"||Array.isArray(Z))return P0(Z);let Q=Z,X=l1(Q.content);if(X)return X;for(let W of["output","result","text","message"]){let z=P0(Q[W]);if(z)return z}let J=P0(Q.stdout),Y=P0(Q.stderr);if(J||Y)return m0([J?`stdout:
|
|
13
|
+
${J}`:null,Y?`stderr:
|
|
14
14
|
${Y}`:null].filter(Boolean).join(`
|
|
15
15
|
|
|
16
|
-
`));return
|
|
16
|
+
`));return P0(Z)}function c2(Z,Q){if(!Q)return Z;if(!Z)return Q;if(Z===Q||Z.endsWith(Q))return Z;if(Q.startsWith(Z))return Q;return m0(`${Z}
|
|
17
17
|
|
|
18
|
-
${Q}`)}function g4(Z){if(!Array.isArray(Z))return null;let Q=Z.flatMap((X)=>{if(!X||typeof X!=="object")return[];let K=X;if(typeof K.path!=="string"||!K.path.trim())return[];let Y=typeof K.line==="number"?`:${K.line}`:"";return[`${K.path}${Y}`]});return Q.length>0?Q.slice(0,5):null}function v2(Z){let{ctx:Q,appendText:X,appendToolActivity:K}=Z,Y=Z.flushIntervalMs??Y9,W="",z="",B=0,w=null,q={},b=new Map,M=(D)=>{if(b.set(D.toolCallId,D),!K)return;K({boardId:Q.boardId,cardId:Q.cardId,runId:Q.runId,entry:D}).catch((L)=>{console.warn("[streamAdapter] appendToolActivity failed",L)})},x=(D)=>{let L=`${Q.runId}:thought`,g=b.get(L);if(!g||g.status!=="running")return;M({...g,status:"completed",completedAt:g.completedAt??D})},y=(D)=>{for(let L of b.values()){if(L.status!=="running"||L.rawTitle.toLowerCase()!=="toolsearch")continue;M({...L,status:"completed",completedAt:L.completedAt??D})}},v=(D)=>{for(let L of Array.from(b.values())){if(L.status!=="running")continue;if(L.kind==="thought"||L.rawTitle==="agent_thought")continue;M({...L,status:"completed",completedAt:L.completedAt??D})}},$="",C=0,N=null,f=null,E=(D)=>{if(D===$)return;$=D,C=Date.now(),X({boardId:Q.boardId,cardId:Q.cardId,runId:Q.runId,text:D}).catch((L)=>{console.warn("[streamAdapter] appendText failed",L)})},G=()=>{if(N!==null)clearTimeout(N),N=null;if(f!==null){let D=f;f=null,E(D)}},I=(D)=>{let L=Date.now()-C;if(L>=Y&&N===null){E(D);return}if(f=D,N===null){let g=Math.max(0,Y-L);N=setTimeout(()=>{N=null,G()},g)}};return{onSessionUpdate:async(D)=>{let L=D.update;switch(q[L.sessionUpdate]=(q[L.sessionUpdate]??0)+1,L.sessionUpdate){case"agent_message_chunk":{let g=new Date().toISOString();if(x(g),L.content.type==="text")W+=L.content.text,I(W);else{let l=`agent_message_chunk:${L.content.type}`;q[l]=(q[l]??0)+1}return}case"agent_thought_chunk":{if(L.content.type!=="text")return;z+=L.content.text;let g=new Date().toISOString(),l=`${Q.runId}:thought`,a=b.get(l);M({toolCallId:l,rawTitle:"agent_thought",title:"Thought",kind:"thought",status:"running",startedAt:a?.startedAt??g,completedAt:null,contentPreview:G0(z.trim())});return}case"user_message_chunk":return;case"tool_call":{B+=1;let g=b2(L.title),l=N4(L.status),a=new Date().toISOString();x(a),y(a),M({toolCallId:L.toolCallId,rawTitle:g,title:$4(g,L.rawInput),kind:D4(L.kind),status:l,startedAt:a,completedAt:l==="running"?null:a,inputPreview:w0(L.rawInput),outputPreview:G4(L.rawOutput),contentPreview:m1(L.content),locations:g4(L.locations)});return}case"tool_call_update":{let g=b.get(L.toolCallId);if(!g){let A=b2(L.title),Z0=N4(L.status),s=new Date().toISOString();M({toolCallId:L.toolCallId,rawTitle:A,title:$4(A,L.rawInput),kind:D4(L.kind),status:Z0,startedAt:s,completedAt:Z0==="running"?null:s,inputPreview:w0(L.rawInput),outputPreview:G4(L.rawOutput),contentPreview:m1(L.content),locations:g4(L.locations)});return}let l=L.status===void 0||L.status===null?g.status:N4(L.status),a=typeof L.title==="string"&&L.title.trim().length>0?L.title:g.rawTitle,_0=typeof L.title==="string"&&L.title.trim().length>0,P0=l==="running"?g.completedAt:g.completedAt??new Date().toISOString(),_=L.content===void 0?g.contentPreview:C2(g.contentPreview,m1(L.content)),i=L.rawOutput===void 0?g.outputPreview:C2(g.outputPreview,G4(L.rawOutput));M({...g,rawTitle:a,title:_0?$4(a,L.rawInput):g.title,kind:L.kind===void 0?g.kind:D4(L.kind),status:l,completedAt:P0,inputPreview:L.rawInput===void 0?g.inputPreview:w0(L.rawInput),outputPreview:i,contentPreview:_,locations:L.locations===void 0?g.locations:g4(L.locations)});return}case"plan":w=L.entries;return;case"available_commands_update":return;case"current_mode_update":return;default:return}},getFinalText:()=>W,getToolCallCount:()=>B,getLatestPlan:()=>w,getUpdateTypeCounts:()=>({...q}),flush:(D)=>{let L=new Date().toISOString();if(x(L),D?.completeOpenToolCalls)v(L);G()}}}var n0=1,R2=-32000;function y2(Z){if(Z.awaitingInput)return!1;return Z.nowMs-Z.lastUpdateMs>=Z.windowMs}function M2(Z){if(!Z||typeof Z!=="object")return!1;return Z.code===R2}var j9=60000,z9=j9,q9=5000;function U9(Z){let Q=Math.max(1,Math.round(Z/1000));return`Runtime has not responded for ${Q} ${Q===1?"second":"seconds"}. Retry the agent run.`}function N2(){return{name:"ideawave-cli",title:"IdeaWave CLI",version:"0.0.62".trim()?"0.0.62":"dev"}}function D2(Z){if(Z===n0)return;throw new S(`Unsupported ACP protocol version ${Z}; expected ${n0}`)}function $2(Z){return V9.toWeb(Z)}function G2(Z){return H9.toWeb(Z)}function E4(Z){return Z!==null&&typeof Z==="object"}function B9(Z){if(!Array.isArray(Z))return[];let Q=[];for(let X of Z){if(!E4(X))continue;if(typeof X.group==="string"&&Array.isArray(X.options)){let K=typeof X.name==="string"?X.name:X.group;for(let Y of X.options){if(!E4(Y))continue;if(typeof Y.value!=="string"||typeof Y.name!=="string")continue;Q.push({value:Y.value,name:Y.name,description:typeof Y.description==="string"?Y.description:null,group:X.group,groupName:K})}continue}if(typeof X.value!=="string"||typeof X.name!=="string")continue;Q.push({value:X.value,name:X.name,description:typeof X.description==="string"?X.description:null,group:null,groupName:null})}return Q}function F9(Z){if(!E4(Z))return null;if(typeof Z.id!=="string"||typeof Z.name!=="string")return null;let Q=typeof Z.category==="string"?Z.category:null,X=typeof Z.description==="string"?Z.description:null;if(Z.type==="select"){let K=typeof Z.currentValue==="string"?Z.currentValue:null;return{id:Z.id,name:Z.name,category:Q,description:X,type:"select",currentValue:K,options:B9(Z.options)}}if(Z.type==="boolean"){let K=typeof Z.currentValue==="boolean"?Z.currentValue:typeof Z.value==="boolean"?Z.value:null;return{id:Z.id,name:Z.name,category:Q,description:X,type:"boolean",currentValue:K,options:[]}}return null}function m4(Z){let Q=(Z.configOptions??[]).map(F9).filter((B)=>B!==null),X=Q.find((B)=>B.type==="select"&&B.category==="model")??Q.find((B)=>B.type==="select"&&B.id==="model")??null,K=X?.options.map((B)=>({id:B.value,name:B.name,description:B.description??null})),Y=w9(Z.models),W=K&&K.length>0?K:Y&&Y.length>0?Y:null,z=(typeof X?.currentValue==="string"?X.currentValue:null)??L9(Z.models)??null;return{models:W,currentModelId:z,configOptions:Q,modelConfigId:X?.id??null}}function w9(Z){if(!Z||!Array.isArray(Z.availableModels))return null;let Q=[];for(let X of Z.availableModels){if(typeof X.modelId!=="string")continue;Q.push({id:X.modelId,name:typeof X.name==="string"?X.name:null,description:typeof X.description==="string"?X.description:null})}return Q.length>0?Q:null}function L9(Z){return typeof Z?.currentModelId==="string"?Z.currentModelId:null}function P9(Z,Q){let X=[];if(Z.trim())X.push({type:"text",text:Z});for(let K of Q)if(K.content.trim())X.push({type:"text",text:K.content});return X}function x9(Z){if(typeof Z.value==="boolean")return{sessionId:Z.sessionId,configId:Z.configId,type:"boolean",value:Z.value};return{sessionId:Z.sessionId,configId:Z.configId,value:Z.value}}function b9(Z,Q){let X=m4({configOptions:Q.configOptions});return{models:X.models??Z.models,currentModelId:X.currentModelId??Z.currentModelId,configOptions:X.configOptions,modelConfigId:X.modelConfigId??Z.modelConfigId}}function g2(Z,Q){if(Z==="default")return null;if(!Q||Q.length===0)return Z;let X=Q.find((q)=>q.id===Z);if(X)return X.id;let K=Z.toLowerCase(),Y=K.includes("opus")?"opus":K.includes("sonnet")?"sonnet":K.includes("haiku")?"haiku":null;if(!Y)return Z;let W=(q)=>`${q.id} ${q.name??""} ${q.description??""}`.toLowerCase(),z=Q.filter((q)=>W(q).includes(Y));if(z.length===0)return Z;let w=(K.includes("1m")?z.find((q)=>W(q).includes("1m")):void 0)??z[0];return w?w.id:Z}async function _1(Z){try{let Q=await Z.conn.setSessionConfigOption(x9({sessionId:Z.sessionId,configId:Z.configId,value:Z.value}));return b9(Z.metadata,Q)}catch(Q){return console.warn(`[acp] setSessionConfigOption(${Z.label}) failed; using agent default.`,Q instanceof Error?Q.message:Q),Z.metadata}}async function k4(Z){let Q=h4(Z.spawn),X=[],K=0,Y=4096;Q.stderr.on("data",(_)=>{X.push(_),K+=_.length;while(K>Y*2&&X.length>1){let i=X.shift();if(i)K-=i.length}});let W=()=>{let _=Buffer.concat(X).toString("utf8");return _.length>Y?_.slice(-Y):_},z=x2(Z.spawn.cwd),B={current:null},w={current:null},q={at:Date.now()},b=null,M=G2(Q.stdin),x=$2(Q.stdout),y=h2(M,x),$=new f2((_)=>({requestPermission:async(i)=>{let A=i.options,Z0=A?.find((s)=>s.kind==="allow_once")??A?.find((s)=>s.kind==="allow_always");if(Z0)return{outcome:{outcome:"selected",optionId:Z0.optionId}};return{outcome:{outcome:"cancelled"}}},sessionUpdate:async(i)=>{q.at=Date.now();let A=w.current;if(A){let s=i.update.sessionUpdate;if(A.updateCount+=1,A.updateCount===1||A.lastUpdateType!==s||s==="tool_call"||s==="tool_call_update")m("acp.session_update",{runId:A.runId,cardId:A.cardId,sessionId:b,updateType:s,updateCount:A.updateCount,elapsedMs:Date.now()-A.startedAt});A.lastUpdateType=s}let Z0=B.current;if(Z0)await Z0.onSessionUpdate(i)},readTextFile:z.readTextFile}),y),C=()=>Q.kill();if(Z.signal)Z.signal.addEventListener("abort",C);let N=()=>{if(Z.signal)Z.signal.removeEventListener("abort",C)},f=async(_,i)=>{if(N(),Q.kill(),M2(_))throw new I0(_.message??"Authentication required",i);if(_ instanceof Error&&_.message==="ACP connection closed"){if(Z.signal?.aborted)throw new S("ACP session cancelled: abort signal received");let A=await Promise.race([Q.processCrashed,Q.waitForExit,new Promise((Z0)=>setTimeout(()=>Z0({stderr:""}),500))]);throw new S(`Runtime process exited before completion: ${A.stderr?.trim()??""}`)}throw _},E;try{E=await $.initialize({protocolVersion:n0,clientCapabilities:f4,clientInfo:N2()})}catch(_){throw await f(_,[]),Error("unreachable")}try{D2(E.protocolVersion)}catch(_){throw N(),Q.kill(),_}let G=E.authMethods?.map((_)=>_.id)??[],I;try{I=await $.newSession({cwd:Z.spawn.cwd,mcpServers:Z.mcpServers??[]})}catch(_){throw await f(_,G),Error("unreachable")}let D=I.sessionId;b=D;let L=m4(I),g=Z.modelId??null,l=g?g2(g,L.models):null;if(l&&l!==L.currentModelId)if(L.modelConfigId)L=await _1({conn:$,sessionId:D,configId:L.modelConfigId,value:l,metadata:L,label:`${L.modelConfigId}=${l}`});else console.warn(`[acp] runtime did not advertise a model config option for ${l}; using agent default.`);for(let[_,i]of Object.entries(Z.configValues??{}).sort(([A],[Z0])=>A.localeCompare(Z0))){if(_===L.modelConfigId)continue;if(!L.configOptions.some((A)=>A.id===_))continue;L=await _1({conn:$,sessionId:D,configId:_,value:i,metadata:L,label:`${_}=${String(i)}`})}N();let a=!1,_0=async()=>{if(a)return;a=!0,Q.kill(),await Promise.race([Q.waitForExit,new Promise((_)=>setTimeout(_,2000))])},P0=!1;return Q.processCrashed.then(()=>{P0=!0}),{sessionId:D,availableModels:L.models,currentModelId:L.currentModelId,availableConfigOptions:L.configOptions,isAlive:()=>!a&&!P0,dispose:_0,prompt:(_)=>O9({proc:Q,conn:$,sessionId:D,activeAdapter:B,activeTrace:w,lastUpdate:q,collectStderrTail:W},_)}}async function O9(Z,Q){let{proc:X,conn:K,sessionId:Y,activeAdapter:W,activeTrace:z,lastUpdate:B}=Z,w=Date.now(),q=Q.heartbeatMs??z9,b=U9(q),M={boardId:Q.boardId,cardId:Q.cardId,runId:Q.runId},x=v2({ctx:M,appendText:Q.appendText,appendToolActivity:Q.appendToolActivity});W.current=x,z.current={runId:Q.runId,cardId:Q.cardId,startedAt:w,updateCount:0,lastUpdateType:null},B.at=Date.now(),m("acp.prompt_started",{runId:Q.runId,cardId:Q.cardId,sessionId:Y,heartbeatWindowMs:q});let y=!1,v=null,$=()=>X.kill();Q.signal.addEventListener("abort",$);try{let C=async()=>{let G=Math.min(q9,Math.max(50,Math.floor(q/2)));v=setInterval(()=>{let D=Q.isAwaitingInput?.()??!1;if(D){B.at=Date.now();return}if(y2({nowMs:Date.now(),lastUpdateMs:B.at,windowMs:q,awaitingInput:D}))y=!0,m("acp.inactivity_timeout",{runId:Q.runId,cardId:Q.cardId,sessionId:Y,windowMs:q,silentForMs:Date.now()-B.at}),K.cancel({sessionId:Y}).catch(()=>{return}),X.kill()},G);let I=P9(Q.prompt.systemPrompt,Q.prompt.messages);await K.prompt({sessionId:Y,prompt:I}),m("acp.prompt_resolved",{runId:Q.runId,cardId:Q.cardId,sessionId:Y,elapsedMs:Date.now()-w}),x.flush({completeOpenToolCalls:!0})},N=X.waitForExit.then((G)=>({kind:"exited",exit:G})),f=C().then(()=>({kind:"ok"})).catch(async(G)=>{if(G instanceof Error&&G.message==="ACP connection closed")return{kind:"crashed",exit:await Promise.race([X.processCrashed,X.waitForExit])};throw G}),E;try{E=await Promise.race([f,X.processCrashed.then((G)=>({kind:"crashed",exit:G})),N])}catch(G){if(y)throw new q0(b);throw G}if(y)throw new q0(b);if(E.kind==="crashed")throw new S(`Runtime process exited before completion: ${E.exit.stderr.trim()}`);if(E.kind==="exited"){if(Q.signal.aborted)throw new S("ACP session cancelled: abort signal received");if(y)throw new q0(b);throw new S(`Runtime process exited unexpectedly: ${E.exit.stderr.trim()}`)}return{modelReported:"unknown",finalText:x.getFinalText(),toolCallsExecuted:x.getToolCallCount(),stderrTail:Z.collectStderrTail(),updateTypeCounts:x.getUpdateTypeCounts()}}finally{if(m("acp.prompt_finished",{runId:Q.runId,cardId:Q.cardId,sessionId:Y,elapsedMs:Date.now()-w,timedOut:y,updateCount:z.current?.updateCount??0}),v!==null)clearInterval(v);Q.signal.removeEventListener("abort",$),x.flush({completeOpenToolCalls:!0}),W.current=null,z.current=null}}var C9=30000;async function E2(Z){let Q=h4(Z.spawn),X=G2(Q.stdin),K=$2(Q.stdout),Y=h2(X,K),z=new f2((q)=>({requestPermission:async()=>({outcome:{outcome:"cancelled"}}),sessionUpdate:async()=>{return},readTextFile:async()=>({content:""})}),Y),B=()=>Q.kill();if(Z.signal)Z.signal.addEventListener("abort",B);let w=null;try{let q=(async()=>{let M=await z.initialize({protocolVersion:n0,clientCapabilities:f4,clientInfo:N2()});D2(M.protocolVersion);let x=M.authMethods?.map((E)=>E.id)??[],y;try{y=await z.newSession({cwd:Z.spawn.cwd,mcpServers:[]})}catch(E){if(M2(E))throw new I0(E.message??"Authentication required",x);throw E}let v=m4(y),$=Z.modelId??null,C=$?g2($,v.models):null;if(C&&C!==v.currentModelId)if(v.modelConfigId)v=await _1({conn:z,sessionId:y.sessionId,configId:v.modelConfigId,value:C,metadata:v,label:`${v.modelConfigId}=${C}`});else console.warn(`[acp] runtime did not advertise a model config option for ${C}; discovering agent default models.`);for(let[E,G]of Object.entries(Z.configValues??{}).sort(([I],[D])=>I.localeCompare(D))){if(E===v.modelConfigId)continue;if(!v.configOptions.some((I)=>I.id===E))continue;v=await _1({conn:z,sessionId:y.sessionId,configId:E,value:G,metadata:v,label:`${E}=${String(G)}`})}let N=v.models??[],f=v.currentModelId;return z.cancel({sessionId:y.sessionId}).catch(()=>{return}),{models:N,configOptions:v.configOptions,currentModelId:f}})(),b=new Promise((M,x)=>{w=setTimeout(()=>{x(new q0)},C9)});return await Promise.race([q,b])}catch(q){if(q instanceof Error&&q.message==="ACP connection closed"){if(Z.signal?.aborted)throw new S("ACP model discovery cancelled: abort signal received");throw new S("Runtime process exited during model discovery.")}throw q}finally{if(w)clearTimeout(w);if(Z.signal)Z.signal.removeEventListener("abort",B);Q.kill()}}import v9 from"node:fs/promises";import S1 from"node:os";async function m2(Z){let Q={version:1,globalDefaultConfigId:null,runtimes:[],boardOverrides:{},cardOverrides:{}},X;try{X=await v9.readFile(Z,"utf-8")}catch(K){if(K.code==="ENOENT")return structuredClone(Q);throw K}return C1.parse(JSON.parse(X))}function _4(Z,Q,X){return{...Z.defaultConfigValues??{},...Q?.configValues??{},...X?.configValues??{}}}async function O0(Z){let Q=Z.configPath?await m2(Z.configPath):await J0(),X=Z.cardId?Q.cardOverrides[Z.cardId]:void 0;if(X?.runtimeConfigId){let Y=Q.runtimes.find((W)=>W.id===X.runtimeConfigId);if(Y)return{entry:Y,adapter:U0(Y),runFolder:X.runFolder??Y.runFolder??S1.homedir(),modelId:X.modelId??Y.defaultModelId??null,configValues:_4(Y,void 0,X)}}let K=Q.boardOverrides[Z.boardId];if(K?.runtimeConfigId){let Y=Q.runtimes.find((W)=>W.id===K.runtimeConfigId);if(Y)return{entry:Y,adapter:U0(Y),runFolder:K.runFolder??Y.runFolder??S1.homedir(),modelId:K.modelId??Y.defaultModelId??null,configValues:_4(Y,K)}}if(Q.globalDefaultConfigId){let Y=Q.runtimes.find((W)=>W.id===Q.globalDefaultConfigId);if(Y)return{entry:Y,adapter:U0(Y),runFolder:X?.runFolder??K?.runFolder??Y.runFolder??S1.homedir(),modelId:X?.modelId??K?.modelId??Y.defaultModelId??null,configValues:_4(Y,K,X)}}throw new D0}async function k2(Z,Q={}){let K=(Q.configPath?await m2(Q.configPath):await J0()).runtimes.find((Y)=>Y.id===Z);if(!K)return null;return{entry:K,adapter:U0(K),runFolder:K.runFolder??S1.homedir(),modelId:Q.modelId??K.defaultModelId??null,configValues:{...K.defaultConfigValues??{},...Q.configValues??{}}}}var _2=new Map;function S4(Z,Q){if(!Z)return;_2.set(Z,Q)}function S2(Z){if(!Z)return!1;return _2.get(Z)??!1}var g0=new Map,I4=new Set;function T4(Z){g0.get(Z)?.controller.abort()}function I2(Z){for(let[Q,X]of g0){if(X.frontendSessionId!==Z)continue;X.controller.abort(),g0.delete(Q)}}function u2(){for(let Z of g0.values())Z.controller.abort();g0.clear()}function u4(Z,Q){if(Q?.aborted)return!0;return Z instanceof Error&&/abort signal received|session cancelled/i.test(Z.message)}function T2(Z,Q,X,K){if((!Q.availableModels||Q.availableModels.length===0)&&Q.availableConfigOptions.length===0)return;V0((Y)=>{let W=Y.runtimes.find((z)=>z.id===Z);if(W){if(Q.availableModels&&Q.availableModels.length>0)W.discoveredModels=$1({adapterId:X,models:Q.availableModels,currentModelId:Q.currentModelId??K});if(Q.availableConfigOptions.length>0)W.discoveredConfigOptions=Q.availableConfigOptions}}).catch(()=>{return})}function R9(Z,Q){return`${Z}
|
|
18
|
+
${Q}`)}function a4(Z){if(!Array.isArray(Z))return null;let Q=Z.flatMap((X)=>{if(!X||typeof X!=="object")return[];let J=X;if(typeof J.path!=="string"||!J.path.trim())return[];let Y=typeof J.line==="number"?`:${J.line}`:"";return[`${J.path}${Y}`]});return Q.length>0?Q.slice(0,5):null}function l2(Z){let{ctx:Q,appendText:X,appendToolActivity:J}=Z,Y=Z.flushIntervalMs??_9,W="",z="",q=0,L=null,U={},x=new Map,G=(M)=>{if(x.set(M.toolCallId,M),!J)return;J({boardId:Q.boardId,cardId:Q.cardId,runId:Q.runId,entry:M}).catch((w)=>{console.warn("[streamAdapter] appendToolActivity failed",w)})},h=(M)=>{let w=`${Q.runId}:thought`,E=x.get(w);if(!E||E.status!=="running")return;G({...E,status:"completed",completedAt:E.completedAt??M})},C=(M)=>{for(let w of x.values()){if(w.status!=="running"||w.rawTitle.toLowerCase()!=="toolsearch")continue;G({...w,status:"completed",completedAt:w.completedAt??M})}},b=(M)=>{for(let w of Array.from(x.values())){if(w.status!=="running")continue;if(w.kind==="thought"||w.rawTitle==="agent_thought")continue;G({...w,status:"completed",completedAt:w.completedAt??M})}},f="",N=0,R=null,D=null,y=(M)=>{if(M===f)return;f=M,N=Date.now(),X({boardId:Q.boardId,cardId:Q.cardId,runId:Q.runId,text:M}).catch((w)=>{console.warn("[streamAdapter] appendText failed",w)})},g=()=>{if(R!==null)clearTimeout(R),R=null;if(D!==null){let M=D;D=null,y(M)}},T=(M)=>{let w=Date.now()-N;if(w>=Y&&R===null){y(M);return}if(D=M,R===null){let E=Math.max(0,Y-w);R=setTimeout(()=>{R=null,g()},E)}};return{onSessionUpdate:async(M)=>{let w=M.update;switch(U[w.sessionUpdate]=(U[w.sessionUpdate]??0)+1,w.sessionUpdate){case"agent_message_chunk":{let E=new Date().toISOString();if(h(E),w.content.type==="text")W+=w.content.text,T(W);else{let k=`agent_message_chunk:${w.content.type}`;U[k]=(U[k]??0)+1}return}case"agent_thought_chunk":{if(w.content.type!=="text")return;z+=w.content.text;let E=new Date().toISOString(),k=`${Q.runId}:thought`,l=x.get(k);G({toolCallId:k,rawTitle:"agent_thought",title:"Thought",kind:"thought",status:"running",startedAt:l?.startedAt??E,completedAt:null,contentPreview:m0(z.trim())});return}case"user_message_chunk":return;case"tool_call":{q+=1;let E=A2(w.title),k=c4(w.status),l=new Date().toISOString();h(l),C(l),G({toolCallId:w.toolCallId,rawTitle:E,title:d4(E,w.rawInput),kind:l4(w.kind),status:k,startedAt:l,completedAt:k==="running"?null:l,inputPreview:P0(w.rawInput),outputPreview:i4(w.rawOutput),contentPreview:l1(w.content),locations:a4(w.locations)});return}case"tool_call_update":{let E=x.get(w.toolCallId);if(!E){let c=A2(w.title),Q0=c4(w.status),r=new Date().toISOString();G({toolCallId:w.toolCallId,rawTitle:c,title:d4(c,w.rawInput),kind:l4(w.kind),status:Q0,startedAt:r,completedAt:Q0==="running"?null:r,inputPreview:P0(w.rawInput),outputPreview:i4(w.rawOutput),contentPreview:l1(w.content),locations:a4(w.locations)});return}let k=w.status===void 0||w.status===null?E.status:c4(w.status),l=typeof w.title==="string"&&w.title.trim().length>0?w.title:E.rawTitle,L0=typeof w.title==="string"&&w.title.trim().length>0,O0=k==="running"?E.completedAt:E.completedAt??new Date().toISOString(),S=w.content===void 0?E.contentPreview:c2(E.contentPreview,l1(w.content)),p=w.rawOutput===void 0?E.outputPreview:c2(E.outputPreview,i4(w.rawOutput));G({...E,rawTitle:l,title:L0?d4(l,w.rawInput):E.title,kind:w.kind===void 0?E.kind:l4(w.kind),status:k,completedAt:O0,inputPreview:w.rawInput===void 0?E.inputPreview:P0(w.rawInput),outputPreview:p,contentPreview:S,locations:w.locations===void 0?E.locations:a4(w.locations)});return}case"plan":L=w.entries;return;case"available_commands_update":return;case"current_mode_update":return;default:return}},getFinalText:()=>W,getToolCallCount:()=>q,getLatestPlan:()=>L,getUpdateTypeCounts:()=>({...U}),flush:(M)=>{let w=new Date().toISOString();if(h(w),M?.completeOpenToolCalls)b(w);g()}}}var K1=1,d2=-32000;function i2(Z){if(Z.awaitingInput)return!1;return Z.nowMs-Z.lastUpdateMs>=Z.windowMs}function s2(Z){if(!Z||typeof Z!=="object")return!1;return Z.code===d2}var A9=60000,u9=A9,c9=5000;function l9(Z){let Q=Math.max(1,Math.round(Z/1000));return`Runtime has not responded for ${Q} ${Q===1?"second":"seconds"}. Retry the agent run.`}function r2(){return{name:"ideawave-cli",title:"IdeaWave CLI",version:"0.0.64".trim()?"0.0.64":"dev"}}function o2(Z){if(Z===K1)return;throw new I(`Unsupported ACP protocol version ${Z}; expected ${K1}`)}function n2(Z){return I9.toWeb(Z)}function t2(Z){return T9.toWeb(Z)}function p4(Z){return Z!==null&&typeof Z==="object"}function d9(Z){if(!Array.isArray(Z))return[];let Q=[];for(let X of Z){if(!p4(X))continue;if(typeof X.group==="string"&&Array.isArray(X.options)){let J=typeof X.name==="string"?X.name:X.group;for(let Y of X.options){if(!p4(Y))continue;if(typeof Y.value!=="string"||typeof Y.name!=="string")continue;Q.push({value:Y.value,name:Y.name,description:typeof Y.description==="string"?Y.description:null,group:X.group,groupName:J})}continue}if(typeof X.value!=="string"||typeof X.name!=="string")continue;Q.push({value:X.value,name:X.name,description:typeof X.description==="string"?X.description:null,group:null,groupName:null})}return Q}function i9(Z){if(!p4(Z))return null;if(typeof Z.id!=="string"||typeof Z.name!=="string")return null;let Q=typeof Z.category==="string"?Z.category:null,X=typeof Z.description==="string"?Z.description:null;if(Z.type==="select"){let J=typeof Z.currentValue==="string"?Z.currentValue:null;return{id:Z.id,name:Z.name,category:Q,description:X,type:"select",currentValue:J,options:d9(Z.options)}}if(Z.type==="boolean"){let J=typeof Z.currentValue==="boolean"?Z.currentValue:typeof Z.value==="boolean"?Z.value:null;return{id:Z.id,name:Z.name,category:Q,description:X,type:"boolean",currentValue:J,options:[]}}return null}function s4(Z){let Q=(Z.configOptions??[]).map(i9).filter((q)=>q!==null),X=Q.find((q)=>q.type==="select"&&q.category==="model")??Q.find((q)=>q.type==="select"&&q.id==="model")??null,J=X?.options.map((q)=>({id:q.value,name:q.name,description:q.description??null})),Y=a9(Z.models),W=J&&J.length>0?J:Y&&Y.length>0?Y:null,z=(typeof X?.currentValue==="string"?X.currentValue:null)??p9(Z.models)??null;return{models:W,currentModelId:z,configOptions:Q,modelConfigId:X?.id??null}}function a9(Z){if(!Z||!Array.isArray(Z.availableModels))return null;let Q=[];for(let X of Z.availableModels){if(typeof X.modelId!=="string")continue;Q.push({id:X.modelId,name:typeof X.name==="string"?X.name:null,description:typeof X.description==="string"?X.description:null})}return Q.length>0?Q:null}function p9(Z){return typeof Z?.currentModelId==="string"?Z.currentModelId:null}function s9(Z,Q){let X=[];if(Z.trim())X.push({type:"text",text:Z});for(let J of Q)if(J.content.trim())X.push({type:"text",text:J.content});return X}function r9(Z){if(typeof Z.value==="boolean")return{sessionId:Z.sessionId,configId:Z.configId,type:"boolean",value:Z.value};return{sessionId:Z.sessionId,configId:Z.configId,value:Z.value}}function o9(Z,Q){let X=s4({configOptions:Q.configOptions});return{models:X.models??Z.models,currentModelId:X.currentModelId??Z.currentModelId,configOptions:X.configOptions,modelConfigId:X.modelConfigId??Z.modelConfigId}}function e2(Z,Q){if(Z==="default")return null;if(!Q||Q.length===0)return Z;let X=Q.find((U)=>U.id===Z);if(X)return X.id;let J=Z.toLowerCase(),Y=J.includes("opus")?"opus":J.includes("sonnet")?"sonnet":J.includes("haiku")?"haiku":null;if(!Y)return Z;let W=(U)=>`${U.id} ${U.name??""} ${U.description??""}`.toLowerCase(),z=Q.filter((U)=>W(U).includes(Y));if(z.length===0)return Z;let L=(J.includes("1m")?z.find((U)=>W(U).includes("1m")):void 0)??z[0];return L?L.id:Z}async function i1(Z){try{let Q=await Z.conn.setSessionConfigOption(r9({sessionId:Z.sessionId,configId:Z.configId,value:Z.value}));return o9(Z.metadata,Q)}catch(Q){return console.warn(`[acp] setSessionConfigOption(${Z.label}) failed; using agent default.`,Q instanceof Error?Q.message:Q),Z.metadata}}async function r4(Z){let Q=A4(Z.spawn),X=[],J=0,Y=4096;Q.stderr.on("data",(S)=>{X.push(S),J+=S.length;while(J>Y*2&&X.length>1){let p=X.shift();if(p)J-=p.length}});let W=()=>{let S=Buffer.concat(X).toString("utf8");return S.length>Y?S.slice(-Y):S},z=T2(Z.spawn.cwd),q={current:null},L={current:null},U={at:Date.now()},x=null,G=t2(Q.stdin),h=n2(Q.stdout),C=p2(G,h),f=new a2((S)=>({requestPermission:async(p)=>{let c=p.options,Q0=c?.find((r)=>r.kind==="allow_once")??c?.find((r)=>r.kind==="allow_always");if(Q0)return{outcome:{outcome:"selected",optionId:Q0.optionId}};return{outcome:{outcome:"cancelled"}}},sessionUpdate:async(p)=>{U.at=Date.now();let c=L.current;if(c){let r=p.update.sessionUpdate;if(c.updateCount+=1,c.updateCount===1||c.lastUpdateType!==r||r==="tool_call"||r==="tool_call_update")m("acp.session_update",{runId:c.runId,cardId:c.cardId,sessionId:x,updateType:r,updateCount:c.updateCount,elapsedMs:Date.now()-c.startedAt});c.lastUpdateType=r}let Q0=q.current;if(Q0)await Q0.onSessionUpdate(p)},readTextFile:z.readTextFile}),C),N=()=>Q.kill();if(Z.signal)Z.signal.addEventListener("abort",N);let R=()=>{if(Z.signal)Z.signal.removeEventListener("abort",N)},D=async(S,p)=>{if(R(),Q.kill(),s2(S))throw new u0(S.message??"Authentication required",p);if(S instanceof Error&&S.message==="ACP connection closed"){if(Z.signal?.aborted)throw new I("ACP session cancelled: abort signal received");let c=await Promise.race([Q.processCrashed,Q.waitForExit,new Promise((Q0)=>setTimeout(()=>Q0({stderr:""}),500))]);throw new I(`Runtime process exited before completion: ${c.stderr?.trim()??""}`)}throw S},y;try{y=await f.initialize({protocolVersion:K1,clientCapabilities:T4,clientInfo:r2()})}catch(S){throw await D(S,[]),Error("unreachable")}try{o2(y.protocolVersion)}catch(S){throw R(),Q.kill(),S}let g=y.authMethods?.map((S)=>S.id)??[],T;try{T=await f.newSession({cwd:Z.spawn.cwd,mcpServers:Z.mcpServers??[]})}catch(S){throw await D(S,g),Error("unreachable")}let M=T.sessionId;x=M;let w=s4(T),E=Z.modelId??null,k=E?e2(E,w.models):null;if(k&&k!==w.currentModelId)if(w.modelConfigId)w=await i1({conn:f,sessionId:M,configId:w.modelConfigId,value:k,metadata:w,label:`${w.modelConfigId}=${k}`});else console.warn(`[acp] runtime did not advertise a model config option for ${k}; using agent default.`);for(let[S,p]of Object.entries(Z.configValues??{}).sort(([c],[Q0])=>c.localeCompare(Q0))){if(S===w.modelConfigId)continue;if(!w.configOptions.some((c)=>c.id===S))continue;w=await i1({conn:f,sessionId:M,configId:S,value:p,metadata:w,label:`${S}=${String(p)}`})}R();let l=!1,L0=async()=>{if(l)return;l=!0,Q.kill(),await Promise.race([Q.waitForExit,new Promise((S)=>setTimeout(S,2000))])},O0=!1;return Q.processCrashed.then(()=>{O0=!0}),{sessionId:M,availableModels:w.models,currentModelId:w.currentModelId,availableConfigOptions:w.configOptions,isAlive:()=>!l&&!O0,dispose:L0,prompt:(S)=>n9({proc:Q,conn:f,sessionId:M,activeAdapter:q,activeTrace:L,lastUpdate:U,collectStderrTail:W},S)}}async function n9(Z,Q){let{proc:X,conn:J,sessionId:Y,activeAdapter:W,activeTrace:z,lastUpdate:q}=Z,L=Date.now(),U=Q.heartbeatMs??u9,x=l9(U),G={boardId:Q.boardId,cardId:Q.cardId,runId:Q.runId},h=l2({ctx:G,appendText:Q.appendText,appendToolActivity:Q.appendToolActivity});W.current=h,z.current={runId:Q.runId,cardId:Q.cardId,startedAt:L,updateCount:0,lastUpdateType:null},q.at=Date.now(),m("acp.prompt_started",{runId:Q.runId,cardId:Q.cardId,sessionId:Y,heartbeatWindowMs:U});let C=!1,b=null,f=()=>X.kill();Q.signal.addEventListener("abort",f);try{let N=async()=>{let g=Math.min(c9,Math.max(50,Math.floor(U/2)));b=setInterval(()=>{let M=Q.isAwaitingInput?.()??!1;if(M){q.at=Date.now();return}if(i2({nowMs:Date.now(),lastUpdateMs:q.at,windowMs:U,awaitingInput:M}))C=!0,m("acp.inactivity_timeout",{runId:Q.runId,cardId:Q.cardId,sessionId:Y,windowMs:U,silentForMs:Date.now()-q.at}),J.cancel({sessionId:Y}).catch(()=>{return}),X.kill()},g);let T=s9(Q.prompt.systemPrompt,Q.prompt.messages);await J.prompt({sessionId:Y,prompt:T}),m("acp.prompt_resolved",{runId:Q.runId,cardId:Q.cardId,sessionId:Y,elapsedMs:Date.now()-L}),h.flush({completeOpenToolCalls:!0})},R=X.waitForExit.then((g)=>({kind:"exited",exit:g})),D=N().then(()=>({kind:"ok"})).catch(async(g)=>{if(g instanceof Error&&g.message==="ACP connection closed")return{kind:"crashed",exit:await Promise.race([X.processCrashed,X.waitForExit])};throw g}),y;try{y=await Promise.race([D,X.processCrashed.then((g)=>({kind:"crashed",exit:g})),R])}catch(g){if(C)throw new U0(x);throw g}if(C)throw new U0(x);if(y.kind==="crashed")throw new I(`Runtime process exited before completion: ${y.exit.stderr.trim()}`);if(y.kind==="exited"){if(Q.signal.aborted)throw new I("ACP session cancelled: abort signal received");if(C)throw new U0(x);throw new I(`Runtime process exited unexpectedly: ${y.exit.stderr.trim()}`)}return{modelReported:"unknown",finalText:h.getFinalText(),toolCallsExecuted:h.getToolCallCount(),stderrTail:Z.collectStderrTail(),updateTypeCounts:h.getUpdateTypeCounts()}}finally{if(m("acp.prompt_finished",{runId:Q.runId,cardId:Q.cardId,sessionId:Y,elapsedMs:Date.now()-L,timedOut:C,updateCount:z.current?.updateCount??0}),b!==null)clearInterval(b);Q.signal.removeEventListener("abort",f),h.flush({completeOpenToolCalls:!0}),W.current=null,z.current=null}}var t9=30000;async function Z8(Z){let Q=A4(Z.spawn),X=t2(Q.stdin),J=n2(Q.stdout),Y=p2(X,J),z=new a2((U)=>({requestPermission:async()=>({outcome:{outcome:"cancelled"}}),sessionUpdate:async()=>{return},readTextFile:async()=>({content:""})}),Y),q=()=>Q.kill();if(Z.signal)Z.signal.addEventListener("abort",q);let L=null;try{let U=(async()=>{let G=await z.initialize({protocolVersion:K1,clientCapabilities:T4,clientInfo:r2()});o2(G.protocolVersion);let h=G.authMethods?.map((y)=>y.id)??[],C;try{C=await z.newSession({cwd:Z.spawn.cwd,mcpServers:[]})}catch(y){if(s2(y))throw new u0(y.message??"Authentication required",h);throw y}let b=s4(C),f=Z.modelId??null,N=f?e2(f,b.models):null;if(N&&N!==b.currentModelId)if(b.modelConfigId)b=await i1({conn:z,sessionId:C.sessionId,configId:b.modelConfigId,value:N,metadata:b,label:`${b.modelConfigId}=${N}`});else console.warn(`[acp] runtime did not advertise a model config option for ${N}; discovering agent default models.`);for(let[y,g]of Object.entries(Z.configValues??{}).sort(([T],[M])=>T.localeCompare(M))){if(y===b.modelConfigId)continue;if(!b.configOptions.some((T)=>T.id===y))continue;b=await i1({conn:z,sessionId:C.sessionId,configId:y,value:g,metadata:b,label:`${y}=${String(g)}`})}let R=b.models??[],D=b.currentModelId;return z.cancel({sessionId:C.sessionId}).catch(()=>{return}),{models:R,configOptions:b.configOptions,currentModelId:D}})(),x=new Promise((G,h)=>{L=setTimeout(()=>{h(new U0)},t9)});return await Promise.race([U,x])}catch(U){if(U instanceof Error&&U.message==="ACP connection closed"){if(Z.signal?.aborted)throw new I("ACP model discovery cancelled: abort signal received");throw new I("Runtime process exited during model discovery.")}throw U}finally{if(L)clearTimeout(L);if(Z.signal)Z.signal.removeEventListener("abort",q);Q.kill()}}import e9 from"node:fs/promises";import a1 from"node:os";async function Q8(Z){let Q={version:1,globalDefaultConfigId:null,runtimes:[],boardOverrides:{},cardOverrides:{}},X;try{X=await e9.readFile(Z,"utf-8")}catch(J){if(J.code==="ENOENT")return structuredClone(Q);throw J}return $1.parse(JSON.parse(X))}function o4(Z,Q,X){return{...Z.defaultConfigValues??{},...Q?.configValues??{},...X?.configValues??{}}}async function R0(Z){let Q=Z.configPath?await Q8(Z.configPath):await J0(),X=Z.cardId?Q.cardOverrides[Z.cardId]:void 0;if(X?.runtimeConfigId){let Y=Q.runtimes.find((W)=>W.id===X.runtimeConfigId);if(Y)return{entry:Y,adapter:B0(Y),runFolder:X.runFolder??Y.runFolder??a1.homedir(),modelId:X.modelId??Y.defaultModelId??null,configValues:o4(Y,void 0,X)}}let J=Q.boardOverrides[Z.boardId];if(J?.runtimeConfigId){let Y=Q.runtimes.find((W)=>W.id===J.runtimeConfigId);if(Y)return{entry:Y,adapter:B0(Y),runFolder:J.runFolder??Y.runFolder??a1.homedir(),modelId:J.modelId??Y.defaultModelId??null,configValues:o4(Y,J)}}if(Q.globalDefaultConfigId){let Y=Q.runtimes.find((W)=>W.id===Q.globalDefaultConfigId);if(Y)return{entry:Y,adapter:B0(Y),runFolder:X?.runFolder??J?.runFolder??Y.runFolder??a1.homedir(),modelId:X?.modelId??J?.modelId??Y.defaultModelId??null,configValues:o4(Y,J,X)}}throw new g0}async function X8(Z,Q={}){let J=(Q.configPath?await Q8(Q.configPath):await J0()).runtimes.find((Y)=>Y.id===Z);if(!J)return null;return{entry:J,adapter:B0(J),runFolder:J.runFolder??a1.homedir(),modelId:Q.modelId??J.defaultModelId??null,configValues:{...J.defaultConfigValues??{},...Q.configValues??{}}}}var K8=new Map;function n4(Z,Q){if(!Z)return;K8.set(Z,Q)}function J8(Z){if(!Z)return!1;return K8.get(Z)??!1}var k0=new Map,t4=new Set;function Z6(Z){k0.get(Z)?.controller.abort()}function Y8(Z){for(let[Q,X]of k0){if(X.frontendSessionId!==Z)continue;X.controller.abort(),k0.delete(Q)}}function W8(){for(let Z of k0.values())Z.controller.abort();k0.clear()}function e4(Z,Q){if(Q?.aborted)return!0;return Z instanceof Error&&/abort signal received|session cancelled/i.test(Z.message)}function V8(Z,Q,X,J){if((!Q.availableModels||Q.availableModels.length===0)&&Q.availableConfigOptions.length===0)return;j0((Y)=>{let W=Y.runtimes.find((z)=>z.id===Z);if(W){if(Q.availableModels&&Q.availableModels.length>0)W.discoveredModels=T1({adapterId:X,models:Q.availableModels,currentModelId:Q.currentModelId??J});if(Q.availableConfigOptions.length>0)W.discoveredConfigOptions=Q.availableConfigOptions}}).catch(()=>{return})}function ZZ(Z,Q){return`${Z}
|
|
19
19
|
|
|
20
20
|
Runtime run folder:
|
|
21
21
|
- Effective run folder: ${Q}
|
|
22
22
|
- When the user says "my folder", "current folder", or "run folder", they mean this selected runtime folder.
|
|
23
23
|
- Use list_run_folder and read_run_folder_file for run-folder inspection. Do not use attached context-card tools for this unless the user asks about attached board context.
|
|
24
|
-
- Filesystem access is read-only and limited to this folder. Hidden/config folders and outside-folder paths are unavailable.`}async function
|
|
24
|
+
- Filesystem access is read-only and limited to this folder. Hidden/config folders and outside-folder paths are unavailable.`}async function j8(Z,Q){let X=Date.now(),J=new AbortController;k0.set(Z.runId,{controller:J,frontendSessionId:Z.frontendSessionId}),t4.add(Z.cardId),m("cli.run_started",{runId:Z.runId,cardId:Z.cardId,frontendSessionId:Z.frontendSessionId});let Y=O4(Z.userId,Z.frontendSessionId,Z.cardId),W=!1,z=null;try{let L=(Z.runtimeConfigIdHint?await X8(Z.runtimeConfigIdHint,{modelId:Z.modelHint??null}):null)??await R0({boardId:Z.boardId,cardId:Z.cardId}),U=await L.adapter.resolveSpawnConfig(L.entry),x=Z.toolSurface??"full",G=L.adapter.supportsImages===!0;z=U;let h=R4({userId:Z.userId,frontendSessionId:Z.frontendSessionId,boardId:Z.boardId,toolSurface:x,imagesSupported:G,cardId:Z.cardId,runFolder:L.runFolder}),C=h?[h]:[];n4(Z.cardId,G);let b=Z.modelHint??L.modelId,f=C4({adapterId:L.adapter.id,configId:L.entry.id,modelId:b,configValues:L.configValues,mcpUrl:h?.url??null,runFolder:L.runFolder,toolSurface:x});m("cli.session_acquire_started",{runId:Z.runId,cardId:Z.cardId,frontendSessionId:Z.frontendSessionId});let N=await M1({key:Y,frontendSessionId:Z.frontendSessionId,fingerprint:f,open:()=>r4({spawn:{...U,cwd:L.runFolder},mcpServers:C,modelId:b,configValues:L.configValues,signal:J.signal})});m("cli.session_acquired",{runId:Z.runId,cardId:Z.cardId,frontendSessionId:Z.frontendSessionId,elapsedMs:Date.now()-X}),V8(L.entry.id,N,L.adapter.id,b);let R;try{let D=0,y="";m("cli.prompt_started",{runId:Z.runId,cardId:Z.cardId,elapsedMs:Date.now()-X}),R=await N.prompt({runId:Z.runId,boardId:Z.boardId,cardId:Z.cardId,prompt:{systemPrompt:ZZ(Z.systemPrompt,L.runFolder),messages:Z.promptMessages.map((g)=>({role:g.role,content:g.content}))},signal:J.signal,appendText:async({text:g})=>{if(D+=1,D===1)m("cli.first_partial_text_forwarded",{runId:Z.runId,cardId:Z.cardId,elapsedMs:Date.now()-X,textLength:g.length});Q({type:"partial_text",runId:Z.runId,cardId:Z.cardId,text:g})},appendToolActivity:async({entry:g})=>{let T=`${g.toolCallId}:${g.status}`;if(T!==y)y=T,m("cli.tool_activity_forwarded",{runId:Z.runId,cardId:Z.cardId,toolCallId:g.toolCallId,toolStatus:g.status,elapsedMs:Date.now()-X});Q({type:"tool_activity",runId:Z.runId,cardId:Z.cardId,activity:g})}})}catch(D){if(!N.isAlive()||D instanceof I||D instanceof U0)W=!0;throw D}Q({type:"run_settled",runId:Z.runId,cardId:Z.cardId,result:{assistantContent:R.finalText,model:R.modelReported??null,latencyMs:Date.now()-X,errorText:null,partialText:null}}),m("cli.run_settled",{runId:Z.runId,cardId:Z.cardId,elapsedMs:Date.now()-X,hasError:!1})}catch(q){let L=q instanceof Error?q.message:"Agent run failed";if(q instanceof I&&z&&!e4(q,J.signal))g4(z,L);if(!e4(q,J.signal))console.error(`[ideawave-cli] run ${Z.runId} failed:`,L);Q({type:"run_settled",runId:Z.runId,cardId:Z.cardId,result:{assistantContent:"",model:null,latencyMs:Date.now()-X,errorText:L,partialText:null}}),m("cli.run_settled",{runId:Z.runId,cardId:Z.cardId,elapsedMs:Date.now()-X,hasError:!0,errorName:q instanceof Error?q.name:"unknown"})}finally{b4(Y,W),k0.delete(Z.runId),t4.delete(Z.cardId),m("cli.run_released",{runId:Z.runId,cardId:Z.cardId,elapsedMs:Date.now()-X,sessionDead:W})}}async function H8(Z){if(t4.has(Z.cardId))return{status:"skipped"};let Q=O4(Z.userId,Z.frontendSessionId,Z.cardId),X=null;try{let J=await R0({boardId:Z.boardId,cardId:Z.cardId}),Y=await J.adapter.resolveSpawnConfig(J.entry);X=Y;let W=R4({userId:Z.userId,frontendSessionId:Z.frontendSessionId,boardId:Z.boardId,cardId:Z.cardId,runFolder:J.runFolder}),z=W?[W]:[];n4(Z.cardId,J.adapter.supportsImages===!0);let q=C4({adapterId:J.adapter.id,configId:J.entry.id,modelId:J.modelId,configValues:J.configValues,mcpUrl:W?.url??null,runFolder:J.runFolder}),L=new AbortController,U=await M1({key:Q,frontendSessionId:Z.frontendSessionId,fingerprint:q,open:()=>r4({spawn:{...Y,cwd:J.runFolder},mcpServers:z,modelId:J.modelId,configValues:J.configValues,signal:L.signal})});return V8(J.entry.id,U,J.adapter.id,J.modelId),b4(Q,!1),console.log(`[ideawave-cli] warmed runtime for card ${Z.cardId}`),{status:"ready"}}catch(J){if(J instanceof g0)return{status:"skipped"};let Y=J instanceof Error?J.message:String(J);if(J instanceof I&&X&&!e4(J))g4(X,Y);if(J instanceof I&&/(not ready|installing|warming|retry in a moment)/i.test(Y))return{status:"retryable",error:Y};return console.warn(`[ideawave-cli] warmup failed for card ${Z.cardId}:`,Y),{status:"failed",error:Y}}}import{spawn as zZ}from"node:child_process";import{randomUUID as b8}from"node:crypto";import{access as qZ,mkdir as C8}from"node:fs/promises";import{createRequire as UZ}from"node:module";import{homedir as K6,platform as R8}from"node:os";import{dirname as BZ,join as y0}from"node:path";import{randomBytes as B8,timingSafeEqual as XZ}from"node:crypto";import{lookup as KZ}from"node:dns/promises";import F8 from"node:http";import JZ from"node:https";import YZ from"node:net";import{isIP as z8}from"node:net";var q8=12582912;function QZ(Z){let Q=Z.split(".").map(Number);return Q.length===4&&Q.every((X)=>Number.isInteger(X)&&X>=0&&X<=255)?Q:null}function H0(Z,Q,X=0,J=255){return Z[0]===Q&&(Z[1]??0)>=X&&(Z[1]??0)<=J}function Q6(Z){let Q=z8(Z);if(Q===4){let Y=QZ(Z);if(!Y)return!1;if(H0(Y,0))return!1;if(H0(Y,10))return!1;if(H0(Y,100,64,127))return!1;if(H0(Y,127))return!1;if(H0(Y,169,254,254))return!1;if(H0(Y,172,16,31))return!1;if(H0(Y,192,0,0))return!1;if(H0(Y,192,168,168))return!1;if(H0(Y,198,18,19))return!1;if(H0(Y,198,51,51)&&Y[2]===100)return!1;if(H0(Y,203,0,0)&&Y[2]===113)return!1;if((Y[0]??0)>=224)return!1;return!0}if(Q!==6)return!1;let X=Z.toLowerCase().split("%")[0]??"";if(X==="::"||X==="::1")return!1;if(X.startsWith("::"))return!1;if(X.startsWith("fc")||X.startsWith("fd"))return!1;if(/^fe[89a-f]/.test(X))return!1;if(X.startsWith("ff"))return!1;let J=Number.parseInt(X.split(":")[0]??"",16);if(!Number.isFinite(J)||J<8192||J>16383)return!1;if(X.startsWith("2002:"))return!1;if(X.startsWith("3fff:"))return!1;if(X==="2001::"||X.startsWith("2001:0:"))return!1;if(X.startsWith("2001:db8:"))return!1;if(X.startsWith("2001:2:"))return!1;if(X.startsWith("2001:10:"))return!1;if(X.startsWith("2001:20:"))return!1;return!0}function v0(Z){let Q;try{Q=new URL(Z)}catch{throw Error("Browser URL is invalid")}if(Q.protocol!=="http:"&&Q.protocol!=="https:")throw Error("Only HTTP(S) browser URLs are allowed");if(Q.username||Q.password)throw Error("Browser URLs containing credentials are not allowed");let X=Q.hostname.replace(/^\[|\]$/g,"");if(z8(X)&&!Q6(X))throw Error("Browser destination is not on a public network");return Q.hash="",Q}function U8(Z){return(Q,X,J)=>{if(X.all){J(null,[Z]);return}J(null,Z.address,Z.family)}}var L8=30000;async function x8(Z){return(await KZ(Z,{all:!0,verbatim:!0})).flatMap((X)=>X.family===4||X.family===6?[{address:X.address,family:X.family}]:[])}async function w8(Z,Q=x8){let X=await Q(Z);if(X.length===0)throw Error("Browser destination did not resolve");if(X.some((J)=>!Q6(J.address)))throw Error("Browser destination resolves to a non-public network");return X.find((J)=>J.family===4)??X[0]}function O8(Z){return Array.isArray(Z)?Z[0]:Z}function WZ(Z,Q){let X=Buffer.from(Z),J=Buffer.from(Q);return X.byteLength===J.byteLength&&XZ(X,J)}function P8(Z){let Q={...Z},X=O8(Z.connection)?.split(",").map((J)=>J.trim().toLowerCase()).filter(Boolean);for(let J of[...X??[],"connection","proxy-authenticate","proxy-authorization","proxy-connection","keep-alive","te","trailer","transfer-encoding","upgrade"])delete Q[J];return Q}function VZ(Z){let Q;try{Q=new URL(`http://${Z}`)}catch{throw Error("Browser proxy CONNECT target is invalid")}let X=Number(Q.port||"443");if(!Q.hostname||Q.username||Q.password||Q.pathname!=="/"||Q.search||Q.hash||!Number.isInteger(X)||X<1||X>65535)throw Error("Browser proxy CONNECT target is invalid");return{hostname:Q.hostname.replace(/^\[|\]$/g,""),port:X}}function jZ(Z){return new Promise((Q,X)=>{let J=(W)=>{Z.off("listening",Y),X(W)},Y=()=>{Z.off("error",J);let W=Z.address();if(!W||typeof W==="string"){X(Error("Headless browser proxy did not bind a TCP port"));return}Q(W.port)};Z.once("error",J),Z.once("listening",Y),Z.listen(0,"127.0.0.1")})}function HZ(Z,Q){let X=()=>{if(!Z.destroyed)Z.destroy()},J=()=>{if(!Q.destroyed)Q.destroy()};Z.on("error",J),Z.once("close",J),Q.on("error",X),Q.once("close",X)}class X6{resolver;username=`ideawave-${B8(12).toString("hex")}`;password=B8(24).toString("base64url");sockets=new Set;server=null;port=null;constructor(Z=x8){this.resolver=Z}get serverUrl(){if(!this.port)throw Error("Headless browser proxy is not running");return`http://127.0.0.1:${this.port}`}authorized(Z){let Q=`Basic ${Buffer.from(`${this.username}:${this.password}`).toString("base64")}`;return WZ(O8(Z.headers["proxy-authorization"])??"",Q)}rejectAuthentication(Z){Z.writeHead(407,{"content-type":"text/plain; charset=utf-8","proxy-authenticate":'Basic realm="IdeaWave browser"'}),Z.end("Proxy authentication required")}async handleHttp(Z,Q){if(!this.authorized(Z)){this.rejectAuthentication(Q);return}let X;try{X=v0(Z.url??"")}catch(J){Q.writeHead(400,{"content-type":"text/plain; charset=utf-8"}),Q.end(J instanceof Error?J.message:"Invalid target");return}try{let J=await w8(X.hostname,this.resolver),W=(X.protocol==="https:"?JZ:F8).request(X,{method:Z.method,headers:P8(Z.headers),lookup:U8(J)});W.setTimeout(L8,()=>{W.destroy(Error("Browser request timed out"))}),W.once("response",(z)=>{Q.writeHead(z.statusCode??502,P8(z.headers)),z.pipe(Q)}),W.once("error",(z)=>{if(Q.headersSent)Q.destroy(z);else Q.writeHead(502,{"content-type":"text/plain; charset=utf-8"}),Q.end("Browser request failed")}),Z.pipe(W)}catch(J){Q.writeHead(403,{"content-type":"text/plain; charset=utf-8"}),Q.end(J instanceof Error?J.message:"Browser destination blocked")}}async handleConnect(Z,Q,X){if(!this.authorized(Z)){Q.end(`HTTP/1.1 407 Proxy Authentication Required\r
|
|
25
25
|
Proxy-Authenticate: Basic realm="IdeaWave browser"\r
|
|
26
26
|
Connection: close\r
|
|
27
27
|
\r
|
|
28
|
-
`);return}try{let
|
|
28
|
+
`);return}try{let J=VZ(Z.url??""),Y=await w8(J.hostname,this.resolver),W=YZ.connect({host:Y.address,family:Y.family,port:J.port});this.sockets.add(W),HZ(Q,W),W.setTimeout(L8,()=>W.destroy()),W.once("connect",()=>{if(Q.write(`HTTP/1.1 200 Connection Established\r
|
|
29
29
|
\r
|
|
30
|
-
`),X.byteLength>0)W.write(X);Q.pipe(W),W.pipe(Q)}),W.once("close",()=>this.sockets.delete(W))}catch(
|
|
30
|
+
`),X.byteLength>0)W.write(X);Q.pipe(W),W.pipe(Q)}),W.once("close",()=>this.sockets.delete(W))}catch(J){Q.end(`HTTP/1.1 403 Forbidden\r
|
|
31
31
|
Content-Type: text/plain; charset=utf-8\r
|
|
32
32
|
Connection: close\r
|
|
33
33
|
\r
|
|
34
|
-
${K instanceof Error?K.message:"Browser destination blocked"}`)}}async start(){if(this.server)return;let Z=p2.createServer((Q,X)=>{this.handleHttp(Q,X).catch((K)=>{if(X.headersSent)X.destroy(K);else X.writeHead(500),X.end()})});Z.on("connect",(Q,X,K)=>{this.handleConnect(Q,X,K).catch(()=>X.destroy())}),Z.on("connection",(Q)=>{this.sockets.add(Q),Q.on("error",()=>Q.destroy()),Q.once("close",()=>this.sockets.delete(Q))}),this.port=await G9(Z),this.server=Z}async close(){let Z=this.server;this.server=null,this.port=null;for(let Q of this.sockets)Q.destroy();if(this.sockets.clear(),!Z)return;await new Promise((Q)=>Z.close(()=>Q()))}}var X8=8,S9={width:720,height:442},I9=320,u9=180,J8=2048,T9=45000,A9=12582912,K8=300;function Y8(Z,Q,X){return Math.min(X,Math.max(Q,Math.round(Z)))}function l9(){if(Q8()==="darwin")return v0(c4(),"Library","Application Support","IdeaWave","browser");if(Q8()==="win32")return v0(process.env.LOCALAPPDATA??v0(c4(),"AppData","Local"),"IdeaWave","browser");return v0(process.env.XDG_CONFIG_HOME??v0(c4(),".config"),"ideawave","browser")}function c9(Z=l9()){return{profile:v0(Z,"profile"),browsers:v0(Z,"engines")}}async function d9(Z){let X=k9(import.meta.url).resolve("playwright-core/package.json"),K=v0(_9(X),"cli.js");await new Promise((Y,W)=>{let z=E9(process.execPath,[K,"install","chromium","--no-shell"],{stdio:"inherit",env:{...process.env,PLAYWRIGHT_BROWSERS_PATH:Z}});z.once("error",W),z.once("exit",(B)=>{if(B===0)Y();else W(Error(`Chromium installation exited with code ${B??"unknown"}`))})})}function a9(Z){return{headless:!0,viewport:S9,acceptDownloads:!1,serviceWorkers:"allow",proxy:{server:Z.serverUrl,username:Z.username,password:Z.password},args:["--disable-quic","--disable-session-crashed-bubble","--hide-crash-restore-bubble","--no-first-run","--proxy-bypass-list=<-loopback>","--force-webrtc-ip-handling-policy=disable_non_proxied_udp"]}}async function d4(Z){let Q=[...Z.values()].map((X)=>X.handle);Z.clear(),await Promise.all(Q.map((X)=>X.dispose().catch(()=>{return})))}async function i9(Z){let Q=[],X=Z;while(X?.parentFrame()){let Y=await(await X.frameElement()).evaluate((W)=>{if(W.id)return`#${globalThis.CSS?.escape?globalThis.CSS.escape(W.id):W.id.replace(/[^a-zA-Z0-9_-]/g,(q)=>`\\${q}`)}`;let z=[],B=W;while(B&&B!==B.ownerDocument.documentElement&&z.length<8){let w=B.localName||"*",q=B.parentElement;if(q){let b=[...q.children].filter((M)=>M.localName===B?.localName);if(b.length>1)w+=`:nth-of-type(${b.indexOf(B)+1})`}z.unshift(w),B=q}return z.join(" > ")});Q.unshift(Y||"iframe"),X=X.parentFrame()}return Q}async function W8(Z){return Z.evaluate((Q)=>{let X=null;if(Q.id)X=`#${globalThis.CSS?.escape?globalThis.CSS.escape(Q.id):Q.id.replace(/[^a-zA-Z0-9_-]/g,(z)=>`\\${z}`)}`;else{let W=[],z=Q;while(z&&z!==z.ownerDocument.documentElement&&W.length<8){let B=z.localName||"*",w=z.parentElement;if(w){let q=[...w.children].filter((b)=>b.localName===z?.localName);if(q.length>1)B+=`:nth-of-type(${q.indexOf(z)+1})`}W.unshift(B),z=w}X=W.join(" > ")||null}let K=(Q.innerText||Q.textContent||"").replace(/\s+/g," ").trim().slice(0,500),Y={tag:Q.localName,text:K,selector:X};if(Q instanceof HTMLAnchorElement)Y.href=Q.href;if(Q instanceof HTMLInputElement)Y.inputType=Q.type,Y.value=Q.type==="password"?"":Q.value.slice(0,500);if(Q instanceof HTMLButtonElement||Q instanceof HTMLInputElement||Q instanceof HTMLSelectElement||Q instanceof HTMLTextAreaElement)Y.disabled=Q.disabled;return Y})}class V8{page;onClose;revision=e2();refs=new Map;refCounter=0;eventListeners=new Set;frameListeners=new Set;cdp=null;stateTimer=null;closed=!1;constructor(Z,Q){this.page=Z;this.onClose=Q}async initialize(Z){this.page.setDefaultNavigationTimeout(T9),this.page.setDefaultTimeout(12000),this.page.on("framenavigated",(Q)=>{if(Q!==this.page.mainFrame()||!/^https?:/.test(Q.url()))return;this.revision=e2(),d4(this.refs),this.emitSoon()}),this.page.on("domcontentloaded",()=>this.emitSoon()),this.page.on("load",()=>this.emitSoon()),this.page.on("download",(Q)=>void Q.cancel()),this.page.on("popup",(Q)=>{(async()=>{await Q.waitForLoadState("domcontentloaded",{timeout:5000}).catch(()=>{return});let X=Q.url();if(await Q.close().catch(()=>{return}),/^https?:/.test(X))await this.navigate(X)})().catch(()=>{return})}),this.cdp=await this.page.context().newCDPSession(this.page),this.cdp.on("Page.screencastFrame",(Q)=>{let X=Buffer.from(Q.data,"base64");for(let K of this.frameListeners)K(X);this.cdp?.send("Page.screencastFrameAck",{sessionId:Q.sessionId})}),await this.cdp.send("Page.startScreencast",{format:"jpeg",quality:75,everyNthFrame:2}),await this.navigate(Z)}get currentRevision(){return this.revision}get currentUrl(){return this.page.url()}onEvent(Z){return this.eventListeners.add(Z),this.state().then((Q)=>Z({event:"state",payload:Q})).catch(()=>{return}),()=>this.eventListeners.delete(Z)}onFrame(Z){return this.frameListeners.add(Z),this.page.screenshot({type:"jpeg",quality:75}).then((Q)=>Z(Buffer.from(Q))).catch(()=>{return}),()=>this.frameListeners.delete(Z)}emit(Z){for(let Q of this.eventListeners)Q(Z)}emitSoon(){if(this.stateTimer||this.closed)return;this.stateTimer=setTimeout(()=>{this.stateTimer=null,this.state().then((Z)=>this.emit({event:"state",payload:Z})).catch(()=>{return})},50)}async metrics(){return this.page.evaluate(()=>{let{documentElement:Z,body:Q}=document;return{scrollX:window.scrollX,scrollY:window.scrollY,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight,documentWidth:Math.max(Z?.scrollWidth??0,Q?.scrollWidth??0),documentHeight:Math.max(Z?.scrollHeight??0,Q?.scrollHeight??0)}})}async state(){let Z=this.page.url(),[Q,X,K]=await Promise.all([this.page.title().catch(()=>Z),this.page.evaluate(()=>{return document.querySelector('link[rel~="icon"]')?.href||null}).catch(()=>null),this.metrics()]);return{sourceUrl:Z,title:Q||Z,faviconUrl:X,localFaviconUrl:null,revision:this.revision,metrics:K,frozen:!1}}async navigate(Z){let Q=C0(Z).href;return this.emit({event:"navigating",payload:{sourceUrl:this.page.url(),revision:this.revision}}),await this.page.goto(Q,{waitUntil:"domcontentloaded"}),this.emitSoon(),{ok:!0}}async refresh(){return this.emit({event:"navigating",payload:{sourceUrl:this.page.url(),revision:this.revision}}),await this.page.reload({waitUntil:"domcontentloaded"}),this.emitSoon(),{ok:!0}}async goBack(){return await this.page.goBack({waitUntil:"domcontentloaded"}),this.emitSoon(),{ok:!0}}async goForward(){return await this.page.goForward({waitUntil:"domcontentloaded"}),this.emitSoon(),{ok:!0}}async setViewport(Z,Q){await this.page.setViewportSize({width:Y8(Z,I9,J8),height:Y8(Q,u9,J8)}),this.emitSoon()}async input(Z){for(let Q of Z)if(Q.type==="pointer"){if(await this.page.mouse.move(Q.x,Q.y),Q.phase==="down")await this.page.mouse.down({button:Q.button??"left"});else if(Q.phase==="up")await this.page.mouse.up({button:Q.button??"left"})}else if(Q.type==="wheel")await this.page.mouse.wheel(Q.deltaX,Q.deltaY);else if(Q.type==="key")if(Q.phase==="down")await this.page.keyboard.down(Q.key);else await this.page.keyboard.up(Q.key);else await this.page.keyboard.insertText(Q.text);this.emitSoon()}async framesWithPaths(){let Z=this.page.frames().slice(0,24);return Promise.all(Z.map(async(Q)=>({frame:Q,path:await i9(Q)})))}refFor(Z,Q){for(let[K,Y]of this.refs)if(Y.handle===Z)return K;let X=`${this.revision}:e${++this.refCounter}`;return this.refs.set(X,{handle:Z,framePath:Q}),X}async resolveTarget(Z){if("ref"in Z&&Z.ref){if(!Z.ref.startsWith(`${this.revision}:`))throw Error("STALE_BROWSER_REF: inspect the browser again");let Y=this.refs.get(Z.ref);if(!Y)throw Error("STALE_BROWSER_REF: inspect the browser again");return Y}let Q="framePath"in Z?Z.framePath??[]:[],X=(await this.framesWithPaths()).find((Y)=>JSON.stringify(Y.path)===JSON.stringify(Q));if(!X)throw Error("Browser frame was not found");let K=null;if("selector"in Z&&Z.selector)K=await X.frame.$(Z.selector);if(!K&&"textQuote"in Z&&Z.textQuote?.exact)K=await X.frame.getByText(Z.textQuote.exact,{exact:!1}).first().elementHandle();if(!K)throw Error("Browser element was not found");return{handle:K,framePath:X.path}}async locate(Z){let Q=await this.resolveTarget(Z),X=await Q.handle.boundingBox();if(!X)throw Error("STALE_BROWSER_REF: browser element is detached");let K=await Q.handle.evaluate((W)=>{let z=W.getBoundingClientRect(),B=(W.textContent??"").replace(/\s+/g," ").trim().slice(0,2000);return{rect:{x:z.x,y:z.y,width:z.width,height:z.height},scrollX:W.ownerDocument.defaultView?.scrollX??0,scrollY:W.ownerDocument.defaultView?.scrollY??0,text:B}}),Y=await W8(Q.handle);return{revision:this.revision,ref:this.refFor(Q.handle,Q.framePath),selector:Y.selector,textQuote:K.text?{exact:K.text}:null,framePath:Q.framePath,frame:K.rect,viewport:X,document:{x:K.rect.x+K.scrollX,y:K.rect.y+K.scrollY,width:K.rect.width,height:K.rect.height}}}async click(Z){return await(await this.resolveTarget(Z)).handle.click(),this.emitSoon(),{ok:!0,revision:this.revision}}async highlight(Z,Q){let X=await this.resolveTarget(Z);return await X.handle.evaluate((K,Y)=>{let W=K;W.dataset.ideawaveBrowserHighlight="true",W.style.outline=`3px solid ${Y}`,W.style.outlineOffset="2px"},Q),this.locate({ref:this.refFor(X.handle,X.framePath)})}async scroll(Z){await this.page.evaluate((X)=>{window.scrollTo({left:typeof X.left==="number"?X.left:window.scrollX,top:typeof X.top==="number"?X.top:window.scrollY+(X.deltaY??0)})},Z);let Q=await this.metrics();return this.emitSoon(),{ok:!0,metrics:Q,revision:this.revision}}async find(Z,Q=!1){let X=!1;for(let K of this.page.frames().slice(0,24))if(X=await K.evaluate(({value:Y,backwards:W})=>window.find(Y,!1,W,!0,!1,!0,!1),{value:Z.slice(0,500),backwards:Q}).catch(()=>!1),X)break;return{found:X,query:Z,revision:this.revision}}async selection(){for(let{frame:Z,path:Q}of await this.framesWithPaths()){let X=await Z.evaluateHandle(()=>{let Y=window.getSelection();if(!Y||Y.isCollapsed||!Y.anchorNode)return null;return Y.anchorNode.nodeType===Node.ELEMENT_NODE?Y.anchorNode:Y.anchorNode.parentElement}),K=X.asElement();if(!K){await X.dispose();continue}return this.locate({ref:this.refFor(K,Q)})}throw Error("No page selection is available")}async inspect(){await this.page.waitForLoadState("domcontentloaded",{timeout:12000}).catch(()=>{return}),await d4(this.refs),this.refCounter=0;let Z=[],Q=[],X=[],K=[];for(let{frame:z,path:B}of await this.framesWithPaths()){let w=await z.locator("body").innerText({timeout:1500}).catch(()=>"");if(w.trim())K.push(w.replace(/\s+/g," ").trim());for(let[q,b,M]of[["h1,h2,h3,h4,h5,h6",Z,200],["a[href]",Q,K8],["button,input,select,textarea,[role=button]",X,K8]]){if(b.length>=M)continue;let x=(await z.$$(q)).slice(0,M-b.length);for(let y of x){let v=y;if(!await v.isVisible().catch(()=>!1)){await v.dispose();continue}let $=await W8(v);b.push({ref:this.refFor(v,B),...$,framePath:B})}}}let Y=K.join(`
|
|
35
|
-
`),W=await this.state();return{sourceUrl:W.sourceUrl,title:W.title,mode:"live",revision:this.revision,untrustedContent:!0,visibleText:Y.slice(0,25000),truncated:Y.length>25000,headings:Z,links:Q,controls:X,metrics:W.metrics}}async snapshotHtml(){return this.page.evaluate(()=>{let Z=document.documentElement.cloneNode(!0),Q=document.documentElement.querySelectorAll("*"),X=Z.querySelectorAll("*");for(let K=0;K<Q.length;K+=1){let Y=Q[K],W=X[K];if(!Y||!W)continue;if(Y instanceof HTMLInputElement&&W instanceof HTMLInputElement){if(Y.type==="password")W.removeAttribute("value");else W.setAttribute("value",Y.value);if(Y.checked)W.setAttribute("checked","");else W.removeAttribute("checked")}else if(Y instanceof HTMLTextAreaElement&&W instanceof HTMLTextAreaElement)W.textContent=Y.value;else if(Y instanceof HTMLOptionElement&&W instanceof HTMLOptionElement)if(Y.selected)W.setAttribute("selected","");else W.removeAttribute("selected");else if(Y instanceof HTMLImageElement&&W instanceof HTMLImageElement&&Y.currentSrc)W.setAttribute("src",Y.currentSrc),W.removeAttribute("srcset")}return`<!doctype html>${Z.outerHTML}`})}async fetchResource(Z,Q=A9){let X=C0(Z).href,K=await this.page.context().request.get(X,{failOnStatusCode:!1,maxRedirects:5,timeout:30000}),Y=Number(K.headers()["content-length"]??0);if(Number.isFinite(Y)&&Y>Q)throw Error("Browser proxy response exceeds the size limit");let W=Buffer.from(await K.body());if(W.byteLength>Q)throw Error("Browser proxy response exceeds the size limit");return{url:K.url(),status:K.status(),headers:K.headers(),body:W}}async command(Z){switch(Z.type){case"inspect":return this.inspect();case"locate":return this.locate(Z.target);case"click":return this.click(Z.target);case"scroll":return this.scroll({deltaY:typeof Z.deltaY==="number"?Z.deltaY:void 0,left:typeof Z.left==="number"?Z.left:void 0,top:typeof Z.top==="number"?Z.top:void 0});case"find":return this.find(String(Z.query??""),Z.direction==="backward");case"refresh":return this.refresh();case"navigate":return this.navigate(String(Z.url??""));case"back":return this.goBack();case"forward":return this.goForward();case"highlight":return this.highlight(Z.target,String(Z.color??"#FDE047"));case"selection":return this.selection();case"snapshot":return{sourceUrl:this.page.url(),title:await this.page.title(),revision:this.revision};default:throw Error("Unsupported browser command")}}async close(){if(this.closed)return;if(this.closed=!0,this.stateTimer)clearTimeout(this.stateTimer);this.stateTimer=null,await d4(this.refs),await this.cdp?.send("Page.stopScreencast").catch(()=>{return}),await this.cdp?.detach().catch(()=>{return}),await this.page.close({runBeforeUnload:!1}).catch(()=>{return}),this.eventListeners.clear(),this.frameListeners.clear(),this.onClose()}}class t0{onStatus;networkProxy;context=null;startPromise=null;pages=new Set;status={phase:"idle"};constructor(Z,Q){this.onStatus=Z;this.networkProxy=Q??new l4}setStatus(Z){this.status=Z,this.onStatus?.(Z)}getStatus(){return this.status}async startContext(){this.setStatus({phase:"starting",message:"Starting local Chrome…"});let Z=c9();await Promise.all([Z8(Z.profile,{recursive:!0}),Z8(Z.browsers,{recursive:!0}),this.networkProxy.start()]),process.env.PLAYWRIGHT_BROWSERS_PATH=Z.browsers;let{chromium:Q}=await import("playwright-core"),X=a9(this.networkProxy),K=null;if(await m9(Q.executablePath()).then(()=>!0,()=>!1))try{K=await Q.launchPersistentContext(Z.profile,{...X,channel:"chromium"})}catch{K=null}if(!K)try{K=await Q.launchPersistentContext(Z.profile,{...X,channel:"chrome"})}catch{K=null}if(!K)this.setStatus({phase:"downloading",message:"Downloading the IdeaWave Chromium engine…"}),await d9(Z.browsers),K=await Q.launchPersistentContext(Z.profile,{...X,channel:"chromium"});await K.route("**/*",async(B)=>{let w=B.request().url();try{let q=new URL(w);if(q.protocol==="http:"||q.protocol==="https:")C0(w);else if(q.protocol!=="data:"&&q.protocol!=="blob:"){await B.abort("blockedbyclient");return}await B.continue()}catch{await B.abort("blockedbyclient")}});let W=K.pages();await Promise.all(W.slice(1).map((B)=>B.close({runBeforeUnload:!1}).catch(()=>{return})));let z=W[0];if(z&&z.url()!=="about:blank")await z.goto("about:blank").catch(()=>{return});return this.context=K,this.setStatus({phase:"ready"}),K}ensureContext(){if(this.context)return Promise.resolve(this.context);if(this.startPromise)return this.startPromise;return this.startPromise=this.startContext().catch((Z)=>{throw this.setStatus({phase:"failed",message:Z instanceof Error?Z.message:String(Z)}),this.startPromise=null,Z}),this.startPromise}async createPage(Z){if(this.pages.size>=X8)throw Error(`IdeaWave supports at most ${X8} simultaneous live browser cards`);let Q=await this.ensureContext(),X=Q.pages().find((Y)=>Y.url()==="about:blank"&&![...this.pages].some((W)=>W.page===Y));X??=await Q.newPage();let K=new V8(X,()=>this.pages.delete(K));this.pages.add(K);try{return await K.initialize(Z),K}catch(Y){throw await K.close(),Y}}async close(){let Z=[...this.pages];this.pages.clear(),await Promise.all(Z.map((X)=>X.close()));let Q=this.context;this.context=null,this.startPromise=null,await Q?.close().catch(()=>{return}),await this.networkProxy.close(),this.setStatus({phase:"idle"})}}import{randomBytes as z6,randomUUID as fQ}from"node:crypto";import*as Z4 from"css-tree";var p9=new Set([65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]),T="�",V;(function(Z){Z[Z.EOF=-1]="EOF",Z[Z.NULL=0]="NULL",Z[Z.TABULATION=9]="TABULATION",Z[Z.CARRIAGE_RETURN=13]="CARRIAGE_RETURN",Z[Z.LINE_FEED=10]="LINE_FEED",Z[Z.FORM_FEED=12]="FORM_FEED",Z[Z.SPACE=32]="SPACE",Z[Z.EXCLAMATION_MARK=33]="EXCLAMATION_MARK",Z[Z.QUOTATION_MARK=34]="QUOTATION_MARK",Z[Z.AMPERSAND=38]="AMPERSAND",Z[Z.APOSTROPHE=39]="APOSTROPHE",Z[Z.HYPHEN_MINUS=45]="HYPHEN_MINUS",Z[Z.SOLIDUS=47]="SOLIDUS",Z[Z.DIGIT_0=48]="DIGIT_0",Z[Z.DIGIT_9=57]="DIGIT_9",Z[Z.SEMICOLON=59]="SEMICOLON",Z[Z.LESS_THAN_SIGN=60]="LESS_THAN_SIGN",Z[Z.EQUALS_SIGN=61]="EQUALS_SIGN",Z[Z.GREATER_THAN_SIGN=62]="GREATER_THAN_SIGN",Z[Z.QUESTION_MARK=63]="QUESTION_MARK",Z[Z.LATIN_CAPITAL_A=65]="LATIN_CAPITAL_A",Z[Z.LATIN_CAPITAL_Z=90]="LATIN_CAPITAL_Z",Z[Z.RIGHT_SQUARE_BRACKET=93]="RIGHT_SQUARE_BRACKET",Z[Z.GRAVE_ACCENT=96]="GRAVE_ACCENT",Z[Z.LATIN_SMALL_A=97]="LATIN_SMALL_A",Z[Z.LATIN_SMALL_Z=122]="LATIN_SMALL_Z"})(V||(V={}));var t={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"};function I1(Z){return Z>=55296&&Z<=57343}function H8(Z){return Z>=56320&&Z<=57343}function j8(Z,Q){return(Z-55296)*1024+9216+Q}function u1(Z){return Z!==32&&Z!==10&&Z!==13&&Z!==9&&Z!==12&&Z>=1&&Z<=31||Z>=127&&Z<=159}function T1(Z){return Z>=64976&&Z<=65007||p9.has(Z)}var F;(function(Z){Z.controlCharacterInInputStream="control-character-in-input-stream",Z.noncharacterInInputStream="noncharacter-in-input-stream",Z.surrogateInInputStream="surrogate-in-input-stream",Z.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",Z.endTagWithAttributes="end-tag-with-attributes",Z.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",Z.unexpectedSolidusInTag="unexpected-solidus-in-tag",Z.unexpectedNullCharacter="unexpected-null-character",Z.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",Z.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",Z.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",Z.missingEndTagName="missing-end-tag-name",Z.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",Z.unknownNamedCharacterReference="unknown-named-character-reference",Z.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",Z.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",Z.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",Z.eofBeforeTagName="eof-before-tag-name",Z.eofInTag="eof-in-tag",Z.missingAttributeValue="missing-attribute-value",Z.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",Z.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",Z.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",Z.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",Z.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",Z.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",Z.missingDoctypePublicIdentifier="missing-doctype-public-identifier",Z.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",Z.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",Z.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",Z.cdataInHtmlContent="cdata-in-html-content",Z.incorrectlyOpenedComment="incorrectly-opened-comment",Z.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",Z.eofInDoctype="eof-in-doctype",Z.nestedComment="nested-comment",Z.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",Z.eofInComment="eof-in-comment",Z.incorrectlyClosedComment="incorrectly-closed-comment",Z.eofInCdata="eof-in-cdata",Z.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",Z.nullCharacterReference="null-character-reference",Z.surrogateCharacterReference="surrogate-character-reference",Z.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",Z.controlCharacterReference="control-character-reference",Z.noncharacterCharacterReference="noncharacter-character-reference",Z.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",Z.missingDoctypeName="missing-doctype-name",Z.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",Z.duplicateAttribute="duplicate-attribute",Z.nonConformingDoctype="non-conforming-doctype",Z.missingDoctype="missing-doctype",Z.misplacedDoctype="misplaced-doctype",Z.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",Z.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",Z.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",Z.openElementsLeftAfterEof="open-elements-left-after-eof",Z.abandonedHeadElementChild="abandoned-head-element-child",Z.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",Z.nestedNoscriptInHead="nested-noscript-in-head",Z.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"})(F||(F={}));var r9=65536;class a4{constructor(Z){this.handler=Z,this.html="",this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=r9,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1}get col(){return this.pos-this.lineStartPos+Number(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(Z,Q){let{line:X,col:K,offset:Y}=this,W=K+Q,z=Y+Q;return{code:Z,startLine:X,endLine:X,startCol:W,endCol:W,startOffset:z,endOffset:z}}_err(Z){if(this.handler.onParseError&&this.lastErrOffset!==this.offset)this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(Z,0))}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(Z){if(this.pos!==this.html.length-1){let Q=this.html.charCodeAt(this.pos+1);if(H8(Q))return this.pos++,this._addGap(),j8(Z,Q)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,V.EOF;return this._err(F.surrogateInInputStream),Z}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){if(this.willDropParsedChunk())this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0}write(Z,Q){if(this.html.length>0)this.html+=Z;else this.html=Z;this.endOfChunkHit=!1,this.lastChunkWritten=Q}insertHtmlAtCurrentPos(Z){this.html=this.html.substring(0,this.pos+1)+Z+this.html.substring(this.pos+1),this.endOfChunkHit=!1}startsWith(Z,Q){if(this.pos+Z.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(Q)return this.html.startsWith(Z,this.pos);for(let X=0;X<Z.length;X++)if((this.html.charCodeAt(this.pos+X)|32)!==Z.charCodeAt(X))return!1;return!0}peek(Z){let Q=this.pos+Z;if(Q>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,V.EOF;let X=this.html.charCodeAt(Q);return X===V.CARRIAGE_RETURN?V.LINE_FEED:X}advance(){if(this.pos++,this.isEol)this.isEol=!1,this.line++,this.lineStartPos=this.pos;if(this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,V.EOF;let Z=this.html.charCodeAt(this.pos);if(Z===V.CARRIAGE_RETURN)return this.isEol=!0,this.skipNextNewLine=!0,V.LINE_FEED;if(Z===V.LINE_FEED){if(this.isEol=!0,this.skipNextNewLine)return this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()}if(this.skipNextNewLine=!1,I1(Z))Z=this._processSurrogate(Z);if(!(this.handler.onParseError===null||Z>31&&Z<127||Z===V.LINE_FEED||Z===V.CARRIAGE_RETURN||Z>159&&Z<64976))this._checkForProblematicCharacters(Z);return Z}_checkForProblematicCharacters(Z){if(u1(Z))this._err(F.controlCharacterInInputStream);else if(T1(Z))this._err(F.noncharacterInInputStream)}retreat(Z){this.pos-=Z;while(this.pos<this.lastGapPos)this.lastGapPos=this.gapStack.pop(),this.pos--;this.isEol=!1}}var k;(function(Z){Z[Z.CHARACTER=0]="CHARACTER",Z[Z.NULL_CHARACTER=1]="NULL_CHARACTER",Z[Z.WHITESPACE_CHARACTER=2]="WHITESPACE_CHARACTER",Z[Z.START_TAG=3]="START_TAG",Z[Z.END_TAG=4]="END_TAG",Z[Z.COMMENT=5]="COMMENT",Z[Z.DOCTYPE=6]="DOCTYPE",Z[Z.EOF=7]="EOF",Z[Z.HIBERNATION=8]="HIBERNATION"})(k||(k={}));function A1(Z,Q){for(let X=Z.attrs.length-1;X>=0;X--)if(Z.attrs[X].name===Q)return Z.attrs[X].value;return null}var n9=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function z8(Z){if(Z>=55296&&Z<=57343||Z>1114111)return 65533;return n9.get(Z)??Z}function q8(Z){let Q=atob(Z),X=Q.length&-2,K=new Uint16Array(X/2);for(let Y=0,W=0;Y<X;Y+=2){let z=Q.charCodeAt(Y),B=Q.charCodeAt(Y+1);K[W++]=z|B<<8}return K}var i4=q8("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg");var r;(function(Z){Z[Z.VALUE_LENGTH=49152]="VALUE_LENGTH",Z[Z.FLAG13=8192]="FLAG13",Z[Z.BRANCH_LENGTH=8064]="BRANCH_LENGTH",Z[Z.JUMP_TABLE=127]="JUMP_TABLE"})(r||(r={}));var c;(function(Z){Z[Z.NUM=35]="NUM",Z[Z.SEMI=59]="SEMI",Z[Z.EQUALS=61]="EQUALS",Z[Z.ZERO=48]="ZERO",Z[Z.NINE=57]="NINE",Z[Z.LOWER_A=97]="LOWER_A",Z[Z.LOWER_F=102]="LOWER_F",Z[Z.LOWER_X=120]="LOWER_X",Z[Z.LOWER_Z=122]="LOWER_Z",Z[Z.UPPER_A=65]="UPPER_A",Z[Z.UPPER_F=70]="UPPER_F",Z[Z.UPPER_Z=90]="UPPER_Z"})(c||(c={}));var U8=32;function p4(Z){return Z>=c.ZERO&&Z<=c.NINE}function t9(Z){return Z>=c.UPPER_A&&Z<=c.UPPER_F||Z>=c.LOWER_A&&Z<=c.LOWER_F}function e9(Z){return Z>=c.UPPER_A&&Z<=c.UPPER_Z||Z>=c.LOWER_A&&Z<=c.LOWER_Z||p4(Z)}function ZZ(Z){return Z===c.EQUALS||e9(Z)}var p;(function(Z){Z[Z.EntityStart=0]="EntityStart",Z[Z.NumericStart=1]="NumericStart",Z[Z.NumericDecimal=2]="NumericDecimal",Z[Z.NumericHex=3]="NumericHex",Z[Z.NamedEntity=4]="NamedEntity"})(p||(p={}));var B0;(function(Z){Z[Z.Legacy=0]="Legacy",Z[Z.Strict=1]="Strict",Z[Z.Attribute=2]="Attribute"})(B0||(B0={}));class s4{decodeTree;emitCodePoint;errors;constructor(Z,Q,X){this.decodeTree=Z,this.emitCodePoint=Q,this.errors=X}state=p.EntityStart;consumed=1;result=0;treeIndex=0;excess=1;decodeMode=B0.Strict;runConsumed=0;startEntity(Z){this.decodeMode=Z,this.state=p.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(Z,Q){switch(this.state){case p.EntityStart:{if(Z.charCodeAt(Q)===c.NUM)return this.state=p.NumericStart,this.consumed+=1,this.stateNumericStart(Z,Q+1);return this.state=p.NamedEntity,this.stateNamedEntity(Z,Q)}case p.NumericStart:return this.stateNumericStart(Z,Q);case p.NumericDecimal:return this.stateNumericDecimal(Z,Q);case p.NumericHex:return this.stateNumericHex(Z,Q);case p.NamedEntity:return this.stateNamedEntity(Z,Q)}}stateNumericStart(Z,Q){if(Q>=Z.length)return-1;if((Z.charCodeAt(Q)|U8)===c.LOWER_X)return this.state=p.NumericHex,this.consumed+=1,this.stateNumericHex(Z,Q+1);return this.state=p.NumericDecimal,this.stateNumericDecimal(Z,Q)}stateNumericHex(Z,Q){while(Q<Z.length){let X=Z.charCodeAt(Q);if(p4(X)||t9(X)){let K=X<=c.NINE?X-c.ZERO:(X|U8)-c.LOWER_A+10;this.result=this.result*16+K,this.consumed++,Q++}else return this.emitNumericEntity(X,3)}return-1}stateNumericDecimal(Z,Q){while(Q<Z.length){let X=Z.charCodeAt(Q);if(p4(X))this.result=this.result*10+(X-c.ZERO),this.consumed++,Q++;else return this.emitNumericEntity(X,2)}return-1}emitNumericEntity(Z,Q){if(this.consumed<=Q)return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(Z===c.SEMI)this.consumed+=1;else if(this.decodeMode===B0.Strict)return 0;if(this.emitCodePoint(z8(this.result),this.consumed),this.errors){if(Z!==c.SEMI)this.errors.missingSemicolonAfterCharacterReference();this.errors.validateNumericCharacterReference(this.result)}return this.consumed}stateNamedEntity(Z,Q){let{decodeTree:X}=this,K=X[this.treeIndex],Y=(K&r.VALUE_LENGTH)>>14;while(Q<Z.length){if(Y===0&&(K&r.FLAG13)!==0){let z=(K&r.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let B=K&r.JUMP_TABLE;if(Z.charCodeAt(Q)!==B)return this.result===0?0:this.emitNotTerminatedNamedEntity();Q++,this.excess++,this.runConsumed++}while(this.runConsumed<z){if(Q>=Z.length)return-1;let B=this.runConsumed-1,w=X[this.treeIndex+1+(B>>1)],q=B%2===0?w&255:w>>8&255;if(Z.charCodeAt(Q)!==q)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();Q++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(z>>1),K=X[this.treeIndex],Y=(K&r.VALUE_LENGTH)>>14}if(Q>=Z.length)break;let W=Z.charCodeAt(Q);if(W===c.SEMI&&Y!==0&&(K&r.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,Y,this.consumed+this.excess);if(this.treeIndex=QZ(X,K,this.treeIndex+Math.max(1,Y),W),this.treeIndex<0)return this.result===0||this.decodeMode===B0.Attribute&&(Y===0||ZZ(W))?0:this.emitNotTerminatedNamedEntity();if(K=X[this.treeIndex],Y=(K&r.VALUE_LENGTH)>>14,Y!==0){if(W===c.SEMI)return this.emitNamedEntityData(this.treeIndex,Y,this.consumed+this.excess);if(this.decodeMode!==B0.Strict&&(K&r.FLAG13)===0)this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0}Q++,this.excess++}return-1}emitNotTerminatedNamedEntity(){let{result:Z,decodeTree:Q}=this,X=(Q[Z]&r.VALUE_LENGTH)>>14;return this.emitNamedEntityData(Z,X,this.consumed),this.errors?.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(Z,Q,X){let{decodeTree:K}=this;if(this.emitCodePoint(Q===1?K[Z]&~(r.VALUE_LENGTH|r.FLAG13):K[Z+1],X),Q===3)this.emitCodePoint(K[Z+2],X);return X}end(){switch(this.state){case p.NamedEntity:return this.result!==0&&(this.decodeMode!==B0.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case p.NumericDecimal:return this.emitNumericEntity(0,2);case p.NumericHex:return this.emitNumericEntity(0,3);case p.NumericStart:return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case p.EntityStart:return 0}}}function QZ(Z,Q,X,K){let Y=(Q&r.BRANCH_LENGTH)>>7,W=Q&r.JUMP_TABLE;if(Y===0)return W!==0&&K===W?X:-1;if(W){let q=K-W;return q<0||q>=Y?-1:Z[X+q]-1}let z=Y+1>>1,B=0,w=Y-1;while(B<=w){let q=B+w>>>1,b=q>>1,x=Z[X+b]>>(q&1)*8&255;if(x<K)B=q+1;else if(x>K)w=q-1;else return Z[X+z+q]}return-1}var P;(function(Z){Z.HTML="http://www.w3.org/1999/xhtml",Z.MATHML="http://www.w3.org/1998/Math/MathML",Z.SVG="http://www.w3.org/2000/svg",Z.XLINK="http://www.w3.org/1999/xlink",Z.XML="http://www.w3.org/XML/1998/namespace",Z.XMLNS="http://www.w3.org/2000/xmlns/"})(P||(P={}));var L0;(function(Z){Z.TYPE="type",Z.ACTION="action",Z.ENCODING="encoding",Z.PROMPT="prompt",Z.NAME="name",Z.COLOR="color",Z.FACE="face",Z.SIZE="size"})(L0||(L0={}));var e;(function(Z){Z.NO_QUIRKS="no-quirks",Z.QUIRKS="quirks",Z.LIMITED_QUIRKS="limited-quirks"})(e||(e={}));var U;(function(Z){Z.A="a",Z.ADDRESS="address",Z.ANNOTATION_XML="annotation-xml",Z.APPLET="applet",Z.AREA="area",Z.ARTICLE="article",Z.ASIDE="aside",Z.B="b",Z.BASE="base",Z.BASEFONT="basefont",Z.BGSOUND="bgsound",Z.BIG="big",Z.BLOCKQUOTE="blockquote",Z.BODY="body",Z.BR="br",Z.BUTTON="button",Z.CAPTION="caption",Z.CENTER="center",Z.CODE="code",Z.COL="col",Z.COLGROUP="colgroup",Z.DD="dd",Z.DESC="desc",Z.DETAILS="details",Z.DIALOG="dialog",Z.DIR="dir",Z.DIV="div",Z.DL="dl",Z.DT="dt",Z.EM="em",Z.EMBED="embed",Z.FIELDSET="fieldset",Z.FIGCAPTION="figcaption",Z.FIGURE="figure",Z.FONT="font",Z.FOOTER="footer",Z.FOREIGN_OBJECT="foreignObject",Z.FORM="form",Z.FRAME="frame",Z.FRAMESET="frameset",Z.H1="h1",Z.H2="h2",Z.H3="h3",Z.H4="h4",Z.H5="h5",Z.H6="h6",Z.HEAD="head",Z.HEADER="header",Z.HGROUP="hgroup",Z.HR="hr",Z.HTML="html",Z.I="i",Z.IMG="img",Z.IMAGE="image",Z.INPUT="input",Z.IFRAME="iframe",Z.KEYGEN="keygen",Z.LABEL="label",Z.LI="li",Z.LINK="link",Z.LISTING="listing",Z.MAIN="main",Z.MALIGNMARK="malignmark",Z.MARQUEE="marquee",Z.MATH="math",Z.MENU="menu",Z.META="meta",Z.MGLYPH="mglyph",Z.MI="mi",Z.MO="mo",Z.MN="mn",Z.MS="ms",Z.MTEXT="mtext",Z.NAV="nav",Z.NOBR="nobr",Z.NOFRAMES="noframes",Z.NOEMBED="noembed",Z.NOSCRIPT="noscript",Z.OBJECT="object",Z.OL="ol",Z.OPTGROUP="optgroup",Z.OPTION="option",Z.P="p",Z.PARAM="param",Z.PLAINTEXT="plaintext",Z.PRE="pre",Z.RB="rb",Z.RP="rp",Z.RT="rt",Z.RTC="rtc",Z.RUBY="ruby",Z.S="s",Z.SCRIPT="script",Z.SEARCH="search",Z.SECTION="section",Z.SELECT="select",Z.SOURCE="source",Z.SMALL="small",Z.SPAN="span",Z.STRIKE="strike",Z.STRONG="strong",Z.STYLE="style",Z.SUB="sub",Z.SUMMARY="summary",Z.SUP="sup",Z.TABLE="table",Z.TBODY="tbody",Z.TEMPLATE="template",Z.TEXTAREA="textarea",Z.TFOOT="tfoot",Z.TD="td",Z.TH="th",Z.THEAD="thead",Z.TITLE="title",Z.TR="tr",Z.TRACK="track",Z.TT="tt",Z.U="u",Z.UL="ul",Z.SVG="svg",Z.VAR="var",Z.WBR="wbr",Z.XMP="xmp"})(U||(U={}));var J;(function(Z){Z[Z.UNKNOWN=0]="UNKNOWN",Z[Z.A=1]="A",Z[Z.ADDRESS=2]="ADDRESS",Z[Z.ANNOTATION_XML=3]="ANNOTATION_XML",Z[Z.APPLET=4]="APPLET",Z[Z.AREA=5]="AREA",Z[Z.ARTICLE=6]="ARTICLE",Z[Z.ASIDE=7]="ASIDE",Z[Z.B=8]="B",Z[Z.BASE=9]="BASE",Z[Z.BASEFONT=10]="BASEFONT",Z[Z.BGSOUND=11]="BGSOUND",Z[Z.BIG=12]="BIG",Z[Z.BLOCKQUOTE=13]="BLOCKQUOTE",Z[Z.BODY=14]="BODY",Z[Z.BR=15]="BR",Z[Z.BUTTON=16]="BUTTON",Z[Z.CAPTION=17]="CAPTION",Z[Z.CENTER=18]="CENTER",Z[Z.CODE=19]="CODE",Z[Z.COL=20]="COL",Z[Z.COLGROUP=21]="COLGROUP",Z[Z.DD=22]="DD",Z[Z.DESC=23]="DESC",Z[Z.DETAILS=24]="DETAILS",Z[Z.DIALOG=25]="DIALOG",Z[Z.DIR=26]="DIR",Z[Z.DIV=27]="DIV",Z[Z.DL=28]="DL",Z[Z.DT=29]="DT",Z[Z.EM=30]="EM",Z[Z.EMBED=31]="EMBED",Z[Z.FIELDSET=32]="FIELDSET",Z[Z.FIGCAPTION=33]="FIGCAPTION",Z[Z.FIGURE=34]="FIGURE",Z[Z.FONT=35]="FONT",Z[Z.FOOTER=36]="FOOTER",Z[Z.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",Z[Z.FORM=38]="FORM",Z[Z.FRAME=39]="FRAME",Z[Z.FRAMESET=40]="FRAMESET",Z[Z.H1=41]="H1",Z[Z.H2=42]="H2",Z[Z.H3=43]="H3",Z[Z.H4=44]="H4",Z[Z.H5=45]="H5",Z[Z.H6=46]="H6",Z[Z.HEAD=47]="HEAD",Z[Z.HEADER=48]="HEADER",Z[Z.HGROUP=49]="HGROUP",Z[Z.HR=50]="HR",Z[Z.HTML=51]="HTML",Z[Z.I=52]="I",Z[Z.IMG=53]="IMG",Z[Z.IMAGE=54]="IMAGE",Z[Z.INPUT=55]="INPUT",Z[Z.IFRAME=56]="IFRAME",Z[Z.KEYGEN=57]="KEYGEN",Z[Z.LABEL=58]="LABEL",Z[Z.LI=59]="LI",Z[Z.LINK=60]="LINK",Z[Z.LISTING=61]="LISTING",Z[Z.MAIN=62]="MAIN",Z[Z.MALIGNMARK=63]="MALIGNMARK",Z[Z.MARQUEE=64]="MARQUEE",Z[Z.MATH=65]="MATH",Z[Z.MENU=66]="MENU",Z[Z.META=67]="META",Z[Z.MGLYPH=68]="MGLYPH",Z[Z.MI=69]="MI",Z[Z.MO=70]="MO",Z[Z.MN=71]="MN",Z[Z.MS=72]="MS",Z[Z.MTEXT=73]="MTEXT",Z[Z.NAV=74]="NAV",Z[Z.NOBR=75]="NOBR",Z[Z.NOFRAMES=76]="NOFRAMES",Z[Z.NOEMBED=77]="NOEMBED",Z[Z.NOSCRIPT=78]="NOSCRIPT",Z[Z.OBJECT=79]="OBJECT",Z[Z.OL=80]="OL",Z[Z.OPTGROUP=81]="OPTGROUP",Z[Z.OPTION=82]="OPTION",Z[Z.P=83]="P",Z[Z.PARAM=84]="PARAM",Z[Z.PLAINTEXT=85]="PLAINTEXT",Z[Z.PRE=86]="PRE",Z[Z.RB=87]="RB",Z[Z.RP=88]="RP",Z[Z.RT=89]="RT",Z[Z.RTC=90]="RTC",Z[Z.RUBY=91]="RUBY",Z[Z.S=92]="S",Z[Z.SCRIPT=93]="SCRIPT",Z[Z.SEARCH=94]="SEARCH",Z[Z.SECTION=95]="SECTION",Z[Z.SELECT=96]="SELECT",Z[Z.SOURCE=97]="SOURCE",Z[Z.SMALL=98]="SMALL",Z[Z.SPAN=99]="SPAN",Z[Z.STRIKE=100]="STRIKE",Z[Z.STRONG=101]="STRONG",Z[Z.STYLE=102]="STYLE",Z[Z.SUB=103]="SUB",Z[Z.SUMMARY=104]="SUMMARY",Z[Z.SUP=105]="SUP",Z[Z.TABLE=106]="TABLE",Z[Z.TBODY=107]="TBODY",Z[Z.TEMPLATE=108]="TEMPLATE",Z[Z.TEXTAREA=109]="TEXTAREA",Z[Z.TFOOT=110]="TFOOT",Z[Z.TD=111]="TD",Z[Z.TH=112]="TH",Z[Z.THEAD=113]="THEAD",Z[Z.TITLE=114]="TITLE",Z[Z.TR=115]="TR",Z[Z.TRACK=116]="TRACK",Z[Z.TT=117]="TT",Z[Z.U=118]="U",Z[Z.UL=119]="UL",Z[Z.SVG=120]="SVG",Z[Z.VAR=121]="VAR",Z[Z.WBR=122]="WBR",Z[Z.XMP=123]="XMP"})(J||(J={}));var XZ=new Map([[U.A,J.A],[U.ADDRESS,J.ADDRESS],[U.ANNOTATION_XML,J.ANNOTATION_XML],[U.APPLET,J.APPLET],[U.AREA,J.AREA],[U.ARTICLE,J.ARTICLE],[U.ASIDE,J.ASIDE],[U.B,J.B],[U.BASE,J.BASE],[U.BASEFONT,J.BASEFONT],[U.BGSOUND,J.BGSOUND],[U.BIG,J.BIG],[U.BLOCKQUOTE,J.BLOCKQUOTE],[U.BODY,J.BODY],[U.BR,J.BR],[U.BUTTON,J.BUTTON],[U.CAPTION,J.CAPTION],[U.CENTER,J.CENTER],[U.CODE,J.CODE],[U.COL,J.COL],[U.COLGROUP,J.COLGROUP],[U.DD,J.DD],[U.DESC,J.DESC],[U.DETAILS,J.DETAILS],[U.DIALOG,J.DIALOG],[U.DIR,J.DIR],[U.DIV,J.DIV],[U.DL,J.DL],[U.DT,J.DT],[U.EM,J.EM],[U.EMBED,J.EMBED],[U.FIELDSET,J.FIELDSET],[U.FIGCAPTION,J.FIGCAPTION],[U.FIGURE,J.FIGURE],[U.FONT,J.FONT],[U.FOOTER,J.FOOTER],[U.FOREIGN_OBJECT,J.FOREIGN_OBJECT],[U.FORM,J.FORM],[U.FRAME,J.FRAME],[U.FRAMESET,J.FRAMESET],[U.H1,J.H1],[U.H2,J.H2],[U.H3,J.H3],[U.H4,J.H4],[U.H5,J.H5],[U.H6,J.H6],[U.HEAD,J.HEAD],[U.HEADER,J.HEADER],[U.HGROUP,J.HGROUP],[U.HR,J.HR],[U.HTML,J.HTML],[U.I,J.I],[U.IMG,J.IMG],[U.IMAGE,J.IMAGE],[U.INPUT,J.INPUT],[U.IFRAME,J.IFRAME],[U.KEYGEN,J.KEYGEN],[U.LABEL,J.LABEL],[U.LI,J.LI],[U.LINK,J.LINK],[U.LISTING,J.LISTING],[U.MAIN,J.MAIN],[U.MALIGNMARK,J.MALIGNMARK],[U.MARQUEE,J.MARQUEE],[U.MATH,J.MATH],[U.MENU,J.MENU],[U.META,J.META],[U.MGLYPH,J.MGLYPH],[U.MI,J.MI],[U.MO,J.MO],[U.MN,J.MN],[U.MS,J.MS],[U.MTEXT,J.MTEXT],[U.NAV,J.NAV],[U.NOBR,J.NOBR],[U.NOFRAMES,J.NOFRAMES],[U.NOEMBED,J.NOEMBED],[U.NOSCRIPT,J.NOSCRIPT],[U.OBJECT,J.OBJECT],[U.OL,J.OL],[U.OPTGROUP,J.OPTGROUP],[U.OPTION,J.OPTION],[U.P,J.P],[U.PARAM,J.PARAM],[U.PLAINTEXT,J.PLAINTEXT],[U.PRE,J.PRE],[U.RB,J.RB],[U.RP,J.RP],[U.RT,J.RT],[U.RTC,J.RTC],[U.RUBY,J.RUBY],[U.S,J.S],[U.SCRIPT,J.SCRIPT],[U.SEARCH,J.SEARCH],[U.SECTION,J.SECTION],[U.SELECT,J.SELECT],[U.SOURCE,J.SOURCE],[U.SMALL,J.SMALL],[U.SPAN,J.SPAN],[U.STRIKE,J.STRIKE],[U.STRONG,J.STRONG],[U.STYLE,J.STYLE],[U.SUB,J.SUB],[U.SUMMARY,J.SUMMARY],[U.SUP,J.SUP],[U.TABLE,J.TABLE],[U.TBODY,J.TBODY],[U.TEMPLATE,J.TEMPLATE],[U.TEXTAREA,J.TEXTAREA],[U.TFOOT,J.TFOOT],[U.TD,J.TD],[U.TH,J.TH],[U.THEAD,J.THEAD],[U.TITLE,J.TITLE],[U.TR,J.TR],[U.TRACK,J.TRACK],[U.TT,J.TT],[U.U,J.U],[U.UL,J.UL],[U.SVG,J.SVG],[U.VAR,J.VAR],[U.WBR,J.WBR],[U.XMP,J.XMP]]);function E0(Z){var Q;return(Q=XZ.get(Z))!==null&&Q!==void 0?Q:J.UNKNOWN}var O=J,B8={[P.HTML]:new Set([O.ADDRESS,O.APPLET,O.AREA,O.ARTICLE,O.ASIDE,O.BASE,O.BASEFONT,O.BGSOUND,O.BLOCKQUOTE,O.BODY,O.BR,O.BUTTON,O.CAPTION,O.CENTER,O.COL,O.COLGROUP,O.DD,O.DETAILS,O.DIR,O.DIV,O.DL,O.DT,O.EMBED,O.FIELDSET,O.FIGCAPTION,O.FIGURE,O.FOOTER,O.FORM,O.FRAME,O.FRAMESET,O.H1,O.H2,O.H3,O.H4,O.H5,O.H6,O.HEAD,O.HEADER,O.HGROUP,O.HR,O.HTML,O.IFRAME,O.IMG,O.INPUT,O.LI,O.LINK,O.LISTING,O.MAIN,O.MARQUEE,O.MENU,O.META,O.NAV,O.NOEMBED,O.NOFRAMES,O.NOSCRIPT,O.OBJECT,O.OL,O.P,O.PARAM,O.PLAINTEXT,O.PRE,O.SCRIPT,O.SECTION,O.SELECT,O.SOURCE,O.STYLE,O.SUMMARY,O.TABLE,O.TBODY,O.TD,O.TEMPLATE,O.TEXTAREA,O.TFOOT,O.TH,O.THEAD,O.TITLE,O.TR,O.TRACK,O.UL,O.WBR,O.XMP]),[P.MATHML]:new Set([O.MI,O.MO,O.MN,O.MS,O.MTEXT,O.ANNOTATION_XML]),[P.SVG]:new Set([O.TITLE,O.FOREIGN_OBJECT,O.DESC]),[P.XLINK]:new Set,[P.XML]:new Set,[P.XMLNS]:new Set},e0=new Set([O.H1,O.H2,O.H3,O.H4,O.H5,O.H6]),JZ=new Set([U.STYLE,U.SCRIPT,U.XMP,U.IFRAME,U.NOEMBED,U.NOFRAMES,U.PLAINTEXT]);function F8(Z,Q){return JZ.has(Z)||Q&&Z===U.NOSCRIPT}var H;(function(Z){Z[Z.DATA=0]="DATA",Z[Z.RCDATA=1]="RCDATA",Z[Z.RAWTEXT=2]="RAWTEXT",Z[Z.SCRIPT_DATA=3]="SCRIPT_DATA",Z[Z.PLAINTEXT=4]="PLAINTEXT",Z[Z.TAG_OPEN=5]="TAG_OPEN",Z[Z.END_TAG_OPEN=6]="END_TAG_OPEN",Z[Z.TAG_NAME=7]="TAG_NAME",Z[Z.RCDATA_LESS_THAN_SIGN=8]="RCDATA_LESS_THAN_SIGN",Z[Z.RCDATA_END_TAG_OPEN=9]="RCDATA_END_TAG_OPEN",Z[Z.RCDATA_END_TAG_NAME=10]="RCDATA_END_TAG_NAME",Z[Z.RAWTEXT_LESS_THAN_SIGN=11]="RAWTEXT_LESS_THAN_SIGN",Z[Z.RAWTEXT_END_TAG_OPEN=12]="RAWTEXT_END_TAG_OPEN",Z[Z.RAWTEXT_END_TAG_NAME=13]="RAWTEXT_END_TAG_NAME",Z[Z.SCRIPT_DATA_LESS_THAN_SIGN=14]="SCRIPT_DATA_LESS_THAN_SIGN",Z[Z.SCRIPT_DATA_END_TAG_OPEN=15]="SCRIPT_DATA_END_TAG_OPEN",Z[Z.SCRIPT_DATA_END_TAG_NAME=16]="SCRIPT_DATA_END_TAG_NAME",Z[Z.SCRIPT_DATA_ESCAPE_START=17]="SCRIPT_DATA_ESCAPE_START",Z[Z.SCRIPT_DATA_ESCAPE_START_DASH=18]="SCRIPT_DATA_ESCAPE_START_DASH",Z[Z.SCRIPT_DATA_ESCAPED=19]="SCRIPT_DATA_ESCAPED",Z[Z.SCRIPT_DATA_ESCAPED_DASH=20]="SCRIPT_DATA_ESCAPED_DASH",Z[Z.SCRIPT_DATA_ESCAPED_DASH_DASH=21]="SCRIPT_DATA_ESCAPED_DASH_DASH",Z[Z.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN",Z[Z.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]="SCRIPT_DATA_ESCAPED_END_TAG_OPEN",Z[Z.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]="SCRIPT_DATA_ESCAPED_END_TAG_NAME",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]="SCRIPT_DATA_DOUBLE_ESCAPE_START",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPED=26]="SCRIPT_DATA_DOUBLE_ESCAPED",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]="SCRIPT_DATA_DOUBLE_ESCAPE_END",Z[Z.BEFORE_ATTRIBUTE_NAME=31]="BEFORE_ATTRIBUTE_NAME",Z[Z.ATTRIBUTE_NAME=32]="ATTRIBUTE_NAME",Z[Z.AFTER_ATTRIBUTE_NAME=33]="AFTER_ATTRIBUTE_NAME",Z[Z.BEFORE_ATTRIBUTE_VALUE=34]="BEFORE_ATTRIBUTE_VALUE",Z[Z.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]="ATTRIBUTE_VALUE_DOUBLE_QUOTED",Z[Z.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]="ATTRIBUTE_VALUE_SINGLE_QUOTED",Z[Z.ATTRIBUTE_VALUE_UNQUOTED=37]="ATTRIBUTE_VALUE_UNQUOTED",Z[Z.AFTER_ATTRIBUTE_VALUE_QUOTED=38]="AFTER_ATTRIBUTE_VALUE_QUOTED",Z[Z.SELF_CLOSING_START_TAG=39]="SELF_CLOSING_START_TAG",Z[Z.BOGUS_COMMENT=40]="BOGUS_COMMENT",Z[Z.MARKUP_DECLARATION_OPEN=41]="MARKUP_DECLARATION_OPEN",Z[Z.COMMENT_START=42]="COMMENT_START",Z[Z.COMMENT_START_DASH=43]="COMMENT_START_DASH",Z[Z.COMMENT=44]="COMMENT",Z[Z.COMMENT_LESS_THAN_SIGN=45]="COMMENT_LESS_THAN_SIGN",Z[Z.COMMENT_LESS_THAN_SIGN_BANG=46]="COMMENT_LESS_THAN_SIGN_BANG",Z[Z.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]="COMMENT_LESS_THAN_SIGN_BANG_DASH",Z[Z.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH",Z[Z.COMMENT_END_DASH=49]="COMMENT_END_DASH",Z[Z.COMMENT_END=50]="COMMENT_END",Z[Z.COMMENT_END_BANG=51]="COMMENT_END_BANG",Z[Z.DOCTYPE=52]="DOCTYPE",Z[Z.BEFORE_DOCTYPE_NAME=53]="BEFORE_DOCTYPE_NAME",Z[Z.DOCTYPE_NAME=54]="DOCTYPE_NAME",Z[Z.AFTER_DOCTYPE_NAME=55]="AFTER_DOCTYPE_NAME",Z[Z.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]="AFTER_DOCTYPE_PUBLIC_KEYWORD",Z[Z.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER",Z[Z.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED",Z[Z.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED",Z[Z.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]="AFTER_DOCTYPE_PUBLIC_IDENTIFIER",Z[Z.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS",Z[Z.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]="AFTER_DOCTYPE_SYSTEM_KEYWORD",Z[Z.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER",Z[Z.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED",Z[Z.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED",Z[Z.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]="AFTER_DOCTYPE_SYSTEM_IDENTIFIER",Z[Z.BOGUS_DOCTYPE=67]="BOGUS_DOCTYPE",Z[Z.CDATA_SECTION=68]="CDATA_SECTION",Z[Z.CDATA_SECTION_BRACKET=69]="CDATA_SECTION_BRACKET",Z[Z.CDATA_SECTION_END=70]="CDATA_SECTION_END",Z[Z.CHARACTER_REFERENCE=71]="CHARACTER_REFERENCE",Z[Z.AMBIGUOUS_AMPERSAND=72]="AMBIGUOUS_AMPERSAND"})(H||(H={}));var o={DATA:H.DATA,RCDATA:H.RCDATA,RAWTEXT:H.RAWTEXT,SCRIPT_DATA:H.SCRIPT_DATA,PLAINTEXT:H.PLAINTEXT,CDATA_SECTION:H.CDATA_SECTION};function YZ(Z){return Z>=V.DIGIT_0&&Z<=V.DIGIT_9}function Z1(Z){return Z>=V.LATIN_CAPITAL_A&&Z<=V.LATIN_CAPITAL_Z}function WZ(Z){return Z>=V.LATIN_SMALL_A&&Z<=V.LATIN_SMALL_Z}function R0(Z){return WZ(Z)||Z1(Z)}function w8(Z){return R0(Z)||YZ(Z)}function l1(Z){return Z+32}function P8(Z){return Z===V.SPACE||Z===V.LINE_FEED||Z===V.TABULATION||Z===V.FORM_FEED}function L8(Z){return P8(Z)||Z===V.SOLIDUS||Z===V.GREATER_THAN_SIGN}function VZ(Z){if(Z===V.NULL)return F.nullCharacterReference;else if(Z>1114111)return F.characterReferenceOutsideUnicodeRange;else if(I1(Z))return F.surrogateCharacterReference;else if(T1(Z))return F.noncharacterCharacterReference;else if(u1(Z)||Z===V.CARRIAGE_RETURN)return F.controlCharacterReference;return null}class c1{constructor(Z,Q){this.options=Z,this.handler=Q,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=H.DATA,this.returnState=H.DATA,this.entityStartPos=0,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new a4(Q),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new s4(i4,(X,K)=>{this.preprocessor.pos=this.entityStartPos+K-1,this._flushCodePointConsumedAsCharacterReference(X)},Q.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(F.missingSemicolonAfterCharacterReference,1)},absenceOfDigitsInNumericCharacterReference:(X)=>{this._err(F.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+X)},validateNumericCharacterReference:(X)=>{let K=VZ(X);if(K)this._err(K,1)}}:void 0)}_err(Z,Q=0){var X,K;(K=(X=this.handler).onParseError)===null||K===void 0||K.call(X,this.preprocessor.getError(Z,Q))}getCurrentLocation(Z){if(!this.options.sourceCodeLocationInfo)return null;return{startLine:this.preprocessor.line,startCol:this.preprocessor.col-Z,startOffset:this.preprocessor.offset-Z,endLine:-1,endCol:-1,endOffset:-1}}_runParsingLoop(){if(this.inLoop)return;this.inLoop=!0;while(this.active&&!this.paused){this.consumedAfterSnapshot=0;let Z=this._consume();if(!this._ensureHibernation())this._callState(Z)}this.inLoop=!1}pause(){this.paused=!0}resume(Z){if(!this.paused)throw Error("Parser was already resumed");if(this.paused=!1,this.inLoop)return;if(this._runParsingLoop(),!this.paused)Z===null||Z===void 0||Z()}write(Z,Q,X){if(this.active=!0,this.preprocessor.write(Z,Q),this._runParsingLoop(),!this.paused)X===null||X===void 0||X()}insertHtmlAtCurrentPos(Z){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(Z),this._runParsingLoop()}_ensureHibernation(){if(this.preprocessor.endOfChunkHit)return this.preprocessor.retreat(this.consumedAfterSnapshot),this.consumedAfterSnapshot=0,this.active=!1,!0;return!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_advanceBy(Z){this.consumedAfterSnapshot+=Z;for(let Q=0;Q<Z;Q++)this.preprocessor.advance()}_consumeSequenceIfMatch(Z,Q){if(this.preprocessor.startsWith(Z,Q))return this._advanceBy(Z.length-1),!0;return!1}_createStartTagToken(){this.currentToken={type:k.START_TAG,tagName:"",tagID:J.UNKNOWN,selfClosing:!1,ackSelfClosing:!1,attrs:[],location:this.getCurrentLocation(1)}}_createEndTagToken(){this.currentToken={type:k.END_TAG,tagName:"",tagID:J.UNKNOWN,selfClosing:!1,ackSelfClosing:!1,attrs:[],location:this.getCurrentLocation(2)}}_createCommentToken(Z){this.currentToken={type:k.COMMENT,data:"",location:this.getCurrentLocation(Z)}}_createDoctypeToken(Z){this.currentToken={type:k.DOCTYPE,name:Z,forceQuirks:!1,publicId:null,systemId:null,location:this.currentLocation}}_createCharacterToken(Z,Q){this.currentCharacterToken={type:Z,chars:Q,location:this.currentLocation}}_createAttr(Z){this.currentAttr={name:Z,value:""},this.currentLocation=this.getCurrentLocation(0)}_leaveAttrName(){var Z,Q;let X=this.currentToken;if(A1(X,this.currentAttr.name)===null){if(X.attrs.push(this.currentAttr),X.location&&this.currentLocation){let K=(Z=(Q=X.location).attrs)!==null&&Z!==void 0?Z:Q.attrs=Object.create(null);K[this.currentAttr.name]=this.currentLocation,this._leaveAttrValue()}}else this._err(F.duplicateAttribute)}_leaveAttrValue(){if(this.currentLocation)this.currentLocation.endLine=this.preprocessor.line,this.currentLocation.endCol=this.preprocessor.col,this.currentLocation.endOffset=this.preprocessor.offset}prepareToken(Z){if(this._emitCurrentCharacterToken(Z.location),this.currentToken=null,Z.location)Z.location.endLine=this.preprocessor.line,Z.location.endCol=this.preprocessor.col+1,Z.location.endOffset=this.preprocessor.offset+1;this.currentLocation=this.getCurrentLocation(-1)}emitCurrentTagToken(){let Z=this.currentToken;if(this.prepareToken(Z),Z.tagID=E0(Z.tagName),Z.type===k.START_TAG)this.lastStartTagName=Z.tagName,this.handler.onStartTag(Z);else{if(Z.attrs.length>0)this._err(F.endTagWithAttributes);if(Z.selfClosing)this._err(F.endTagWithTrailingSolidus);this.handler.onEndTag(Z)}this.preprocessor.dropParsedChunk()}emitCurrentComment(Z){this.prepareToken(Z),this.handler.onComment(Z),this.preprocessor.dropParsedChunk()}emitCurrentDoctype(Z){this.prepareToken(Z),this.handler.onDoctype(Z),this.preprocessor.dropParsedChunk()}_emitCurrentCharacterToken(Z){if(this.currentCharacterToken){if(Z&&this.currentCharacterToken.location)this.currentCharacterToken.location.endLine=Z.startLine,this.currentCharacterToken.location.endCol=Z.startCol,this.currentCharacterToken.location.endOffset=Z.startOffset;switch(this.currentCharacterToken.type){case k.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case k.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case k.WHITESPACE_CHARACTER:{this.handler.onWhitespaceCharacter(this.currentCharacterToken);break}}this.currentCharacterToken=null}}_emitEOFToken(){let Z=this.getCurrentLocation(0);if(Z)Z.endLine=Z.startLine,Z.endCol=Z.startCol,Z.endOffset=Z.startOffset;this._emitCurrentCharacterToken(Z),this.handler.onEof({type:k.EOF,location:Z}),this.active=!1}_appendCharToCurrentCharacterToken(Z,Q){if(this.currentCharacterToken)if(this.currentCharacterToken.type===Z){this.currentCharacterToken.chars+=Q;return}else this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();this._createCharacterToken(Z,Q)}_emitCodePoint(Z){let Q=P8(Z)?k.WHITESPACE_CHARACTER:Z===V.NULL?k.NULL_CHARACTER:k.CHARACTER;this._appendCharToCurrentCharacterToken(Q,Z<65536?String.fromCharCode(Z):String.fromCodePoint(Z))}_emitChars(Z){this._appendCharToCurrentCharacterToken(k.CHARACTER,Z)}_startCharacterReference(){this.returnState=this.state,this.state=H.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?B0.Attribute:B0.Legacy)}_isCharacterReferenceInAttribute(){return this.returnState===H.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===H.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===H.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(Z){if(this._isCharacterReferenceInAttribute())this.currentAttr.value+=String.fromCodePoint(Z);else this._emitCodePoint(Z)}_callState(Z){switch(this.state){case H.DATA:{this._stateData(Z);break}case H.RCDATA:{this._stateRcdata(Z);break}case H.RAWTEXT:{this._stateRawtext(Z);break}case H.SCRIPT_DATA:{this._stateScriptData(Z);break}case H.PLAINTEXT:{this._statePlaintext(Z);break}case H.TAG_OPEN:{this._stateTagOpen(Z);break}case H.END_TAG_OPEN:{this._stateEndTagOpen(Z);break}case H.TAG_NAME:{this._stateTagName(Z);break}case H.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(Z);break}case H.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(Z);break}case H.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(Z);break}case H.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(Z);break}case H.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(Z);break}case H.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(Z);break}case H.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(Z);break}case H.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(Z);break}case H.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(Z);break}case H.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(Z);break}case H.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(Z);break}case H.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(Z);break}case H.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(Z);break}case H.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(Z);break}case H.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(Z);break}case H.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(Z);break}case H.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(Z);break}case H.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(Z);break}case H.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(Z);break}case H.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(Z);break}case H.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(Z);break}case H.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(Z);break}case H.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(Z);break}case H.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(Z);break}case H.ATTRIBUTE_NAME:{this._stateAttributeName(Z);break}case H.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(Z);break}case H.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(Z);break}case H.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(Z);break}case H.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(Z);break}case H.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(Z);break}case H.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(Z);break}case H.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(Z);break}case H.BOGUS_COMMENT:{this._stateBogusComment(Z);break}case H.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(Z);break}case H.COMMENT_START:{this._stateCommentStart(Z);break}case H.COMMENT_START_DASH:{this._stateCommentStartDash(Z);break}case H.COMMENT:{this._stateComment(Z);break}case H.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(Z);break}case H.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(Z);break}case H.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(Z);break}case H.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(Z);break}case H.COMMENT_END_DASH:{this._stateCommentEndDash(Z);break}case H.COMMENT_END:{this._stateCommentEnd(Z);break}case H.COMMENT_END_BANG:{this._stateCommentEndBang(Z);break}case H.DOCTYPE:{this._stateDoctype(Z);break}case H.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(Z);break}case H.DOCTYPE_NAME:{this._stateDoctypeName(Z);break}case H.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(Z);break}case H.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(Z);break}case H.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(Z);break}case H.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(Z);break}case H.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(Z);break}case H.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(Z);break}case H.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(Z);break}case H.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(Z);break}case H.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(Z);break}case H.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(Z);break}case H.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(Z);break}case H.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(Z);break}case H.BOGUS_DOCTYPE:{this._stateBogusDoctype(Z);break}case H.CDATA_SECTION:{this._stateCdataSection(Z);break}case H.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(Z);break}case H.CDATA_SECTION_END:{this._stateCdataSectionEnd(Z);break}case H.CHARACTER_REFERENCE:{this._stateCharacterReference();break}case H.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(Z);break}default:throw Error("Unknown state")}}_stateData(Z){switch(Z){case V.LESS_THAN_SIGN:{this.state=H.TAG_OPEN;break}case V.AMPERSAND:{this._startCharacterReference();break}case V.NULL:{this._err(F.unexpectedNullCharacter),this._emitCodePoint(Z);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateRcdata(Z){switch(Z){case V.AMPERSAND:{this._startCharacterReference();break}case V.LESS_THAN_SIGN:{this.state=H.RCDATA_LESS_THAN_SIGN;break}case V.NULL:{this._err(F.unexpectedNullCharacter),this._emitChars(T);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateRawtext(Z){switch(Z){case V.LESS_THAN_SIGN:{this.state=H.RAWTEXT_LESS_THAN_SIGN;break}case V.NULL:{this._err(F.unexpectedNullCharacter),this._emitChars(T);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateScriptData(Z){switch(Z){case V.LESS_THAN_SIGN:{this.state=H.SCRIPT_DATA_LESS_THAN_SIGN;break}case V.NULL:{this._err(F.unexpectedNullCharacter),this._emitChars(T);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_statePlaintext(Z){switch(Z){case V.NULL:{this._err(F.unexpectedNullCharacter),this._emitChars(T);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateTagOpen(Z){if(R0(Z))this._createStartTagToken(),this.state=H.TAG_NAME,this._stateTagName(Z);else switch(Z){case V.EXCLAMATION_MARK:{this.state=H.MARKUP_DECLARATION_OPEN;break}case V.SOLIDUS:{this.state=H.END_TAG_OPEN;break}case V.QUESTION_MARK:{this._err(F.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=H.BOGUS_COMMENT,this._stateBogusComment(Z);break}case V.EOF:{this._err(F.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(F.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=H.DATA,this._stateData(Z)}}_stateEndTagOpen(Z){if(R0(Z))this._createEndTagToken(),this.state=H.TAG_NAME,this._stateTagName(Z);else switch(Z){case V.GREATER_THAN_SIGN:{this._err(F.missingEndTagName),this.state=H.DATA;break}case V.EOF:{this._err(F.eofBeforeTagName),this._emitChars("</"),this._emitEOFToken();break}default:this._err(F.invalidFirstCharacterOfTagName),this._createCommentToken(2),this.state=H.BOGUS_COMMENT,this._stateBogusComment(Z)}}_stateTagName(Z){let Q=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=H.BEFORE_ATTRIBUTE_NAME;break}case V.SOLIDUS:{this.state=H.SELF_CLOSING_START_TAG;break}case V.GREATER_THAN_SIGN:{this.state=H.DATA,this.emitCurrentTagToken();break}case V.NULL:{this._err(F.unexpectedNullCharacter),Q.tagName+=T;break}case V.EOF:{this._err(F.eofInTag),this._emitEOFToken();break}default:Q.tagName+=String.fromCodePoint(Z1(Z)?l1(Z):Z)}}_stateRcdataLessThanSign(Z){if(Z===V.SOLIDUS)this.state=H.RCDATA_END_TAG_OPEN;else this._emitChars("<"),this.state=H.RCDATA,this._stateRcdata(Z)}_stateRcdataEndTagOpen(Z){if(R0(Z))this.state=H.RCDATA_END_TAG_NAME,this._stateRcdataEndTagName(Z);else this._emitChars("</"),this.state=H.RCDATA,this._stateRcdata(Z)}handleSpecialEndTag(Z){if(!this.preprocessor.startsWith(this.lastStartTagName,!1))return!this._ensureHibernation();this._createEndTagToken();let Q=this.currentToken;switch(Q.tagName=this.lastStartTagName,this.preprocessor.peek(this.lastStartTagName.length)){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:return this._advanceBy(this.lastStartTagName.length),this.state=H.BEFORE_ATTRIBUTE_NAME,!1;case V.SOLIDUS:return this._advanceBy(this.lastStartTagName.length),this.state=H.SELF_CLOSING_START_TAG,!1;case V.GREATER_THAN_SIGN:return this._advanceBy(this.lastStartTagName.length),this.emitCurrentTagToken(),this.state=H.DATA,!1;default:return!this._ensureHibernation()}}_stateRcdataEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=H.RCDATA,this._stateRcdata(Z)}_stateRawtextLessThanSign(Z){if(Z===V.SOLIDUS)this.state=H.RAWTEXT_END_TAG_OPEN;else this._emitChars("<"),this.state=H.RAWTEXT,this._stateRawtext(Z)}_stateRawtextEndTagOpen(Z){if(R0(Z))this.state=H.RAWTEXT_END_TAG_NAME,this._stateRawtextEndTagName(Z);else this._emitChars("</"),this.state=H.RAWTEXT,this._stateRawtext(Z)}_stateRawtextEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=H.RAWTEXT,this._stateRawtext(Z)}_stateScriptDataLessThanSign(Z){switch(Z){case V.SOLIDUS:{this.state=H.SCRIPT_DATA_END_TAG_OPEN;break}case V.EXCLAMATION_MARK:{this.state=H.SCRIPT_DATA_ESCAPE_START,this._emitChars("<!");break}default:this._emitChars("<"),this.state=H.SCRIPT_DATA,this._stateScriptData(Z)}}_stateScriptDataEndTagOpen(Z){if(R0(Z))this.state=H.SCRIPT_DATA_END_TAG_NAME,this._stateScriptDataEndTagName(Z);else this._emitChars("</"),this.state=H.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=H.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEscapeStart(Z){if(Z===V.HYPHEN_MINUS)this.state=H.SCRIPT_DATA_ESCAPE_START_DASH,this._emitChars("-");else this.state=H.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEscapeStartDash(Z){if(Z===V.HYPHEN_MINUS)this.state=H.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");else this.state=H.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEscaped(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=H.SCRIPT_DATA_ESCAPED_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=H.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case V.NULL:{this._err(F.unexpectedNullCharacter),this._emitChars(T);break}case V.EOF:{this._err(F.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateScriptDataEscapedDash(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=H.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=H.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case V.NULL:{this._err(F.unexpectedNullCharacter),this.state=H.SCRIPT_DATA_ESCAPED,this._emitChars(T);break}case V.EOF:{this._err(F.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=H.SCRIPT_DATA_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataEscapedDashDash(Z){switch(Z){case V.HYPHEN_MINUS:{this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=H.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case V.GREATER_THAN_SIGN:{this.state=H.SCRIPT_DATA,this._emitChars(">");break}case V.NULL:{this._err(F.unexpectedNullCharacter),this.state=H.SCRIPT_DATA_ESCAPED,this._emitChars(T);break}case V.EOF:{this._err(F.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=H.SCRIPT_DATA_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataEscapedLessThanSign(Z){if(Z===V.SOLIDUS)this.state=H.SCRIPT_DATA_ESCAPED_END_TAG_OPEN;else if(R0(Z))this._emitChars("<"),this.state=H.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(Z);else this._emitChars("<"),this.state=H.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataEscapedEndTagOpen(Z){if(R0(Z))this.state=H.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(Z);else this._emitChars("</"),this.state=H.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataEscapedEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=H.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataDoubleEscapeStart(Z){if(this.preprocessor.startsWith(t.SCRIPT,!1)&&L8(this.preprocessor.peek(t.SCRIPT.length))){this._emitCodePoint(Z);for(let Q=0;Q<t.SCRIPT.length;Q++)this._emitCodePoint(this._consume());this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED}else if(!this._ensureHibernation())this.state=H.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataDoubleEscaped(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case V.NULL:{this._err(F.unexpectedNullCharacter),this._emitChars(T);break}case V.EOF:{this._err(F.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateScriptDataDoubleEscapedDash(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case V.NULL:{this._err(F.unexpectedNullCharacter),this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(T);break}case V.EOF:{this._err(F.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataDoubleEscapedDashDash(Z){switch(Z){case V.HYPHEN_MINUS:{this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case V.GREATER_THAN_SIGN:{this.state=H.SCRIPT_DATA,this._emitChars(">");break}case V.NULL:{this._err(F.unexpectedNullCharacter),this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(T);break}case V.EOF:{this._err(F.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataDoubleEscapedLessThanSign(Z){if(Z===V.SOLIDUS)this.state=H.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/");else this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(Z)}_stateScriptDataDoubleEscapeEnd(Z){if(this.preprocessor.startsWith(t.SCRIPT,!1)&&L8(this.preprocessor.peek(t.SCRIPT.length))){this._emitCodePoint(Z);for(let Q=0;Q<t.SCRIPT.length;Q++)this._emitCodePoint(this._consume());this.state=H.SCRIPT_DATA_ESCAPED}else if(!this._ensureHibernation())this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(Z)}_stateBeforeAttributeName(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.SOLIDUS:case V.GREATER_THAN_SIGN:case V.EOF:{this.state=H.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(Z);break}case V.EQUALS_SIGN:{this._err(F.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state=H.ATTRIBUTE_NAME;break}default:this._createAttr(""),this.state=H.ATTRIBUTE_NAME,this._stateAttributeName(Z)}}_stateAttributeName(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:case V.SOLIDUS:case V.GREATER_THAN_SIGN:case V.EOF:{this._leaveAttrName(),this.state=H.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(Z);break}case V.EQUALS_SIGN:{this._leaveAttrName(),this.state=H.BEFORE_ATTRIBUTE_VALUE;break}case V.QUOTATION_MARK:case V.APOSTROPHE:case V.LESS_THAN_SIGN:{this._err(F.unexpectedCharacterInAttributeName),this.currentAttr.name+=String.fromCodePoint(Z);break}case V.NULL:{this._err(F.unexpectedNullCharacter),this.currentAttr.name+=T;break}default:this.currentAttr.name+=String.fromCodePoint(Z1(Z)?l1(Z):Z)}}_stateAfterAttributeName(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.SOLIDUS:{this.state=H.SELF_CLOSING_START_TAG;break}case V.EQUALS_SIGN:{this.state=H.BEFORE_ATTRIBUTE_VALUE;break}case V.GREATER_THAN_SIGN:{this.state=H.DATA,this.emitCurrentTagToken();break}case V.EOF:{this._err(F.eofInTag),this._emitEOFToken();break}default:this._createAttr(""),this.state=H.ATTRIBUTE_NAME,this._stateAttributeName(Z)}}_stateBeforeAttributeValue(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.QUOTATION_MARK:{this.state=H.ATTRIBUTE_VALUE_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this.state=H.ATTRIBUTE_VALUE_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(F.missingAttributeValue),this.state=H.DATA,this.emitCurrentTagToken();break}default:this.state=H.ATTRIBUTE_VALUE_UNQUOTED,this._stateAttributeValueUnquoted(Z)}}_stateAttributeValueDoubleQuoted(Z){switch(Z){case V.QUOTATION_MARK:{this.state=H.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case V.AMPERSAND:{this._startCharacterReference();break}case V.NULL:{this._err(F.unexpectedNullCharacter),this.currentAttr.value+=T;break}case V.EOF:{this._err(F.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(Z)}}_stateAttributeValueSingleQuoted(Z){switch(Z){case V.APOSTROPHE:{this.state=H.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case V.AMPERSAND:{this._startCharacterReference();break}case V.NULL:{this._err(F.unexpectedNullCharacter),this.currentAttr.value+=T;break}case V.EOF:{this._err(F.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(Z)}}_stateAttributeValueUnquoted(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this._leaveAttrValue(),this.state=H.BEFORE_ATTRIBUTE_NAME;break}case V.AMPERSAND:{this._startCharacterReference();break}case V.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=H.DATA,this.emitCurrentTagToken();break}case V.NULL:{this._err(F.unexpectedNullCharacter),this.currentAttr.value+=T;break}case V.QUOTATION_MARK:case V.APOSTROPHE:case V.LESS_THAN_SIGN:case V.EQUALS_SIGN:case V.GRAVE_ACCENT:{this._err(F.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=String.fromCodePoint(Z);break}case V.EOF:{this._err(F.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(Z)}}_stateAfterAttributeValueQuoted(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this._leaveAttrValue(),this.state=H.BEFORE_ATTRIBUTE_NAME;break}case V.SOLIDUS:{this._leaveAttrValue(),this.state=H.SELF_CLOSING_START_TAG;break}case V.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=H.DATA,this.emitCurrentTagToken();break}case V.EOF:{this._err(F.eofInTag),this._emitEOFToken();break}default:this._err(F.missingWhitespaceBetweenAttributes),this.state=H.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(Z)}}_stateSelfClosingStartTag(Z){switch(Z){case V.GREATER_THAN_SIGN:{let Q=this.currentToken;Q.selfClosing=!0,this.state=H.DATA,this.emitCurrentTagToken();break}case V.EOF:{this._err(F.eofInTag),this._emitEOFToken();break}default:this._err(F.unexpectedSolidusInTag),this.state=H.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(Z)}}_stateBogusComment(Z){let Q=this.currentToken;switch(Z){case V.GREATER_THAN_SIGN:{this.state=H.DATA,this.emitCurrentComment(Q);break}case V.EOF:{this.emitCurrentComment(Q),this._emitEOFToken();break}case V.NULL:{this._err(F.unexpectedNullCharacter),Q.data+=T;break}default:Q.data+=String.fromCodePoint(Z)}}_stateMarkupDeclarationOpen(Z){if(this._consumeSequenceIfMatch(t.DASH_DASH,!0))this._createCommentToken(t.DASH_DASH.length+1),this.state=H.COMMENT_START;else if(this._consumeSequenceIfMatch(t.DOCTYPE,!1))this.currentLocation=this.getCurrentLocation(t.DOCTYPE.length+1),this.state=H.DOCTYPE;else if(this._consumeSequenceIfMatch(t.CDATA_START,!0))if(this.inForeignNode)this.state=H.CDATA_SECTION;else this._err(F.cdataInHtmlContent),this._createCommentToken(t.CDATA_START.length+1),this.currentToken.data="[CDATA[",this.state=H.BOGUS_COMMENT;else if(!this._ensureHibernation())this._err(F.incorrectlyOpenedComment),this._createCommentToken(2),this.state=H.BOGUS_COMMENT,this._stateBogusComment(Z)}_stateCommentStart(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=H.COMMENT_START_DASH;break}case V.GREATER_THAN_SIGN:{this._err(F.abruptClosingOfEmptyComment),this.state=H.DATA;let Q=this.currentToken;this.emitCurrentComment(Q);break}default:this.state=H.COMMENT,this._stateComment(Z)}}_stateCommentStartDash(Z){let Q=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{this.state=H.COMMENT_END;break}case V.GREATER_THAN_SIGN:{this._err(F.abruptClosingOfEmptyComment),this.state=H.DATA,this.emitCurrentComment(Q);break}case V.EOF:{this._err(F.eofInComment),this.emitCurrentComment(Q),this._emitEOFToken();break}default:Q.data+="-",this.state=H.COMMENT,this._stateComment(Z)}}_stateComment(Z){let Q=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{this.state=H.COMMENT_END_DASH;break}case V.LESS_THAN_SIGN:{Q.data+="<",this.state=H.COMMENT_LESS_THAN_SIGN;break}case V.NULL:{this._err(F.unexpectedNullCharacter),Q.data+=T;break}case V.EOF:{this._err(F.eofInComment),this.emitCurrentComment(Q),this._emitEOFToken();break}default:Q.data+=String.fromCodePoint(Z)}}_stateCommentLessThanSign(Z){let Q=this.currentToken;switch(Z){case V.EXCLAMATION_MARK:{Q.data+="!",this.state=H.COMMENT_LESS_THAN_SIGN_BANG;break}case V.LESS_THAN_SIGN:{Q.data+="<";break}default:this.state=H.COMMENT,this._stateComment(Z)}}_stateCommentLessThanSignBang(Z){if(Z===V.HYPHEN_MINUS)this.state=H.COMMENT_LESS_THAN_SIGN_BANG_DASH;else this.state=H.COMMENT,this._stateComment(Z)}_stateCommentLessThanSignBangDash(Z){if(Z===V.HYPHEN_MINUS)this.state=H.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH;else this.state=H.COMMENT_END_DASH,this._stateCommentEndDash(Z)}_stateCommentLessThanSignBangDashDash(Z){if(Z!==V.GREATER_THAN_SIGN&&Z!==V.EOF)this._err(F.nestedComment);this.state=H.COMMENT_END,this._stateCommentEnd(Z)}_stateCommentEndDash(Z){let Q=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{this.state=H.COMMENT_END;break}case V.EOF:{this._err(F.eofInComment),this.emitCurrentComment(Q),this._emitEOFToken();break}default:Q.data+="-",this.state=H.COMMENT,this._stateComment(Z)}}_stateCommentEnd(Z){let Q=this.currentToken;switch(Z){case V.GREATER_THAN_SIGN:{this.state=H.DATA,this.emitCurrentComment(Q);break}case V.EXCLAMATION_MARK:{this.state=H.COMMENT_END_BANG;break}case V.HYPHEN_MINUS:{Q.data+="-";break}case V.EOF:{this._err(F.eofInComment),this.emitCurrentComment(Q),this._emitEOFToken();break}default:Q.data+="--",this.state=H.COMMENT,this._stateComment(Z)}}_stateCommentEndBang(Z){let Q=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{Q.data+="--!",this.state=H.COMMENT_END_DASH;break}case V.GREATER_THAN_SIGN:{this._err(F.incorrectlyClosedComment),this.state=H.DATA,this.emitCurrentComment(Q);break}case V.EOF:{this._err(F.eofInComment),this.emitCurrentComment(Q),this._emitEOFToken();break}default:Q.data+="--!",this.state=H.COMMENT,this._stateComment(Z)}}_stateDoctype(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=H.BEFORE_DOCTYPE_NAME;break}case V.GREATER_THAN_SIGN:{this.state=H.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(Z);break}case V.EOF:{this._err(F.eofInDoctype),this._createDoctypeToken(null);let Q=this.currentToken;Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:this._err(F.missingWhitespaceBeforeDoctypeName),this.state=H.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(Z)}}_stateBeforeDoctypeName(Z){if(Z1(Z))this._createDoctypeToken(String.fromCharCode(l1(Z))),this.state=H.DOCTYPE_NAME;else switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.NULL:{this._err(F.unexpectedNullCharacter),this._createDoctypeToken(T),this.state=H.DOCTYPE_NAME;break}case V.GREATER_THAN_SIGN:{this._err(F.missingDoctypeName),this._createDoctypeToken(null);let Q=this.currentToken;Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this.state=H.DATA;break}case V.EOF:{this._err(F.eofInDoctype),this._createDoctypeToken(null);let Q=this.currentToken;Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:this._createDoctypeToken(String.fromCodePoint(Z)),this.state=H.DOCTYPE_NAME}}_stateDoctypeName(Z){let Q=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=H.AFTER_DOCTYPE_NAME;break}case V.GREATER_THAN_SIGN:{this.state=H.DATA,this.emitCurrentDoctype(Q);break}case V.NULL:{this._err(F.unexpectedNullCharacter),Q.name+=T;break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:Q.name+=String.fromCodePoint(Z1(Z)?l1(Z):Z)}}_stateAfterDoctypeName(Z){let Q=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.GREATER_THAN_SIGN:{this.state=H.DATA,this.emitCurrentDoctype(Q);break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:if(this._consumeSequenceIfMatch(t.PUBLIC,!1))this.state=H.AFTER_DOCTYPE_PUBLIC_KEYWORD;else if(this._consumeSequenceIfMatch(t.SYSTEM,!1))this.state=H.AFTER_DOCTYPE_SYSTEM_KEYWORD;else if(!this._ensureHibernation())this._err(F.invalidCharacterSequenceAfterDoctypeName),Q.forceQuirks=!0,this.state=H.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateAfterDoctypePublicKeyword(Z){let Q=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=H.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;break}case V.QUOTATION_MARK:{this._err(F.missingWhitespaceAfterDoctypePublicKeyword),Q.publicId="",this.state=H.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this._err(F.missingWhitespaceAfterDoctypePublicKeyword),Q.publicId="",this.state=H.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(F.missingDoctypePublicIdentifier),Q.forceQuirks=!0,this.state=H.DATA,this.emitCurrentDoctype(Q);break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:this._err(F.missingQuoteBeforeDoctypePublicIdentifier),Q.forceQuirks=!0,this.state=H.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateBeforeDoctypePublicIdentifier(Z){let Q=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.QUOTATION_MARK:{Q.publicId="",this.state=H.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{Q.publicId="",this.state=H.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(F.missingDoctypePublicIdentifier),Q.forceQuirks=!0,this.state=H.DATA,this.emitCurrentDoctype(Q);break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:this._err(F.missingQuoteBeforeDoctypePublicIdentifier),Q.forceQuirks=!0,this.state=H.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateDoctypePublicIdentifierDoubleQuoted(Z){let Q=this.currentToken;switch(Z){case V.QUOTATION_MARK:{this.state=H.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case V.NULL:{this._err(F.unexpectedNullCharacter),Q.publicId+=T;break}case V.GREATER_THAN_SIGN:{this._err(F.abruptDoctypePublicIdentifier),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this.state=H.DATA;break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:Q.publicId+=String.fromCodePoint(Z)}}_stateDoctypePublicIdentifierSingleQuoted(Z){let Q=this.currentToken;switch(Z){case V.APOSTROPHE:{this.state=H.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case V.NULL:{this._err(F.unexpectedNullCharacter),Q.publicId+=T;break}case V.GREATER_THAN_SIGN:{this._err(F.abruptDoctypePublicIdentifier),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this.state=H.DATA;break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:Q.publicId+=String.fromCodePoint(Z)}}_stateAfterDoctypePublicIdentifier(Z){let Q=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=H.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;break}case V.GREATER_THAN_SIGN:{this.state=H.DATA,this.emitCurrentDoctype(Q);break}case V.QUOTATION_MARK:{this._err(F.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),Q.systemId="",this.state=H.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this._err(F.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),Q.systemId="",this.state=H.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:this._err(F.missingQuoteBeforeDoctypeSystemIdentifier),Q.forceQuirks=!0,this.state=H.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateBetweenDoctypePublicAndSystemIdentifiers(Z){let Q=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.GREATER_THAN_SIGN:{this.emitCurrentDoctype(Q),this.state=H.DATA;break}case V.QUOTATION_MARK:{Q.systemId="",this.state=H.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{Q.systemId="",this.state=H.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:this._err(F.missingQuoteBeforeDoctypeSystemIdentifier),Q.forceQuirks=!0,this.state=H.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateAfterDoctypeSystemKeyword(Z){let Q=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=H.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;break}case V.QUOTATION_MARK:{this._err(F.missingWhitespaceAfterDoctypeSystemKeyword),Q.systemId="",this.state=H.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this._err(F.missingWhitespaceAfterDoctypeSystemKeyword),Q.systemId="",this.state=H.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(F.missingDoctypeSystemIdentifier),Q.forceQuirks=!0,this.state=H.DATA,this.emitCurrentDoctype(Q);break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:this._err(F.missingQuoteBeforeDoctypeSystemIdentifier),Q.forceQuirks=!0,this.state=H.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateBeforeDoctypeSystemIdentifier(Z){let Q=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.QUOTATION_MARK:{Q.systemId="",this.state=H.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{Q.systemId="",this.state=H.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(F.missingDoctypeSystemIdentifier),Q.forceQuirks=!0,this.state=H.DATA,this.emitCurrentDoctype(Q);break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:this._err(F.missingQuoteBeforeDoctypeSystemIdentifier),Q.forceQuirks=!0,this.state=H.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateDoctypeSystemIdentifierDoubleQuoted(Z){let Q=this.currentToken;switch(Z){case V.QUOTATION_MARK:{this.state=H.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case V.NULL:{this._err(F.unexpectedNullCharacter),Q.systemId+=T;break}case V.GREATER_THAN_SIGN:{this._err(F.abruptDoctypeSystemIdentifier),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this.state=H.DATA;break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:Q.systemId+=String.fromCodePoint(Z)}}_stateDoctypeSystemIdentifierSingleQuoted(Z){let Q=this.currentToken;switch(Z){case V.APOSTROPHE:{this.state=H.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case V.NULL:{this._err(F.unexpectedNullCharacter),Q.systemId+=T;break}case V.GREATER_THAN_SIGN:{this._err(F.abruptDoctypeSystemIdentifier),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this.state=H.DATA;break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:Q.systemId+=String.fromCodePoint(Z)}}_stateAfterDoctypeSystemIdentifier(Z){let Q=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.GREATER_THAN_SIGN:{this.emitCurrentDoctype(Q),this.state=H.DATA;break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:this._err(F.unexpectedCharacterAfterDoctypeSystemIdentifier),this.state=H.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateBogusDoctype(Z){let Q=this.currentToken;switch(Z){case V.GREATER_THAN_SIGN:{this.emitCurrentDoctype(Q),this.state=H.DATA;break}case V.NULL:{this._err(F.unexpectedNullCharacter);break}case V.EOF:{this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:}}_stateCdataSection(Z){switch(Z){case V.RIGHT_SQUARE_BRACKET:{this.state=H.CDATA_SECTION_BRACKET;break}case V.EOF:{this._err(F.eofInCdata),this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateCdataSectionBracket(Z){if(Z===V.RIGHT_SQUARE_BRACKET)this.state=H.CDATA_SECTION_END;else this._emitChars("]"),this.state=H.CDATA_SECTION,this._stateCdataSection(Z)}_stateCdataSectionEnd(Z){switch(Z){case V.GREATER_THAN_SIGN:{this.state=H.DATA;break}case V.RIGHT_SQUARE_BRACKET:{this._emitChars("]");break}default:this._emitChars("]]"),this.state=H.CDATA_SECTION,this._stateCdataSection(Z)}}_stateCharacterReference(){let Z=this.entityDecoder.write(this.preprocessor.html,this.preprocessor.pos);if(Z<0)if(this.preprocessor.lastChunkWritten)Z=this.entityDecoder.end();else{this.active=!1,this.preprocessor.pos=this.preprocessor.html.length-1,this.consumedAfterSnapshot=0,this.preprocessor.endOfChunkHit=!0;return}if(Z===0)this.preprocessor.pos=this.entityStartPos,this._flushCodePointConsumedAsCharacterReference(V.AMPERSAND),this.state=!this._isCharacterReferenceInAttribute()&&w8(this.preprocessor.peek(1))?H.AMBIGUOUS_AMPERSAND:this.returnState;else this.state=this.returnState}_stateAmbiguousAmpersand(Z){if(w8(Z))this._flushCodePointConsumedAsCharacterReference(Z);else{if(Z===V.SEMICOLON)this._err(F.unknownNamedCharacterReference);this.state=this.returnState,this._callState(Z)}}}var C8=new Set([J.DD,J.DT,J.LI,J.OPTGROUP,J.OPTION,J.P,J.RB,J.RP,J.RT,J.RTC]),x8=new Set([...C8,J.CAPTION,J.COLGROUP,J.TBODY,J.TD,J.TFOOT,J.TH,J.THEAD,J.TR]),d1=new Set([J.APPLET,J.CAPTION,J.HTML,J.MARQUEE,J.OBJECT,J.TABLE,J.TD,J.TEMPLATE,J.TH]),HZ=new Set([...d1,J.OL,J.UL]),jZ=new Set([...d1,J.BUTTON]),b8=new Set([J.ANNOTATION_XML,J.MI,J.MN,J.MO,J.MS,J.MTEXT]),O8=new Set([J.DESC,J.FOREIGN_OBJECT,J.TITLE]),zZ=new Set([J.TR,J.TEMPLATE,J.HTML]),qZ=new Set([J.TBODY,J.TFOOT,J.THEAD,J.TEMPLATE,J.HTML]),UZ=new Set([J.TABLE,J.TEMPLATE,J.HTML]),BZ=new Set([J.TD,J.TH]);class r4{get currentTmplContentOrNode(){return this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):this.current}constructor(Z,Q,X){this.treeAdapter=Q,this.handler=X,this.items=[],this.tagIDs=[],this.stackTop=-1,this.tmplCount=0,this.currentTagId=J.UNKNOWN,this.current=Z}_indexOf(Z){return this.items.lastIndexOf(Z,this.stackTop)}_isInTemplate(){return this.currentTagId===J.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===P.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagId=this.tagIDs[this.stackTop]}push(Z,Q){if(this.stackTop++,this.items[this.stackTop]=Z,this.current=Z,this.tagIDs[this.stackTop]=Q,this.currentTagId=Q,this._isInTemplate())this.tmplCount++;this.handler.onItemPush(Z,Q,!0)}pop(){let Z=this.current;if(this.tmplCount>0&&this._isInTemplate())this.tmplCount--;this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(Z,!0)}replace(Z,Q){let X=this._indexOf(Z);if(this.items[X]=Q,X===this.stackTop)this.current=Q}insertAfter(Z,Q,X){let K=this._indexOf(Z)+1;if(this.items.splice(K,0,Q),this.tagIDs.splice(K,0,X),this.stackTop++,K===this.stackTop)this._updateCurrentElement();if(this.current&&this.currentTagId!==void 0)this.handler.onItemPush(this.current,this.currentTagId,K===this.stackTop)}popUntilTagNamePopped(Z){let Q=this.stackTop+1;do Q=this.tagIDs.lastIndexOf(Z,Q-1);while(Q>0&&this.treeAdapter.getNamespaceURI(this.items[Q])!==P.HTML);this.shortenToLength(Math.max(Q,0))}shortenToLength(Z){while(this.stackTop>=Z){let Q=this.current;if(this.tmplCount>0&&this._isInTemplate())this.tmplCount-=1;this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(Q,this.stackTop<Z)}}popUntilElementPopped(Z){let Q=this._indexOf(Z);this.shortenToLength(Math.max(Q,0))}popUntilPopped(Z,Q){let X=this._indexOfTagNames(Z,Q);this.shortenToLength(Math.max(X,0))}popUntilNumberedHeaderPopped(){this.popUntilPopped(e0,P.HTML)}popUntilTableCellPopped(){this.popUntilPopped(BZ,P.HTML)}popAllUpToHtmlElement(){this.tmplCount=0,this.shortenToLength(1)}_indexOfTagNames(Z,Q){for(let X=this.stackTop;X>=0;X--)if(Z.has(this.tagIDs[X])&&this.treeAdapter.getNamespaceURI(this.items[X])===Q)return X;return-1}clearBackTo(Z,Q){let X=this._indexOfTagNames(Z,Q);this.shortenToLength(X+1)}clearBackToTableContext(){this.clearBackTo(UZ,P.HTML)}clearBackToTableBodyContext(){this.clearBackTo(qZ,P.HTML)}clearBackToTableRowContext(){this.clearBackTo(zZ,P.HTML)}remove(Z){let Q=this._indexOf(Z);if(Q>=0)if(Q===this.stackTop)this.pop();else this.items.splice(Q,1),this.tagIDs.splice(Q,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(Z,!1)}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===J.BODY?this.items[1]:null}contains(Z){return this._indexOf(Z)>-1}getCommonAncestor(Z){let Q=this._indexOf(Z)-1;return Q>=0?this.items[Q]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===J.HTML}hasInDynamicScope(Z,Q){for(let X=this.stackTop;X>=0;X--){let K=this.tagIDs[X];switch(this.treeAdapter.getNamespaceURI(this.items[X])){case P.HTML:{if(K===Z)return!0;if(Q.has(K))return!1;break}case P.SVG:{if(O8.has(K))return!1;break}case P.MATHML:{if(b8.has(K))return!1;break}}}return!0}hasInScope(Z){return this.hasInDynamicScope(Z,d1)}hasInListItemScope(Z){return this.hasInDynamicScope(Z,HZ)}hasInButtonScope(Z){return this.hasInDynamicScope(Z,jZ)}hasNumberedHeaderInScope(){for(let Z=this.stackTop;Z>=0;Z--){let Q=this.tagIDs[Z];switch(this.treeAdapter.getNamespaceURI(this.items[Z])){case P.HTML:{if(e0.has(Q))return!0;if(d1.has(Q))return!1;break}case P.SVG:{if(O8.has(Q))return!1;break}case P.MATHML:{if(b8.has(Q))return!1;break}}}return!0}hasInTableScope(Z){for(let Q=this.stackTop;Q>=0;Q--){if(this.treeAdapter.getNamespaceURI(this.items[Q])!==P.HTML)continue;switch(this.tagIDs[Q]){case Z:return!0;case J.TABLE:case J.HTML:return!1}}return!0}hasTableBodyContextInTableScope(){for(let Z=this.stackTop;Z>=0;Z--){if(this.treeAdapter.getNamespaceURI(this.items[Z])!==P.HTML)continue;switch(this.tagIDs[Z]){case J.TBODY:case J.THEAD:case J.TFOOT:return!0;case J.TABLE:case J.HTML:return!1}}return!0}hasInSelectScope(Z){for(let Q=this.stackTop;Q>=0;Q--){if(this.treeAdapter.getNamespaceURI(this.items[Q])!==P.HTML)continue;switch(this.tagIDs[Q]){case Z:return!0;case J.OPTION:case J.OPTGROUP:break;default:return!1}}return!0}generateImpliedEndTags(){while(this.currentTagId!==void 0&&C8.has(this.currentTagId))this.pop()}generateImpliedEndTagsThoroughly(){while(this.currentTagId!==void 0&&x8.has(this.currentTagId))this.pop()}generateImpliedEndTagsWithExclusion(Z){while(this.currentTagId!==void 0&&this.currentTagId!==Z&&x8.has(this.currentTagId))this.pop()}}var j0;(function(Z){Z[Z.Marker=0]="Marker",Z[Z.Element=1]="Element"})(j0||(j0={}));var v8={type:j0.Marker};class o4{constructor(Z){this.treeAdapter=Z,this.entries=[],this.bookmark=null}_getNoahArkConditionCandidates(Z,Q){let X=[],K=Q.length,Y=this.treeAdapter.getTagName(Z),W=this.treeAdapter.getNamespaceURI(Z);for(let z=0;z<this.entries.length;z++){let B=this.entries[z];if(B.type===j0.Marker)break;let{element:w}=B;if(this.treeAdapter.getTagName(w)===Y&&this.treeAdapter.getNamespaceURI(w)===W){let q=this.treeAdapter.getAttrList(w);if(q.length===K)X.push({idx:z,attrs:q})}}return X}_ensureNoahArkCondition(Z){if(this.entries.length<3)return;let Q=this.treeAdapter.getAttrList(Z),X=this._getNoahArkConditionCandidates(Z,Q);if(X.length<3)return;let K=new Map(Q.map((W)=>[W.name,W.value])),Y=0;for(let W=0;W<X.length;W++){let z=X[W];if(z.attrs.every((B)=>K.get(B.name)===B.value)){if(Y+=1,Y>=3)this.entries.splice(z.idx,1)}}}insertMarker(){this.entries.unshift(v8)}pushElement(Z,Q){this._ensureNoahArkCondition(Z),this.entries.unshift({type:j0.Element,element:Z,token:Q})}insertElementAfterBookmark(Z,Q){let X=this.entries.indexOf(this.bookmark);this.entries.splice(X,0,{type:j0.Element,element:Z,token:Q})}removeEntry(Z){let Q=this.entries.indexOf(Z);if(Q!==-1)this.entries.splice(Q,1)}clearToLastMarker(){let Z=this.entries.indexOf(v8);if(Z===-1)this.entries.length=0;else this.entries.splice(0,Z+1)}getElementEntryInScopeWithTagName(Z){let Q=this.entries.find((X)=>X.type===j0.Marker||this.treeAdapter.getTagName(X.element)===Z);return Q&&Q.type===j0.Element?Q:null}getElementEntry(Z){return this.entries.find((Q)=>Q.type===j0.Element&&Q.element===Z)}}var Y0={createDocument(){return{nodeName:"#document",mode:e.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return{nodeName:"#document-fragment",childNodes:[]}},createElement(Z,Q,X){return{nodeName:Z,tagName:Z,attrs:X,namespaceURI:Q,childNodes:[],parentNode:null}},createCommentNode(Z){return{nodeName:"#comment",data:Z,parentNode:null}},createTextNode(Z){return{nodeName:"#text",value:Z,parentNode:null}},appendChild(Z,Q){Z.childNodes.push(Q),Q.parentNode=Z},insertBefore(Z,Q,X){let K=Z.childNodes.indexOf(X);Z.childNodes.splice(K,0,Q),Q.parentNode=Z},setTemplateContent(Z,Q){Z.content=Q},getTemplateContent(Z){return Z.content},setDocumentType(Z,Q,X,K){let Y=Z.childNodes.find((W)=>W.nodeName==="#documentType");if(Y)Y.name=Q,Y.publicId=X,Y.systemId=K;else{let W={nodeName:"#documentType",name:Q,publicId:X,systemId:K,parentNode:null};Y0.appendChild(Z,W)}},setDocumentMode(Z,Q){Z.mode=Q},getDocumentMode(Z){return Z.mode},detachNode(Z){if(Z.parentNode){let Q=Z.parentNode.childNodes.indexOf(Z);Z.parentNode.childNodes.splice(Q,1),Z.parentNode=null}},insertText(Z,Q){if(Z.childNodes.length>0){let X=Z.childNodes[Z.childNodes.length-1];if(Y0.isTextNode(X)){X.value+=Q;return}}Y0.appendChild(Z,Y0.createTextNode(Q))},insertTextBefore(Z,Q,X){let K=Z.childNodes[Z.childNodes.indexOf(X)-1];if(K&&Y0.isTextNode(K))K.value+=Q;else Y0.insertBefore(Z,Y0.createTextNode(Q),X)},adoptAttributes(Z,Q){let X=new Set(Z.attrs.map((K)=>K.name));for(let K=0;K<Q.length;K++)if(!X.has(Q[K].name))Z.attrs.push(Q[K])},getFirstChild(Z){return Z.childNodes[0]},getChildNodes(Z){return Z.childNodes},getParentNode(Z){return Z.parentNode},getAttrList(Z){return Z.attrs},getTagName(Z){return Z.tagName},getNamespaceURI(Z){return Z.namespaceURI},getTextNodeContent(Z){return Z.value},getCommentNodeContent(Z){return Z.data},getDocumentTypeNodeName(Z){return Z.name},getDocumentTypeNodePublicId(Z){return Z.publicId},getDocumentTypeNodeSystemId(Z){return Z.systemId},isTextNode(Z){return Z.nodeName==="#text"},isCommentNode(Z){return Z.nodeName==="#comment"},isDocumentTypeNode(Z){return Z.nodeName==="#documentType"},isElementNode(Z){return Object.prototype.hasOwnProperty.call(Z,"tagName")},setNodeSourceCodeLocation(Z,Q){Z.sourceCodeLocation=Q},getNodeSourceCodeLocation(Z){return Z.sourceCodeLocation},updateNodeSourceCodeLocation(Z,Q){Z.sourceCodeLocation={...Z.sourceCodeLocation,...Q}}};var y8="html",FZ="about:legacy-compat",wZ="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd",f8=["+//silmaril//dtd html pro v0r11 19970101//","-//as//dtd html 3.0 aswedit + extensions//","-//advasoft ltd//dtd html 3.0 aswedit + extensions//","-//ietf//dtd html 2.0 level 1//","-//ietf//dtd html 2.0 level 2//","-//ietf//dtd html 2.0 strict level 1//","-//ietf//dtd html 2.0 strict level 2//","-//ietf//dtd html 2.0 strict//","-//ietf//dtd html 2.0//","-//ietf//dtd html 2.1e//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.2 final//","-//ietf//dtd html 3.2//","-//ietf//dtd html 3//","-//ietf//dtd html level 0//","-//ietf//dtd html level 1//","-//ietf//dtd html level 2//","-//ietf//dtd html level 3//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict//","-//ietf//dtd html//","-//metrius//dtd metrius presentational//","-//microsoft//dtd internet explorer 2.0 html strict//","-//microsoft//dtd internet explorer 2.0 html//","-//microsoft//dtd internet explorer 2.0 tables//","-//microsoft//dtd internet explorer 3.0 html strict//","-//microsoft//dtd internet explorer 3.0 html//","-//microsoft//dtd internet explorer 3.0 tables//","-//netscape comm. corp.//dtd html//","-//netscape comm. corp.//dtd strict html//","-//o'reilly and associates//dtd html 2.0//","-//o'reilly and associates//dtd html extended 1.0//","-//o'reilly and associates//dtd html extended relaxed 1.0//","-//sq//dtd html 2.0 hotmetal + extensions//","-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//","-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//","-//spyglass//dtd html 2.0 extended//","-//sun microsystems corp.//dtd hotjava html//","-//sun microsystems corp.//dtd hotjava strict html//","-//w3c//dtd html 3 1995-03-24//","-//w3c//dtd html 3.2 draft//","-//w3c//dtd html 3.2 final//","-//w3c//dtd html 3.2//","-//w3c//dtd html 3.2s draft//","-//w3c//dtd html 4.0 frameset//","-//w3c//dtd html 4.0 transitional//","-//w3c//dtd html experimental 19960712//","-//w3c//dtd html experimental 970421//","-//w3c//dtd w3 html//","-//w3o//dtd w3 html 3.0//","-//webtechs//dtd mozilla html 2.0//","-//webtechs//dtd mozilla html//"],LZ=[...f8,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],PZ=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),h8=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],xZ=[...h8,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function R8(Z,Q){return Q.some((X)=>Z.startsWith(X))}function M8(Z){return Z.name===y8&&Z.publicId===null&&(Z.systemId===null||Z.systemId===FZ)}function N8(Z){if(Z.name!==y8)return e.QUIRKS;let{systemId:Q}=Z;if(Q&&Q.toLowerCase()===wZ)return e.QUIRKS;let{publicId:X}=Z;if(X!==null){if(X=X.toLowerCase(),PZ.has(X))return e.QUIRKS;let K=Q===null?LZ:f8;if(R8(X,K))return e.QUIRKS;if(K=Q===null?h8:xZ,R8(X,K))return e.LIMITED_QUIRKS}return e.NO_QUIRKS}var D8={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},OZ="definitionurl",CZ="definitionURL",vZ=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map((Z)=>[Z.toLowerCase(),Z])),RZ=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:P.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:P.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:P.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:P.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:P.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:P.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:P.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:P.XML}],["xml:space",{prefix:"xml",name:"space",namespace:P.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:P.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:P.XMLNS}]]),yZ=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map((Z)=>[Z.toLowerCase(),Z])),fZ=new Set([J.B,J.BIG,J.BLOCKQUOTE,J.BODY,J.BR,J.CENTER,J.CODE,J.DD,J.DIV,J.DL,J.DT,J.EM,J.EMBED,J.H1,J.H2,J.H3,J.H4,J.H5,J.H6,J.HEAD,J.HR,J.I,J.IMG,J.LI,J.LISTING,J.MENU,J.META,J.NOBR,J.OL,J.P,J.PRE,J.RUBY,J.S,J.SMALL,J.SPAN,J.STRONG,J.STRIKE,J.SUB,J.SUP,J.TABLE,J.TT,J.U,J.UL,J.VAR]);function $8(Z){let Q=Z.tagID;return Q===J.FONT&&Z.attrs.some(({name:K})=>K===L0.COLOR||K===L0.SIZE||K===L0.FACE)||fZ.has(Q)}function n4(Z){for(let Q=0;Q<Z.attrs.length;Q++)if(Z.attrs[Q].name===OZ){Z.attrs[Q].name=CZ;break}}function t4(Z){for(let Q=0;Q<Z.attrs.length;Q++){let X=vZ.get(Z.attrs[Q].name);if(X!=null)Z.attrs[Q].name=X}}function a1(Z){for(let Q=0;Q<Z.attrs.length;Q++){let X=RZ.get(Z.attrs[Q].name);if(X)Z.attrs[Q].prefix=X.prefix,Z.attrs[Q].name=X.name,Z.attrs[Q].namespace=X.namespace}}function G8(Z){let Q=yZ.get(Z.tagName);if(Q!=null)Z.tagName=Q,Z.tagID=E0(Z.tagName)}function hZ(Z,Q){return Q===P.MATHML&&(Z===J.MI||Z===J.MO||Z===J.MN||Z===J.MS||Z===J.MTEXT)}function MZ(Z,Q,X){if(Q===P.MATHML&&Z===J.ANNOTATION_XML){for(let K=0;K<X.length;K++)if(X[K].name===L0.ENCODING){let Y=X[K].value.toLowerCase();return Y===D8.TEXT_HTML||Y===D8.APPLICATION_XML}}return Q===P.SVG&&(Z===J.FOREIGN_OBJECT||Z===J.DESC||Z===J.TITLE)}function g8(Z,Q,X,K){return(!K||K===P.HTML)&&MZ(Z,Q,X)||(!K||K===P.MATHML)&&hZ(Z,Q)}var NZ="hidden",DZ=8,$Z=3,j;(function(Z){Z[Z.INITIAL=0]="INITIAL",Z[Z.BEFORE_HTML=1]="BEFORE_HTML",Z[Z.BEFORE_HEAD=2]="BEFORE_HEAD",Z[Z.IN_HEAD=3]="IN_HEAD",Z[Z.IN_HEAD_NO_SCRIPT=4]="IN_HEAD_NO_SCRIPT",Z[Z.AFTER_HEAD=5]="AFTER_HEAD",Z[Z.IN_BODY=6]="IN_BODY",Z[Z.TEXT=7]="TEXT",Z[Z.IN_TABLE=8]="IN_TABLE",Z[Z.IN_TABLE_TEXT=9]="IN_TABLE_TEXT",Z[Z.IN_CAPTION=10]="IN_CAPTION",Z[Z.IN_COLUMN_GROUP=11]="IN_COLUMN_GROUP",Z[Z.IN_TABLE_BODY=12]="IN_TABLE_BODY",Z[Z.IN_ROW=13]="IN_ROW",Z[Z.IN_CELL=14]="IN_CELL",Z[Z.IN_SELECT=15]="IN_SELECT",Z[Z.IN_SELECT_IN_TABLE=16]="IN_SELECT_IN_TABLE",Z[Z.IN_TEMPLATE=17]="IN_TEMPLATE",Z[Z.AFTER_BODY=18]="AFTER_BODY",Z[Z.IN_FRAMESET=19]="IN_FRAMESET",Z[Z.AFTER_FRAMESET=20]="AFTER_FRAMESET",Z[Z.AFTER_AFTER_BODY=21]="AFTER_AFTER_BODY",Z[Z.AFTER_AFTER_FRAMESET=22]="AFTER_AFTER_FRAMESET"})(j||(j={}));var GZ={startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1},S8=new Set([J.TABLE,J.TBODY,J.TFOOT,J.THEAD,J.TR]),m8={scriptingEnabled:!0,sourceCodeLocationInfo:!1,treeAdapter:Y0,onParseError:null};class r1{constructor(Z,Q,X=null,K=null){if(this.fragmentContext=X,this.scriptHandler=K,this.currentToken=null,this.stopped=!1,this.insertionMode=j.INITIAL,this.originalInsertionMode=j.INITIAL,this.headElement=null,this.formElement=null,this.currentNotInHTML=!1,this.tmplInsertionModeStack=[],this.pendingCharacterTokens=[],this.hasNonWhitespacePendingCharacterToken=!1,this.framesetOk=!0,this.skipNextNewLine=!1,this.fosterParentingEnabled=!1,this.options={...m8,...Z},this.treeAdapter=this.options.treeAdapter,this.onParseError=this.options.onParseError,this.onParseError)this.options.sourceCodeLocationInfo=!0;this.document=Q!==null&&Q!==void 0?Q:this.treeAdapter.createDocument(),this.tokenizer=new c1(this.options,this),this.activeFormattingElements=new o4(this.treeAdapter),this.fragmentContextID=X?E0(this.treeAdapter.getTagName(X)):J.UNKNOWN,this._setContextModes(X!==null&&X!==void 0?X:this.document,this.fragmentContextID),this.openElements=new r4(this.document,this.treeAdapter,this)}static parse(Z,Q){let X=new this(Q);return X.tokenizer.write(Z,!0),X.document}static getFragmentParser(Z,Q){let X={...m8,...Q};Z!==null&&Z!==void 0||(Z=X.treeAdapter.createElement(U.TEMPLATE,P.HTML,[]));let K=X.treeAdapter.createElement("documentmock",P.HTML,[]),Y=new this(X,K,Z);if(Y.fragmentContextID===J.TEMPLATE)Y.tmplInsertionModeStack.unshift(j.IN_TEMPLATE);return Y._initTokenizerForFragmentParsing(),Y._insertFakeRootElement(),Y._resetInsertionMode(),Y._findFormInFragmentContext(),Y}getFragment(){let Z=this.treeAdapter.getFirstChild(this.document),Q=this.treeAdapter.createDocumentFragment();return this._adoptNodes(Z,Q),Q}_err(Z,Q,X){var K;if(!this.onParseError)return;let Y=(K=Z.location)!==null&&K!==void 0?K:GZ,W={code:Q,startLine:Y.startLine,startCol:Y.startCol,startOffset:Y.startOffset,endLine:X?Y.startLine:Y.endLine,endCol:X?Y.startCol:Y.endCol,endOffset:X?Y.startOffset:Y.endOffset};this.onParseError(W)}onItemPush(Z,Q,X){var K,Y;if((Y=(K=this.treeAdapter).onItemPush)===null||Y===void 0||Y.call(K,Z),X&&this.openElements.stackTop>0)this._setContextModes(Z,Q)}onItemPop(Z,Q){var X,K;if(this.options.sourceCodeLocationInfo)this._setEndLocation(Z,this.currentToken);if((K=(X=this.treeAdapter).onItemPop)===null||K===void 0||K.call(X,Z,this.openElements.current),Q){let Y,W;if(this.openElements.stackTop===0&&this.fragmentContext)Y=this.fragmentContext,W=this.fragmentContextID;else({current:Y,currentTagId:W}=this.openElements);this._setContextModes(Y,W)}}_setContextModes(Z,Q){let X=Z===this.document||Z&&this.treeAdapter.getNamespaceURI(Z)===P.HTML;this.currentNotInHTML=!X,this.tokenizer.inForeignNode=!X&&Z!==void 0&&Q!==void 0&&!this._isIntegrationPoint(Q,Z)}_switchToTextParsing(Z,Q){this._insertElement(Z,P.HTML),this.tokenizer.state=Q,this.originalInsertionMode=this.insertionMode,this.insertionMode=j.TEXT}switchToPlaintextParsing(){this.insertionMode=j.TEXT,this.originalInsertionMode=j.IN_BODY,this.tokenizer.state=o.PLAINTEXT}_getAdjustedCurrentElement(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let Z=this.fragmentContext;while(Z){if(this.treeAdapter.getTagName(Z)===U.FORM){this.formElement=Z;break}Z=this.treeAdapter.getParentNode(Z)}}_initTokenizerForFragmentParsing(){if(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==P.HTML)return;switch(this.fragmentContextID){case J.TITLE:case J.TEXTAREA:{this.tokenizer.state=o.RCDATA;break}case J.STYLE:case J.XMP:case J.IFRAME:case J.NOEMBED:case J.NOFRAMES:case J.NOSCRIPT:{this.tokenizer.state=o.RAWTEXT;break}case J.SCRIPT:{this.tokenizer.state=o.SCRIPT_DATA;break}case J.PLAINTEXT:{this.tokenizer.state=o.PLAINTEXT;break}default:}}_setDocumentType(Z){let Q=Z.name||"",X=Z.publicId||"",K=Z.systemId||"";if(this.treeAdapter.setDocumentType(this.document,Q,X,K),Z.location){let W=this.treeAdapter.getChildNodes(this.document).find((z)=>this.treeAdapter.isDocumentTypeNode(z));if(W)this.treeAdapter.setNodeSourceCodeLocation(W,Z.location)}}_attachElementToTree(Z,Q){if(this.options.sourceCodeLocationInfo){let X=Q&&{...Q,startTag:Q};this.treeAdapter.setNodeSourceCodeLocation(Z,X)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(Z);else{let X=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(X!==null&&X!==void 0?X:this.document,Z)}}_appendElement(Z,Q){let X=this.treeAdapter.createElement(Z.tagName,Q,Z.attrs);this._attachElementToTree(X,Z.location)}_insertElement(Z,Q){let X=this.treeAdapter.createElement(Z.tagName,Q,Z.attrs);this._attachElementToTree(X,Z.location),this.openElements.push(X,Z.tagID)}_insertFakeElement(Z,Q){let X=this.treeAdapter.createElement(Z,P.HTML,[]);this._attachElementToTree(X,null),this.openElements.push(X,Q)}_insertTemplate(Z){let Q=this.treeAdapter.createElement(Z.tagName,P.HTML,Z.attrs),X=this.treeAdapter.createDocumentFragment();if(this.treeAdapter.setTemplateContent(Q,X),this._attachElementToTree(Q,Z.location),this.openElements.push(Q,Z.tagID),this.options.sourceCodeLocationInfo)this.treeAdapter.setNodeSourceCodeLocation(X,null)}_insertFakeRootElement(){let Z=this.treeAdapter.createElement(U.HTML,P.HTML,[]);if(this.options.sourceCodeLocationInfo)this.treeAdapter.setNodeSourceCodeLocation(Z,null);this.treeAdapter.appendChild(this.openElements.current,Z),this.openElements.push(Z,J.HTML)}_appendCommentNode(Z,Q){let X=this.treeAdapter.createCommentNode(Z.data);if(this.treeAdapter.appendChild(Q,X),this.options.sourceCodeLocationInfo)this.treeAdapter.setNodeSourceCodeLocation(X,Z.location)}_insertCharacters(Z){let Q,X;if(this._shouldFosterParentOnInsertion())if({parent:Q,beforeElement:X}=this._findFosterParentingLocation(),X)this.treeAdapter.insertTextBefore(Q,Z.chars,X);else this.treeAdapter.insertText(Q,Z.chars);else Q=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(Q,Z.chars);if(!Z.location)return;let K=this.treeAdapter.getChildNodes(Q),Y=X?K.lastIndexOf(X):K.length,W=K[Y-1];if(this.treeAdapter.getNodeSourceCodeLocation(W)){let{endLine:B,endCol:w,endOffset:q}=Z.location;this.treeAdapter.updateNodeSourceCodeLocation(W,{endLine:B,endCol:w,endOffset:q})}else if(this.options.sourceCodeLocationInfo)this.treeAdapter.setNodeSourceCodeLocation(W,Z.location)}_adoptNodes(Z,Q){for(let X=this.treeAdapter.getFirstChild(Z);X;X=this.treeAdapter.getFirstChild(Z))this.treeAdapter.detachNode(X),this.treeAdapter.appendChild(Q,X)}_setEndLocation(Z,Q){if(this.treeAdapter.getNodeSourceCodeLocation(Z)&&Q.location){let X=Q.location,K=this.treeAdapter.getTagName(Z),Y=Q.type===k.END_TAG&&K===Q.tagName?{endTag:{...X},endLine:X.endLine,endCol:X.endCol,endOffset:X.endOffset}:{endLine:X.startLine,endCol:X.startCol,endOffset:X.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(Z,Y)}}shouldProcessStartTagTokenInForeignContent(Z){if(!this.currentNotInHTML)return!1;let Q,X;if(this.openElements.stackTop===0&&this.fragmentContext)Q=this.fragmentContext,X=this.fragmentContextID;else({current:Q,currentTagId:X}=this.openElements);if(Z.tagID===J.SVG&&this.treeAdapter.getTagName(Q)===U.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(Q)===P.MATHML)return!1;return this.tokenizer.inForeignNode||(Z.tagID===J.MGLYPH||Z.tagID===J.MALIGNMARK)&&X!==void 0&&!this._isIntegrationPoint(X,Q,P.HTML)}_processToken(Z){switch(Z.type){case k.CHARACTER:{this.onCharacter(Z);break}case k.NULL_CHARACTER:{this.onNullCharacter(Z);break}case k.COMMENT:{this.onComment(Z);break}case k.DOCTYPE:{this.onDoctype(Z);break}case k.START_TAG:{this._processStartTag(Z);break}case k.END_TAG:{this.onEndTag(Z);break}case k.EOF:{this.onEof(Z);break}case k.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(Z);break}}}_isIntegrationPoint(Z,Q,X){let K=this.treeAdapter.getNamespaceURI(Q),Y=this.treeAdapter.getAttrList(Q);return g8(Z,K,Y,X)}_reconstructActiveFormattingElements(){let Z=this.activeFormattingElements.entries.length;if(Z){let Q=this.activeFormattingElements.entries.findIndex((K)=>K.type===j0.Marker||this.openElements.contains(K.element)),X=Q===-1?Z-1:Q-1;for(let K=X;K>=0;K--){let Y=this.activeFormattingElements.entries[K];this._insertElement(Y.token,this.treeAdapter.getNamespaceURI(Y.element)),Y.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=j.IN_ROW}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(J.P),this.openElements.popUntilTagNamePopped(J.P)}_resetInsertionMode(){for(let Z=this.openElements.stackTop;Z>=0;Z--)switch(Z===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[Z]){case J.TR:{this.insertionMode=j.IN_ROW;return}case J.TBODY:case J.THEAD:case J.TFOOT:{this.insertionMode=j.IN_TABLE_BODY;return}case J.CAPTION:{this.insertionMode=j.IN_CAPTION;return}case J.COLGROUP:{this.insertionMode=j.IN_COLUMN_GROUP;return}case J.TABLE:{this.insertionMode=j.IN_TABLE;return}case J.BODY:{this.insertionMode=j.IN_BODY;return}case J.FRAMESET:{this.insertionMode=j.IN_FRAMESET;return}case J.SELECT:{this._resetInsertionModeForSelect(Z);return}case J.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case J.HTML:{this.insertionMode=this.headElement?j.AFTER_HEAD:j.BEFORE_HEAD;return}case J.TD:case J.TH:{if(Z>0){this.insertionMode=j.IN_CELL;return}break}case J.HEAD:{if(Z>0){this.insertionMode=j.IN_HEAD;return}break}}this.insertionMode=j.IN_BODY}_resetInsertionModeForSelect(Z){if(Z>0)for(let Q=Z-1;Q>0;Q--){let X=this.openElements.tagIDs[Q];if(X===J.TEMPLATE)break;else if(X===J.TABLE){this.insertionMode=j.IN_SELECT_IN_TABLE;return}}this.insertionMode=j.IN_SELECT}_isElementCausesFosterParenting(Z){return S8.has(Z)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this.openElements.currentTagId!==void 0&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let Z=this.openElements.stackTop;Z>=0;Z--){let Q=this.openElements.items[Z];switch(this.openElements.tagIDs[Z]){case J.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(Q)===P.HTML)return{parent:this.treeAdapter.getTemplateContent(Q),beforeElement:null};break}case J.TABLE:{let X=this.treeAdapter.getParentNode(Q);if(X)return{parent:X,beforeElement:Q};return{parent:this.openElements.items[Z-1],beforeElement:null}}default:}}return{parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(Z){let Q=this._findFosterParentingLocation();if(Q.beforeElement)this.treeAdapter.insertBefore(Q.parent,Z,Q.beforeElement);else this.treeAdapter.appendChild(Q.parent,Z)}_isSpecialElement(Z,Q){let X=this.treeAdapter.getNamespaceURI(Z);return B8[X].has(Q)}onCharacter(Z){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){VQ(this,Z);return}switch(this.insertionMode){case j.INITIAL:{Q1(this,Z);break}case j.BEFORE_HTML:{J1(this,Z);break}case j.BEFORE_HEAD:{K1(this,Z);break}case j.IN_HEAD:{Y1(this,Z);break}case j.IN_HEAD_NO_SCRIPT:{W1(this,Z);break}case j.AFTER_HEAD:{V1(this,Z);break}case j.IN_BODY:case j.IN_CAPTION:case j.IN_CELL:case j.IN_TEMPLATE:{u8(this,Z);break}case j.TEXT:case j.IN_SELECT:case j.IN_SELECT_IN_TABLE:{this._insertCharacters(Z);break}case j.IN_TABLE:case j.IN_TABLE_BODY:case j.IN_ROW:{e4(this,Z);break}case j.IN_TABLE_TEXT:{a8(this,Z);break}case j.IN_COLUMN_GROUP:{p1(this,Z);break}case j.AFTER_BODY:{s1(this,Z);break}case j.AFTER_AFTER_BODY:{i1(this,Z);break}default:}}onNullCharacter(Z){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){WQ(this,Z);return}switch(this.insertionMode){case j.INITIAL:{Q1(this,Z);break}case j.BEFORE_HTML:{J1(this,Z);break}case j.BEFORE_HEAD:{K1(this,Z);break}case j.IN_HEAD:{Y1(this,Z);break}case j.IN_HEAD_NO_SCRIPT:{W1(this,Z);break}case j.AFTER_HEAD:{V1(this,Z);break}case j.TEXT:{this._insertCharacters(Z);break}case j.IN_TABLE:case j.IN_TABLE_BODY:case j.IN_ROW:{e4(this,Z);break}case j.IN_COLUMN_GROUP:{p1(this,Z);break}case j.AFTER_BODY:{s1(this,Z);break}case j.AFTER_AFTER_BODY:{i1(this,Z);break}default:}}onComment(Z){if(this.skipNextNewLine=!1,this.currentNotInHTML){Z6(this,Z);return}switch(this.insertionMode){case j.INITIAL:case j.BEFORE_HTML:case j.BEFORE_HEAD:case j.IN_HEAD:case j.IN_HEAD_NO_SCRIPT:case j.AFTER_HEAD:case j.IN_BODY:case j.IN_TABLE:case j.IN_CAPTION:case j.IN_COLUMN_GROUP:case j.IN_TABLE_BODY:case j.IN_ROW:case j.IN_CELL:case j.IN_SELECT:case j.IN_SELECT_IN_TABLE:case j.IN_TEMPLATE:case j.IN_FRAMESET:case j.AFTER_FRAMESET:{Z6(this,Z);break}case j.IN_TABLE_TEXT:{X1(this,Z);break}case j.AFTER_BODY:{IZ(this,Z);break}case j.AFTER_AFTER_BODY:case j.AFTER_AFTER_FRAMESET:{uZ(this,Z);break}default:}}onDoctype(Z){switch(this.skipNextNewLine=!1,this.insertionMode){case j.INITIAL:{TZ(this,Z);break}case j.BEFORE_HEAD:case j.IN_HEAD:case j.IN_HEAD_NO_SCRIPT:case j.AFTER_HEAD:{this._err(Z,F.misplacedDoctype);break}case j.IN_TABLE_TEXT:{X1(this,Z);break}default:}}onStartTag(Z){if(this.skipNextNewLine=!1,this.currentToken=Z,this._processStartTag(Z),Z.selfClosing&&!Z.ackSelfClosing)this._err(Z,F.nonVoidHtmlElementStartTagWithTrailingSolidus)}_processStartTag(Z){if(this.shouldProcessStartTagTokenInForeignContent(Z))HQ(this,Z);else this._startTagOutsideForeignContent(Z)}_startTagOutsideForeignContent(Z){switch(this.insertionMode){case j.INITIAL:{Q1(this,Z);break}case j.BEFORE_HTML:{AZ(this,Z);break}case j.BEFORE_HEAD:{cZ(this,Z);break}case j.IN_HEAD:{z0(this,Z);break}case j.IN_HEAD_NO_SCRIPT:{iZ(this,Z);break}case j.AFTER_HEAD:{sZ(this,Z);break}case j.IN_BODY:{n(this,Z);break}case j.IN_TABLE:{A0(this,Z);break}case j.IN_TABLE_TEXT:{X1(this,Z);break}case j.IN_CAPTION:{d5(this,Z);break}case j.IN_COLUMN_GROUP:{K6(this,Z);break}case j.IN_TABLE_BODY:{t1(this,Z);break}case j.IN_ROW:{e1(this,Z);break}case j.IN_CELL:{p5(this,Z);break}case j.IN_SELECT:{s8(this,Z);break}case j.IN_SELECT_IN_TABLE:{r5(this,Z);break}case j.IN_TEMPLATE:{n5(this,Z);break}case j.AFTER_BODY:{e5(this,Z);break}case j.IN_FRAMESET:{ZQ(this,Z);break}case j.AFTER_FRAMESET:{XQ(this,Z);break}case j.AFTER_AFTER_BODY:{KQ(this,Z);break}case j.AFTER_AFTER_FRAMESET:{YQ(this,Z);break}default:}}onEndTag(Z){if(this.skipNextNewLine=!1,this.currentToken=Z,this.currentNotInHTML)jQ(this,Z);else this._endTagOutsideForeignContent(Z)}_endTagOutsideForeignContent(Z){switch(this.insertionMode){case j.INITIAL:{Q1(this,Z);break}case j.BEFORE_HTML:{lZ(this,Z);break}case j.BEFORE_HEAD:{dZ(this,Z);break}case j.IN_HEAD:{aZ(this,Z);break}case j.IN_HEAD_NO_SCRIPT:{pZ(this,Z);break}case j.AFTER_HEAD:{rZ(this,Z);break}case j.IN_BODY:{n1(this,Z);break}case j.TEXT:{m5(this,Z);break}case j.IN_TABLE:{H1(this,Z);break}case j.IN_TABLE_TEXT:{X1(this,Z);break}case j.IN_CAPTION:{a5(this,Z);break}case j.IN_COLUMN_GROUP:{i5(this,Z);break}case j.IN_TABLE_BODY:{Q6(this,Z);break}case j.IN_ROW:{p8(this,Z);break}case j.IN_CELL:{s5(this,Z);break}case j.IN_SELECT:{r8(this,Z);break}case j.IN_SELECT_IN_TABLE:{o5(this,Z);break}case j.IN_TEMPLATE:{t5(this,Z);break}case j.AFTER_BODY:{n8(this,Z);break}case j.IN_FRAMESET:{QQ(this,Z);break}case j.AFTER_FRAMESET:{JQ(this,Z);break}case j.AFTER_AFTER_BODY:{i1(this,Z);break}default:}}onEof(Z){switch(this.insertionMode){case j.INITIAL:{Q1(this,Z);break}case j.BEFORE_HTML:{J1(this,Z);break}case j.BEFORE_HEAD:{K1(this,Z);break}case j.IN_HEAD:{Y1(this,Z);break}case j.IN_HEAD_NO_SCRIPT:{W1(this,Z);break}case j.AFTER_HEAD:{V1(this,Z);break}case j.IN_BODY:case j.IN_TABLE:case j.IN_CAPTION:case j.IN_COLUMN_GROUP:case j.IN_TABLE_BODY:case j.IN_ROW:case j.IN_CELL:case j.IN_SELECT:case j.IN_SELECT_IN_TABLE:{c8(this,Z);break}case j.TEXT:{k5(this,Z);break}case j.IN_TABLE_TEXT:{X1(this,Z);break}case j.IN_TEMPLATE:{o8(this,Z);break}case j.AFTER_BODY:case j.IN_FRAMESET:case j.AFTER_FRAMESET:case j.AFTER_AFTER_BODY:case j.AFTER_AFTER_FRAMESET:{J6(this,Z);break}default:}}onWhitespaceCharacter(Z){if(this.skipNextNewLine){if(this.skipNextNewLine=!1,Z.chars.charCodeAt(0)===V.LINE_FEED){if(Z.chars.length===1)return;Z.chars=Z.chars.substr(1)}}if(this.tokenizer.inForeignNode){this._insertCharacters(Z);return}switch(this.insertionMode){case j.IN_HEAD:case j.IN_HEAD_NO_SCRIPT:case j.AFTER_HEAD:case j.TEXT:case j.IN_COLUMN_GROUP:case j.IN_SELECT:case j.IN_SELECT_IN_TABLE:case j.IN_FRAMESET:case j.AFTER_FRAMESET:{this._insertCharacters(Z);break}case j.IN_BODY:case j.IN_CAPTION:case j.IN_CELL:case j.IN_TEMPLATE:case j.AFTER_BODY:case j.AFTER_AFTER_BODY:case j.AFTER_AFTER_FRAMESET:{I8(this,Z);break}case j.IN_TABLE:case j.IN_TABLE_BODY:case j.IN_ROW:{e4(this,Z);break}case j.IN_TABLE_TEXT:{d8(this,Z);break}default:}}}function gZ(Z,Q){let X=Z.activeFormattingElements.getElementEntryInScopeWithTagName(Q.tagName);if(X){if(!Z.openElements.contains(X.element))Z.activeFormattingElements.removeEntry(X),X=null;else if(!Z.openElements.hasInScope(Q.tagID))X=null}else l8(Z,Q);return X}function EZ(Z,Q){let X=null,K=Z.openElements.stackTop;for(;K>=0;K--){let Y=Z.openElements.items[K];if(Y===Q.element)break;if(Z._isSpecialElement(Y,Z.openElements.tagIDs[K]))X=Y}if(!X)Z.openElements.shortenToLength(Math.max(K,0)),Z.activeFormattingElements.removeEntry(Q);return X}function mZ(Z,Q,X){let K=Q,Y=Z.openElements.getCommonAncestor(Q);for(let W=0,z=Y;z!==X;W++,z=Y){Y=Z.openElements.getCommonAncestor(z);let B=Z.activeFormattingElements.getElementEntry(z),w=B&&W>=$Z;if(!B||w){if(w)Z.activeFormattingElements.removeEntry(B);Z.openElements.remove(z)}else{if(z=kZ(Z,B),K===Q)Z.activeFormattingElements.bookmark=B;Z.treeAdapter.detachNode(K),Z.treeAdapter.appendChild(z,K),K=z}}return K}function kZ(Z,Q){let X=Z.treeAdapter.getNamespaceURI(Q.element),K=Z.treeAdapter.createElement(Q.token.tagName,X,Q.token.attrs);return Z.openElements.replace(Q.element,K),Q.element=K,K}function _Z(Z,Q,X){let K=Z.treeAdapter.getTagName(Q),Y=E0(K);if(Z._isElementCausesFosterParenting(Y))Z._fosterParentElement(X);else{let W=Z.treeAdapter.getNamespaceURI(Q);if(Y===J.TEMPLATE&&W===P.HTML)Q=Z.treeAdapter.getTemplateContent(Q);Z.treeAdapter.appendChild(Q,X)}}function SZ(Z,Q,X){let K=Z.treeAdapter.getNamespaceURI(X.element),{token:Y}=X,W=Z.treeAdapter.createElement(Y.tagName,K,Y.attrs);Z._adoptNodes(Q,W),Z.treeAdapter.appendChild(Q,W),Z.activeFormattingElements.insertElementAfterBookmark(W,Y),Z.activeFormattingElements.removeEntry(X),Z.openElements.remove(X.element),Z.openElements.insertAfter(Q,W,Y.tagID)}function X6(Z,Q){for(let X=0;X<DZ;X++){let K=gZ(Z,Q);if(!K)break;let Y=EZ(Z,K);if(!Y)break;Z.activeFormattingElements.bookmark=K;let W=mZ(Z,Y,K.element),z=Z.openElements.getCommonAncestor(K.element);if(Z.treeAdapter.detachNode(W),z)_Z(Z,z,W);SZ(Z,Y,K)}}function Z6(Z,Q){Z._appendCommentNode(Q,Z.openElements.currentTmplContentOrNode)}function IZ(Z,Q){Z._appendCommentNode(Q,Z.openElements.items[0])}function uZ(Z,Q){Z._appendCommentNode(Q,Z.document)}function J6(Z,Q){if(Z.stopped=!0,Q.location){let X=Z.fragmentContext?0:2;for(let K=Z.openElements.stackTop;K>=X;K--)Z._setEndLocation(Z.openElements.items[K],Q);if(!Z.fragmentContext&&Z.openElements.stackTop>=0){let K=Z.openElements.items[0],Y=Z.treeAdapter.getNodeSourceCodeLocation(K);if(Y&&!Y.endTag){if(Z._setEndLocation(K,Q),Z.openElements.stackTop>=1){let W=Z.openElements.items[1],z=Z.treeAdapter.getNodeSourceCodeLocation(W);if(z&&!z.endTag)Z._setEndLocation(W,Q)}}}}}function TZ(Z,Q){Z._setDocumentType(Q);let X=Q.forceQuirks?e.QUIRKS:N8(Q);if(!M8(Q))Z._err(Q,F.nonConformingDoctype);Z.treeAdapter.setDocumentMode(Z.document,X),Z.insertionMode=j.BEFORE_HTML}function Q1(Z,Q){Z._err(Q,F.missingDoctype,!0),Z.treeAdapter.setDocumentMode(Z.document,e.QUIRKS),Z.insertionMode=j.BEFORE_HTML,Z._processToken(Q)}function AZ(Z,Q){if(Q.tagID===J.HTML)Z._insertElement(Q,P.HTML),Z.insertionMode=j.BEFORE_HEAD;else J1(Z,Q)}function lZ(Z,Q){let X=Q.tagID;if(X===J.HTML||X===J.HEAD||X===J.BODY||X===J.BR)J1(Z,Q)}function J1(Z,Q){Z._insertFakeRootElement(),Z.insertionMode=j.BEFORE_HEAD,Z._processToken(Q)}function cZ(Z,Q){switch(Q.tagID){case J.HTML:{n(Z,Q);break}case J.HEAD:{Z._insertElement(Q,P.HTML),Z.headElement=Z.openElements.current,Z.insertionMode=j.IN_HEAD;break}default:K1(Z,Q)}}function dZ(Z,Q){let X=Q.tagID;if(X===J.HEAD||X===J.BODY||X===J.HTML||X===J.BR)K1(Z,Q);else Z._err(Q,F.endTagWithoutMatchingOpenElement)}function K1(Z,Q){Z._insertFakeElement(U.HEAD,J.HEAD),Z.headElement=Z.openElements.current,Z.insertionMode=j.IN_HEAD,Z._processToken(Q)}function z0(Z,Q){switch(Q.tagID){case J.HTML:{n(Z,Q);break}case J.BASE:case J.BASEFONT:case J.BGSOUND:case J.LINK:case J.META:{Z._appendElement(Q,P.HTML),Q.ackSelfClosing=!0;break}case J.TITLE:{Z._switchToTextParsing(Q,o.RCDATA);break}case J.NOSCRIPT:{if(Z.options.scriptingEnabled)Z._switchToTextParsing(Q,o.RAWTEXT);else Z._insertElement(Q,P.HTML),Z.insertionMode=j.IN_HEAD_NO_SCRIPT;break}case J.NOFRAMES:case J.STYLE:{Z._switchToTextParsing(Q,o.RAWTEXT);break}case J.SCRIPT:{Z._switchToTextParsing(Q,o.SCRIPT_DATA);break}case J.TEMPLATE:{Z._insertTemplate(Q),Z.activeFormattingElements.insertMarker(),Z.framesetOk=!1,Z.insertionMode=j.IN_TEMPLATE,Z.tmplInsertionModeStack.unshift(j.IN_TEMPLATE);break}case J.HEAD:{Z._err(Q,F.misplacedStartTagForHeadElement);break}default:Y1(Z,Q)}}function aZ(Z,Q){switch(Q.tagID){case J.HEAD:{Z.openElements.pop(),Z.insertionMode=j.AFTER_HEAD;break}case J.BODY:case J.BR:case J.HTML:{Y1(Z,Q);break}case J.TEMPLATE:{m0(Z,Q);break}default:Z._err(Q,F.endTagWithoutMatchingOpenElement)}}function m0(Z,Q){if(Z.openElements.tmplCount>0){if(Z.openElements.generateImpliedEndTagsThoroughly(),Z.openElements.currentTagId!==J.TEMPLATE)Z._err(Q,F.closingOfElementWithOpenChildElements);Z.openElements.popUntilTagNamePopped(J.TEMPLATE),Z.activeFormattingElements.clearToLastMarker(),Z.tmplInsertionModeStack.shift(),Z._resetInsertionMode()}else Z._err(Q,F.endTagWithoutMatchingOpenElement)}function Y1(Z,Q){Z.openElements.pop(),Z.insertionMode=j.AFTER_HEAD,Z._processToken(Q)}function iZ(Z,Q){switch(Q.tagID){case J.HTML:{n(Z,Q);break}case J.BASEFONT:case J.BGSOUND:case J.HEAD:case J.LINK:case J.META:case J.NOFRAMES:case J.STYLE:{z0(Z,Q);break}case J.NOSCRIPT:{Z._err(Q,F.nestedNoscriptInHead);break}default:W1(Z,Q)}}function pZ(Z,Q){switch(Q.tagID){case J.NOSCRIPT:{Z.openElements.pop(),Z.insertionMode=j.IN_HEAD;break}case J.BR:{W1(Z,Q);break}default:Z._err(Q,F.endTagWithoutMatchingOpenElement)}}function W1(Z,Q){let X=Q.type===k.EOF?F.openElementsLeftAfterEof:F.disallowedContentInNoscriptInHead;Z._err(Q,X),Z.openElements.pop(),Z.insertionMode=j.IN_HEAD,Z._processToken(Q)}function sZ(Z,Q){switch(Q.tagID){case J.HTML:{n(Z,Q);break}case J.BODY:{Z._insertElement(Q,P.HTML),Z.framesetOk=!1,Z.insertionMode=j.IN_BODY;break}case J.FRAMESET:{Z._insertElement(Q,P.HTML),Z.insertionMode=j.IN_FRAMESET;break}case J.BASE:case J.BASEFONT:case J.BGSOUND:case J.LINK:case J.META:case J.NOFRAMES:case J.SCRIPT:case J.STYLE:case J.TEMPLATE:case J.TITLE:{Z._err(Q,F.abandonedHeadElementChild),Z.openElements.push(Z.headElement,J.HEAD),z0(Z,Q),Z.openElements.remove(Z.headElement);break}case J.HEAD:{Z._err(Q,F.misplacedStartTagForHeadElement);break}default:V1(Z,Q)}}function rZ(Z,Q){switch(Q.tagID){case J.BODY:case J.HTML:case J.BR:{V1(Z,Q);break}case J.TEMPLATE:{m0(Z,Q);break}default:Z._err(Q,F.endTagWithoutMatchingOpenElement)}}function V1(Z,Q){Z._insertFakeElement(U.BODY,J.BODY),Z.insertionMode=j.IN_BODY,o1(Z,Q)}function o1(Z,Q){switch(Q.type){case k.CHARACTER:{u8(Z,Q);break}case k.WHITESPACE_CHARACTER:{I8(Z,Q);break}case k.COMMENT:{Z6(Z,Q);break}case k.START_TAG:{n(Z,Q);break}case k.END_TAG:{n1(Z,Q);break}case k.EOF:{c8(Z,Q);break}default:}}function I8(Z,Q){Z._reconstructActiveFormattingElements(),Z._insertCharacters(Q)}function u8(Z,Q){Z._reconstructActiveFormattingElements(),Z._insertCharacters(Q),Z.framesetOk=!1}function oZ(Z,Q){if(Z.openElements.tmplCount===0)Z.treeAdapter.adoptAttributes(Z.openElements.items[0],Q.attrs)}function nZ(Z,Q){let X=Z.openElements.tryPeekProperlyNestedBodyElement();if(X&&Z.openElements.tmplCount===0)Z.framesetOk=!1,Z.treeAdapter.adoptAttributes(X,Q.attrs)}function tZ(Z,Q){let X=Z.openElements.tryPeekProperlyNestedBodyElement();if(Z.framesetOk&&X)Z.treeAdapter.detachNode(X),Z.openElements.popAllUpToHtmlElement(),Z._insertElement(Q,P.HTML),Z.insertionMode=j.IN_FRAMESET}function eZ(Z,Q){if(Z.openElements.hasInButtonScope(J.P))Z._closePElement();Z._insertElement(Q,P.HTML)}function Z5(Z,Q){if(Z.openElements.hasInButtonScope(J.P))Z._closePElement();if(Z.openElements.currentTagId!==void 0&&e0.has(Z.openElements.currentTagId))Z.openElements.pop();Z._insertElement(Q,P.HTML)}function Q5(Z,Q){if(Z.openElements.hasInButtonScope(J.P))Z._closePElement();Z._insertElement(Q,P.HTML),Z.skipNextNewLine=!0,Z.framesetOk=!1}function X5(Z,Q){let X=Z.openElements.tmplCount>0;if(!Z.formElement||X){if(Z.openElements.hasInButtonScope(J.P))Z._closePElement();if(Z._insertElement(Q,P.HTML),!X)Z.formElement=Z.openElements.current}}function J5(Z,Q){Z.framesetOk=!1;let X=Q.tagID;for(let K=Z.openElements.stackTop;K>=0;K--){let Y=Z.openElements.tagIDs[K];if(X===J.LI&&Y===J.LI||(X===J.DD||X===J.DT)&&(Y===J.DD||Y===J.DT)){Z.openElements.generateImpliedEndTagsWithExclusion(Y),Z.openElements.popUntilTagNamePopped(Y);break}if(Y!==J.ADDRESS&&Y!==J.DIV&&Y!==J.P&&Z._isSpecialElement(Z.openElements.items[K],Y))break}if(Z.openElements.hasInButtonScope(J.P))Z._closePElement();Z._insertElement(Q,P.HTML)}function K5(Z,Q){if(Z.openElements.hasInButtonScope(J.P))Z._closePElement();Z._insertElement(Q,P.HTML),Z.tokenizer.state=o.PLAINTEXT}function Y5(Z,Q){if(Z.openElements.hasInScope(J.BUTTON))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(J.BUTTON);Z._reconstructActiveFormattingElements(),Z._insertElement(Q,P.HTML),Z.framesetOk=!1}function W5(Z,Q){let X=Z.activeFormattingElements.getElementEntryInScopeWithTagName(U.A);if(X)X6(Z,Q),Z.openElements.remove(X.element),Z.activeFormattingElements.removeEntry(X);Z._reconstructActiveFormattingElements(),Z._insertElement(Q,P.HTML),Z.activeFormattingElements.pushElement(Z.openElements.current,Q)}function V5(Z,Q){Z._reconstructActiveFormattingElements(),Z._insertElement(Q,P.HTML),Z.activeFormattingElements.pushElement(Z.openElements.current,Q)}function H5(Z,Q){if(Z._reconstructActiveFormattingElements(),Z.openElements.hasInScope(J.NOBR))X6(Z,Q),Z._reconstructActiveFormattingElements();Z._insertElement(Q,P.HTML),Z.activeFormattingElements.pushElement(Z.openElements.current,Q)}function j5(Z,Q){Z._reconstructActiveFormattingElements(),Z._insertElement(Q,P.HTML),Z.activeFormattingElements.insertMarker(),Z.framesetOk=!1}function z5(Z,Q){if(Z.treeAdapter.getDocumentMode(Z.document)!==e.QUIRKS&&Z.openElements.hasInButtonScope(J.P))Z._closePElement();Z._insertElement(Q,P.HTML),Z.framesetOk=!1,Z.insertionMode=j.IN_TABLE}function T8(Z,Q){Z._reconstructActiveFormattingElements(),Z._appendElement(Q,P.HTML),Z.framesetOk=!1,Q.ackSelfClosing=!0}function A8(Z){let Q=A1(Z,L0.TYPE);return Q!=null&&Q.toLowerCase()===NZ}function q5(Z,Q){if(Z._reconstructActiveFormattingElements(),Z._appendElement(Q,P.HTML),!A8(Q))Z.framesetOk=!1;Q.ackSelfClosing=!0}function U5(Z,Q){Z._appendElement(Q,P.HTML),Q.ackSelfClosing=!0}function B5(Z,Q){if(Z.openElements.hasInButtonScope(J.P))Z._closePElement();Z._appendElement(Q,P.HTML),Z.framesetOk=!1,Q.ackSelfClosing=!0}function F5(Z,Q){Q.tagName=U.IMG,Q.tagID=J.IMG,T8(Z,Q)}function w5(Z,Q){Z._insertElement(Q,P.HTML),Z.skipNextNewLine=!0,Z.tokenizer.state=o.RCDATA,Z.originalInsertionMode=Z.insertionMode,Z.framesetOk=!1,Z.insertionMode=j.TEXT}function L5(Z,Q){if(Z.openElements.hasInButtonScope(J.P))Z._closePElement();Z._reconstructActiveFormattingElements(),Z.framesetOk=!1,Z._switchToTextParsing(Q,o.RAWTEXT)}function P5(Z,Q){Z.framesetOk=!1,Z._switchToTextParsing(Q,o.RAWTEXT)}function k8(Z,Q){Z._switchToTextParsing(Q,o.RAWTEXT)}function x5(Z,Q){Z._reconstructActiveFormattingElements(),Z._insertElement(Q,P.HTML),Z.framesetOk=!1,Z.insertionMode=Z.insertionMode===j.IN_TABLE||Z.insertionMode===j.IN_CAPTION||Z.insertionMode===j.IN_TABLE_BODY||Z.insertionMode===j.IN_ROW||Z.insertionMode===j.IN_CELL?j.IN_SELECT_IN_TABLE:j.IN_SELECT}function b5(Z,Q){if(Z.openElements.currentTagId===J.OPTION)Z.openElements.pop();Z._reconstructActiveFormattingElements(),Z._insertElement(Q,P.HTML)}function O5(Z,Q){if(Z.openElements.hasInScope(J.RUBY))Z.openElements.generateImpliedEndTags();Z._insertElement(Q,P.HTML)}function C5(Z,Q){if(Z.openElements.hasInScope(J.RUBY))Z.openElements.generateImpliedEndTagsWithExclusion(J.RTC);Z._insertElement(Q,P.HTML)}function v5(Z,Q){if(Z._reconstructActiveFormattingElements(),n4(Q),a1(Q),Q.selfClosing)Z._appendElement(Q,P.MATHML);else Z._insertElement(Q,P.MATHML);Q.ackSelfClosing=!0}function R5(Z,Q){if(Z._reconstructActiveFormattingElements(),t4(Q),a1(Q),Q.selfClosing)Z._appendElement(Q,P.SVG);else Z._insertElement(Q,P.SVG);Q.ackSelfClosing=!0}function _8(Z,Q){Z._reconstructActiveFormattingElements(),Z._insertElement(Q,P.HTML)}function n(Z,Q){switch(Q.tagID){case J.I:case J.S:case J.B:case J.U:case J.EM:case J.TT:case J.BIG:case J.CODE:case J.FONT:case J.SMALL:case J.STRIKE:case J.STRONG:{V5(Z,Q);break}case J.A:{W5(Z,Q);break}case J.H1:case J.H2:case J.H3:case J.H4:case J.H5:case J.H6:{Z5(Z,Q);break}case J.P:case J.DL:case J.OL:case J.UL:case J.DIV:case J.DIR:case J.NAV:case J.MAIN:case J.MENU:case J.ASIDE:case J.CENTER:case J.FIGURE:case J.FOOTER:case J.HEADER:case J.HGROUP:case J.DIALOG:case J.DETAILS:case J.ADDRESS:case J.ARTICLE:case J.SEARCH:case J.SECTION:case J.SUMMARY:case J.FIELDSET:case J.BLOCKQUOTE:case J.FIGCAPTION:{eZ(Z,Q);break}case J.LI:case J.DD:case J.DT:{J5(Z,Q);break}case J.BR:case J.IMG:case J.WBR:case J.AREA:case J.EMBED:case J.KEYGEN:{T8(Z,Q);break}case J.HR:{B5(Z,Q);break}case J.RB:case J.RTC:{O5(Z,Q);break}case J.RT:case J.RP:{C5(Z,Q);break}case J.PRE:case J.LISTING:{Q5(Z,Q);break}case J.XMP:{L5(Z,Q);break}case J.SVG:{R5(Z,Q);break}case J.HTML:{oZ(Z,Q);break}case J.BASE:case J.LINK:case J.META:case J.STYLE:case J.TITLE:case J.SCRIPT:case J.BGSOUND:case J.BASEFONT:case J.TEMPLATE:{z0(Z,Q);break}case J.BODY:{nZ(Z,Q);break}case J.FORM:{X5(Z,Q);break}case J.NOBR:{H5(Z,Q);break}case J.MATH:{v5(Z,Q);break}case J.TABLE:{z5(Z,Q);break}case J.INPUT:{q5(Z,Q);break}case J.PARAM:case J.TRACK:case J.SOURCE:{U5(Z,Q);break}case J.IMAGE:{F5(Z,Q);break}case J.BUTTON:{Y5(Z,Q);break}case J.APPLET:case J.OBJECT:case J.MARQUEE:{j5(Z,Q);break}case J.IFRAME:{P5(Z,Q);break}case J.SELECT:{x5(Z,Q);break}case J.OPTION:case J.OPTGROUP:{b5(Z,Q);break}case J.NOEMBED:case J.NOFRAMES:{k8(Z,Q);break}case J.FRAMESET:{tZ(Z,Q);break}case J.TEXTAREA:{w5(Z,Q);break}case J.NOSCRIPT:{if(Z.options.scriptingEnabled)k8(Z,Q);else _8(Z,Q);break}case J.PLAINTEXT:{K5(Z,Q);break}case J.COL:case J.TH:case J.TD:case J.TR:case J.HEAD:case J.FRAME:case J.TBODY:case J.TFOOT:case J.THEAD:case J.CAPTION:case J.COLGROUP:break;default:_8(Z,Q)}}function y5(Z,Q){if(Z.openElements.hasInScope(J.BODY)){if(Z.insertionMode=j.AFTER_BODY,Z.options.sourceCodeLocationInfo){let X=Z.openElements.tryPeekProperlyNestedBodyElement();if(X)Z._setEndLocation(X,Q)}}}function f5(Z,Q){if(Z.openElements.hasInScope(J.BODY))Z.insertionMode=j.AFTER_BODY,n8(Z,Q)}function h5(Z,Q){let X=Q.tagID;if(Z.openElements.hasInScope(X))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(X)}function M5(Z){let Q=Z.openElements.tmplCount>0,{formElement:X}=Z;if(!Q)Z.formElement=null;if((X||Q)&&Z.openElements.hasInScope(J.FORM)){if(Z.openElements.generateImpliedEndTags(),Q)Z.openElements.popUntilTagNamePopped(J.FORM);else if(X)Z.openElements.remove(X)}}function N5(Z){if(!Z.openElements.hasInButtonScope(J.P))Z._insertFakeElement(U.P,J.P);Z._closePElement()}function D5(Z){if(Z.openElements.hasInListItemScope(J.LI))Z.openElements.generateImpliedEndTagsWithExclusion(J.LI),Z.openElements.popUntilTagNamePopped(J.LI)}function $5(Z,Q){let X=Q.tagID;if(Z.openElements.hasInScope(X))Z.openElements.generateImpliedEndTagsWithExclusion(X),Z.openElements.popUntilTagNamePopped(X)}function G5(Z){if(Z.openElements.hasNumberedHeaderInScope())Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilNumberedHeaderPopped()}function g5(Z,Q){let X=Q.tagID;if(Z.openElements.hasInScope(X))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(X),Z.activeFormattingElements.clearToLastMarker()}function E5(Z){Z._reconstructActiveFormattingElements(),Z._insertFakeElement(U.BR,J.BR),Z.openElements.pop(),Z.framesetOk=!1}function l8(Z,Q){let{tagName:X,tagID:K}=Q;for(let Y=Z.openElements.stackTop;Y>0;Y--){let W=Z.openElements.items[Y],z=Z.openElements.tagIDs[Y];if(K===z&&(K!==J.UNKNOWN||Z.treeAdapter.getTagName(W)===X)){if(Z.openElements.generateImpliedEndTagsWithExclusion(K),Z.openElements.stackTop>=Y)Z.openElements.shortenToLength(Y);break}if(Z._isSpecialElement(W,z))break}}function n1(Z,Q){switch(Q.tagID){case J.A:case J.B:case J.I:case J.S:case J.U:case J.EM:case J.TT:case J.BIG:case J.CODE:case J.FONT:case J.NOBR:case J.SMALL:case J.STRIKE:case J.STRONG:{X6(Z,Q);break}case J.P:{N5(Z);break}case J.DL:case J.UL:case J.OL:case J.DIR:case J.DIV:case J.NAV:case J.PRE:case J.MAIN:case J.MENU:case J.ASIDE:case J.BUTTON:case J.CENTER:case J.FIGURE:case J.FOOTER:case J.HEADER:case J.HGROUP:case J.DIALOG:case J.ADDRESS:case J.ARTICLE:case J.DETAILS:case J.SEARCH:case J.SECTION:case J.SUMMARY:case J.LISTING:case J.FIELDSET:case J.BLOCKQUOTE:case J.FIGCAPTION:{h5(Z,Q);break}case J.LI:{D5(Z);break}case J.DD:case J.DT:{$5(Z,Q);break}case J.H1:case J.H2:case J.H3:case J.H4:case J.H5:case J.H6:{G5(Z);break}case J.BR:{E5(Z);break}case J.BODY:{y5(Z,Q);break}case J.HTML:{f5(Z,Q);break}case J.FORM:{M5(Z);break}case J.APPLET:case J.OBJECT:case J.MARQUEE:{g5(Z,Q);break}case J.TEMPLATE:{m0(Z,Q);break}default:l8(Z,Q)}}function c8(Z,Q){if(Z.tmplInsertionModeStack.length>0)o8(Z,Q);else J6(Z,Q)}function m5(Z,Q){var X;if(Q.tagID===J.SCRIPT)(X=Z.scriptHandler)===null||X===void 0||X.call(Z,Z.openElements.current);Z.openElements.pop(),Z.insertionMode=Z.originalInsertionMode}function k5(Z,Q){Z._err(Q,F.eofInElementThatCanContainOnlyText),Z.openElements.pop(),Z.insertionMode=Z.originalInsertionMode,Z.onEof(Q)}function e4(Z,Q){if(Z.openElements.currentTagId!==void 0&&S8.has(Z.openElements.currentTagId))switch(Z.pendingCharacterTokens.length=0,Z.hasNonWhitespacePendingCharacterToken=!1,Z.originalInsertionMode=Z.insertionMode,Z.insertionMode=j.IN_TABLE_TEXT,Q.type){case k.CHARACTER:{a8(Z,Q);break}case k.WHITESPACE_CHARACTER:{d8(Z,Q);break}}else j1(Z,Q)}function _5(Z,Q){Z.openElements.clearBackToTableContext(),Z.activeFormattingElements.insertMarker(),Z._insertElement(Q,P.HTML),Z.insertionMode=j.IN_CAPTION}function S5(Z,Q){Z.openElements.clearBackToTableContext(),Z._insertElement(Q,P.HTML),Z.insertionMode=j.IN_COLUMN_GROUP}function I5(Z,Q){Z.openElements.clearBackToTableContext(),Z._insertFakeElement(U.COLGROUP,J.COLGROUP),Z.insertionMode=j.IN_COLUMN_GROUP,K6(Z,Q)}function u5(Z,Q){Z.openElements.clearBackToTableContext(),Z._insertElement(Q,P.HTML),Z.insertionMode=j.IN_TABLE_BODY}function T5(Z,Q){Z.openElements.clearBackToTableContext(),Z._insertFakeElement(U.TBODY,J.TBODY),Z.insertionMode=j.IN_TABLE_BODY,t1(Z,Q)}function A5(Z,Q){if(Z.openElements.hasInTableScope(J.TABLE))Z.openElements.popUntilTagNamePopped(J.TABLE),Z._resetInsertionMode(),Z._processStartTag(Q)}function l5(Z,Q){if(A8(Q))Z._appendElement(Q,P.HTML);else j1(Z,Q);Q.ackSelfClosing=!0}function c5(Z,Q){if(!Z.formElement&&Z.openElements.tmplCount===0)Z._insertElement(Q,P.HTML),Z.formElement=Z.openElements.current,Z.openElements.pop()}function A0(Z,Q){switch(Q.tagID){case J.TD:case J.TH:case J.TR:{T5(Z,Q);break}case J.STYLE:case J.SCRIPT:case J.TEMPLATE:{z0(Z,Q);break}case J.COL:{I5(Z,Q);break}case J.FORM:{c5(Z,Q);break}case J.TABLE:{A5(Z,Q);break}case J.TBODY:case J.TFOOT:case J.THEAD:{u5(Z,Q);break}case J.INPUT:{l5(Z,Q);break}case J.CAPTION:{_5(Z,Q);break}case J.COLGROUP:{S5(Z,Q);break}default:j1(Z,Q)}}function H1(Z,Q){switch(Q.tagID){case J.TABLE:{if(Z.openElements.hasInTableScope(J.TABLE))Z.openElements.popUntilTagNamePopped(J.TABLE),Z._resetInsertionMode();break}case J.TEMPLATE:{m0(Z,Q);break}case J.BODY:case J.CAPTION:case J.COL:case J.COLGROUP:case J.HTML:case J.TBODY:case J.TD:case J.TFOOT:case J.TH:case J.THEAD:case J.TR:break;default:j1(Z,Q)}}function j1(Z,Q){let X=Z.fosterParentingEnabled;Z.fosterParentingEnabled=!0,o1(Z,Q),Z.fosterParentingEnabled=X}function d8(Z,Q){Z.pendingCharacterTokens.push(Q)}function a8(Z,Q){Z.pendingCharacterTokens.push(Q),Z.hasNonWhitespacePendingCharacterToken=!0}function X1(Z,Q){let X=0;if(Z.hasNonWhitespacePendingCharacterToken)for(;X<Z.pendingCharacterTokens.length;X++)j1(Z,Z.pendingCharacterTokens[X]);else for(;X<Z.pendingCharacterTokens.length;X++)Z._insertCharacters(Z.pendingCharacterTokens[X]);Z.insertionMode=Z.originalInsertionMode,Z._processToken(Q)}var i8=new Set([J.CAPTION,J.COL,J.COLGROUP,J.TBODY,J.TD,J.TFOOT,J.TH,J.THEAD,J.TR]);function d5(Z,Q){let X=Q.tagID;if(i8.has(X)){if(Z.openElements.hasInTableScope(J.CAPTION))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(J.CAPTION),Z.activeFormattingElements.clearToLastMarker(),Z.insertionMode=j.IN_TABLE,A0(Z,Q)}else n(Z,Q)}function a5(Z,Q){let X=Q.tagID;switch(X){case J.CAPTION:case J.TABLE:{if(Z.openElements.hasInTableScope(J.CAPTION)){if(Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(J.CAPTION),Z.activeFormattingElements.clearToLastMarker(),Z.insertionMode=j.IN_TABLE,X===J.TABLE)H1(Z,Q)}break}case J.BODY:case J.COL:case J.COLGROUP:case J.HTML:case J.TBODY:case J.TD:case J.TFOOT:case J.TH:case J.THEAD:case J.TR:break;default:n1(Z,Q)}}function K6(Z,Q){switch(Q.tagID){case J.HTML:{n(Z,Q);break}case J.COL:{Z._appendElement(Q,P.HTML),Q.ackSelfClosing=!0;break}case J.TEMPLATE:{z0(Z,Q);break}default:p1(Z,Q)}}function i5(Z,Q){switch(Q.tagID){case J.COLGROUP:{if(Z.openElements.currentTagId===J.COLGROUP)Z.openElements.pop(),Z.insertionMode=j.IN_TABLE;break}case J.TEMPLATE:{m0(Z,Q);break}case J.COL:break;default:p1(Z,Q)}}function p1(Z,Q){if(Z.openElements.currentTagId===J.COLGROUP)Z.openElements.pop(),Z.insertionMode=j.IN_TABLE,Z._processToken(Q)}function t1(Z,Q){switch(Q.tagID){case J.TR:{Z.openElements.clearBackToTableBodyContext(),Z._insertElement(Q,P.HTML),Z.insertionMode=j.IN_ROW;break}case J.TH:case J.TD:{Z.openElements.clearBackToTableBodyContext(),Z._insertFakeElement(U.TR,J.TR),Z.insertionMode=j.IN_ROW,e1(Z,Q);break}case J.CAPTION:case J.COL:case J.COLGROUP:case J.TBODY:case J.TFOOT:case J.THEAD:{if(Z.openElements.hasTableBodyContextInTableScope())Z.openElements.clearBackToTableBodyContext(),Z.openElements.pop(),Z.insertionMode=j.IN_TABLE,A0(Z,Q);break}default:A0(Z,Q)}}function Q6(Z,Q){let X=Q.tagID;switch(Q.tagID){case J.TBODY:case J.TFOOT:case J.THEAD:{if(Z.openElements.hasInTableScope(X))Z.openElements.clearBackToTableBodyContext(),Z.openElements.pop(),Z.insertionMode=j.IN_TABLE;break}case J.TABLE:{if(Z.openElements.hasTableBodyContextInTableScope())Z.openElements.clearBackToTableBodyContext(),Z.openElements.pop(),Z.insertionMode=j.IN_TABLE,H1(Z,Q);break}case J.BODY:case J.CAPTION:case J.COL:case J.COLGROUP:case J.HTML:case J.TD:case J.TH:case J.TR:break;default:H1(Z,Q)}}function e1(Z,Q){switch(Q.tagID){case J.TH:case J.TD:{Z.openElements.clearBackToTableRowContext(),Z._insertElement(Q,P.HTML),Z.insertionMode=j.IN_CELL,Z.activeFormattingElements.insertMarker();break}case J.CAPTION:case J.COL:case J.COLGROUP:case J.TBODY:case J.TFOOT:case J.THEAD:case J.TR:{if(Z.openElements.hasInTableScope(J.TR))Z.openElements.clearBackToTableRowContext(),Z.openElements.pop(),Z.insertionMode=j.IN_TABLE_BODY,t1(Z,Q);break}default:A0(Z,Q)}}function p8(Z,Q){switch(Q.tagID){case J.TR:{if(Z.openElements.hasInTableScope(J.TR))Z.openElements.clearBackToTableRowContext(),Z.openElements.pop(),Z.insertionMode=j.IN_TABLE_BODY;break}case J.TABLE:{if(Z.openElements.hasInTableScope(J.TR))Z.openElements.clearBackToTableRowContext(),Z.openElements.pop(),Z.insertionMode=j.IN_TABLE_BODY,Q6(Z,Q);break}case J.TBODY:case J.TFOOT:case J.THEAD:{if(Z.openElements.hasInTableScope(Q.tagID)||Z.openElements.hasInTableScope(J.TR))Z.openElements.clearBackToTableRowContext(),Z.openElements.pop(),Z.insertionMode=j.IN_TABLE_BODY,Q6(Z,Q);break}case J.BODY:case J.CAPTION:case J.COL:case J.COLGROUP:case J.HTML:case J.TD:case J.TH:break;default:H1(Z,Q)}}function p5(Z,Q){let X=Q.tagID;if(i8.has(X)){if(Z.openElements.hasInTableScope(J.TD)||Z.openElements.hasInTableScope(J.TH))Z._closeTableCell(),e1(Z,Q)}else n(Z,Q)}function s5(Z,Q){let X=Q.tagID;switch(X){case J.TD:case J.TH:{if(Z.openElements.hasInTableScope(X))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(X),Z.activeFormattingElements.clearToLastMarker(),Z.insertionMode=j.IN_ROW;break}case J.TABLE:case J.TBODY:case J.TFOOT:case J.THEAD:case J.TR:{if(Z.openElements.hasInTableScope(X))Z._closeTableCell(),p8(Z,Q);break}case J.BODY:case J.CAPTION:case J.COL:case J.COLGROUP:case J.HTML:break;default:n1(Z,Q)}}function s8(Z,Q){switch(Q.tagID){case J.HTML:{n(Z,Q);break}case J.OPTION:{if(Z.openElements.currentTagId===J.OPTION)Z.openElements.pop();Z._insertElement(Q,P.HTML);break}case J.OPTGROUP:{if(Z.openElements.currentTagId===J.OPTION)Z.openElements.pop();if(Z.openElements.currentTagId===J.OPTGROUP)Z.openElements.pop();Z._insertElement(Q,P.HTML);break}case J.HR:{if(Z.openElements.currentTagId===J.OPTION)Z.openElements.pop();if(Z.openElements.currentTagId===J.OPTGROUP)Z.openElements.pop();Z._appendElement(Q,P.HTML),Q.ackSelfClosing=!0;break}case J.INPUT:case J.KEYGEN:case J.TEXTAREA:case J.SELECT:{if(Z.openElements.hasInSelectScope(J.SELECT)){if(Z.openElements.popUntilTagNamePopped(J.SELECT),Z._resetInsertionMode(),Q.tagID!==J.SELECT)Z._processStartTag(Q)}break}case J.SCRIPT:case J.TEMPLATE:{z0(Z,Q);break}default:}}function r8(Z,Q){switch(Q.tagID){case J.OPTGROUP:{if(Z.openElements.stackTop>0&&Z.openElements.currentTagId===J.OPTION&&Z.openElements.tagIDs[Z.openElements.stackTop-1]===J.OPTGROUP)Z.openElements.pop();if(Z.openElements.currentTagId===J.OPTGROUP)Z.openElements.pop();break}case J.OPTION:{if(Z.openElements.currentTagId===J.OPTION)Z.openElements.pop();break}case J.SELECT:{if(Z.openElements.hasInSelectScope(J.SELECT))Z.openElements.popUntilTagNamePopped(J.SELECT),Z._resetInsertionMode();break}case J.TEMPLATE:{m0(Z,Q);break}default:}}function r5(Z,Q){let X=Q.tagID;if(X===J.CAPTION||X===J.TABLE||X===J.TBODY||X===J.TFOOT||X===J.THEAD||X===J.TR||X===J.TD||X===J.TH)Z.openElements.popUntilTagNamePopped(J.SELECT),Z._resetInsertionMode(),Z._processStartTag(Q);else s8(Z,Q)}function o5(Z,Q){let X=Q.tagID;if(X===J.CAPTION||X===J.TABLE||X===J.TBODY||X===J.TFOOT||X===J.THEAD||X===J.TR||X===J.TD||X===J.TH){if(Z.openElements.hasInTableScope(X))Z.openElements.popUntilTagNamePopped(J.SELECT),Z._resetInsertionMode(),Z.onEndTag(Q)}else r8(Z,Q)}function n5(Z,Q){switch(Q.tagID){case J.BASE:case J.BASEFONT:case J.BGSOUND:case J.LINK:case J.META:case J.NOFRAMES:case J.SCRIPT:case J.STYLE:case J.TEMPLATE:case J.TITLE:{z0(Z,Q);break}case J.CAPTION:case J.COLGROUP:case J.TBODY:case J.TFOOT:case J.THEAD:{Z.tmplInsertionModeStack[0]=j.IN_TABLE,Z.insertionMode=j.IN_TABLE,A0(Z,Q);break}case J.COL:{Z.tmplInsertionModeStack[0]=j.IN_COLUMN_GROUP,Z.insertionMode=j.IN_COLUMN_GROUP,K6(Z,Q);break}case J.TR:{Z.tmplInsertionModeStack[0]=j.IN_TABLE_BODY,Z.insertionMode=j.IN_TABLE_BODY,t1(Z,Q);break}case J.TD:case J.TH:{Z.tmplInsertionModeStack[0]=j.IN_ROW,Z.insertionMode=j.IN_ROW,e1(Z,Q);break}default:Z.tmplInsertionModeStack[0]=j.IN_BODY,Z.insertionMode=j.IN_BODY,n(Z,Q)}}function t5(Z,Q){if(Q.tagID===J.TEMPLATE)m0(Z,Q)}function o8(Z,Q){if(Z.openElements.tmplCount>0)Z.openElements.popUntilTagNamePopped(J.TEMPLATE),Z.activeFormattingElements.clearToLastMarker(),Z.tmplInsertionModeStack.shift(),Z._resetInsertionMode(),Z.onEof(Q);else J6(Z,Q)}function e5(Z,Q){if(Q.tagID===J.HTML)n(Z,Q);else s1(Z,Q)}function n8(Z,Q){var X;if(Q.tagID===J.HTML){if(!Z.fragmentContext)Z.insertionMode=j.AFTER_AFTER_BODY;if(Z.options.sourceCodeLocationInfo&&Z.openElements.tagIDs[0]===J.HTML){Z._setEndLocation(Z.openElements.items[0],Q);let K=Z.openElements.items[1];if(K&&!((X=Z.treeAdapter.getNodeSourceCodeLocation(K))===null||X===void 0?void 0:X.endTag))Z._setEndLocation(K,Q)}}else s1(Z,Q)}function s1(Z,Q){Z.insertionMode=j.IN_BODY,o1(Z,Q)}function ZQ(Z,Q){switch(Q.tagID){case J.HTML:{n(Z,Q);break}case J.FRAMESET:{Z._insertElement(Q,P.HTML);break}case J.FRAME:{Z._appendElement(Q,P.HTML),Q.ackSelfClosing=!0;break}case J.NOFRAMES:{z0(Z,Q);break}default:}}function QQ(Z,Q){if(Q.tagID===J.FRAMESET&&!Z.openElements.isRootHtmlElementCurrent()){if(Z.openElements.pop(),!Z.fragmentContext&&Z.openElements.currentTagId!==J.FRAMESET)Z.insertionMode=j.AFTER_FRAMESET}}function XQ(Z,Q){switch(Q.tagID){case J.HTML:{n(Z,Q);break}case J.NOFRAMES:{z0(Z,Q);break}default:}}function JQ(Z,Q){if(Q.tagID===J.HTML)Z.insertionMode=j.AFTER_AFTER_FRAMESET}function KQ(Z,Q){if(Q.tagID===J.HTML)n(Z,Q);else i1(Z,Q)}function i1(Z,Q){Z.insertionMode=j.IN_BODY,o1(Z,Q)}function YQ(Z,Q){switch(Q.tagID){case J.HTML:{n(Z,Q);break}case J.NOFRAMES:{z0(Z,Q);break}default:}}function WQ(Z,Q){Q.chars=T,Z._insertCharacters(Q)}function VQ(Z,Q){Z._insertCharacters(Q),Z.framesetOk=!1}function t8(Z){while(Z.treeAdapter.getNamespaceURI(Z.openElements.current)!==P.HTML&&Z.openElements.currentTagId!==void 0&&!Z._isIntegrationPoint(Z.openElements.currentTagId,Z.openElements.current))Z.openElements.pop()}function HQ(Z,Q){if($8(Q))t8(Z),Z._startTagOutsideForeignContent(Q);else{let X=Z._getAdjustedCurrentElement(),K=Z.treeAdapter.getNamespaceURI(X);if(K===P.MATHML)n4(Q);else if(K===P.SVG)G8(Q),t4(Q);if(a1(Q),Q.selfClosing)Z._appendElement(Q,K);else Z._insertElement(Q,K);Q.ackSelfClosing=!0}}function jQ(Z,Q){if(Q.tagID===J.P||Q.tagID===J.BR){t8(Z),Z._endTagOutsideForeignContent(Q);return}for(let X=Z.openElements.stackTop;X>0;X--){let K=Z.openElements.items[X];if(Z.treeAdapter.getNamespaceURI(K)===P.HTML){Z._endTagOutsideForeignContent(Q);break}let Y=Z.treeAdapter.getTagName(K);if(Y.toLowerCase()===Q.tagName){Q.tagName=Y,Z.openElements.shortenToLength(X);break}}}var AY=typeof String.prototype.codePointAt==="function"?(Z,Q)=>Z.codePointAt(Q):(Z,Q)=>(Z.charCodeAt(Q)&64512)===55296?(Z.charCodeAt(Q)-55296)*1024+Z.charCodeAt(Q+1)-56320+65536:Z.charCodeAt(Q);function e8(Z,Q){return function(K){let Y,W=0,z="";while(Y=Z.exec(K)){if(W!==Y.index)z+=K.substring(W,Y.index);z+=Q.get(Y[0].charCodeAt(0)),W=Y.index+1}return z+K.substring(W)}}var Z3=e8(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]])),Q3=e8(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]]));var zQ=new Set([U.AREA,U.BASE,U.BASEFONT,U.BGSOUND,U.BR,U.COL,U.EMBED,U.FRAME,U.HR,U.IMG,U.INPUT,U.KEYGEN,U.LINK,U.META,U.PARAM,U.SOURCE,U.TRACK,U.WBR]);function X3(Z,Q){return Q.treeAdapter.isElementNode(Z)&&Q.treeAdapter.getNamespaceURI(Z)===P.HTML&&zQ.has(Q.treeAdapter.getTagName(Z))}var qQ={treeAdapter:Y0,scriptingEnabled:!0};function l0(Z,Q){let X={...qQ,...Q};if(X3(Z,X))return"";return J3(Z,X)}function J3(Z,Q){let X="",K=Q.treeAdapter.isElementNode(Z)&&Q.treeAdapter.getTagName(Z)===U.TEMPLATE&&Q.treeAdapter.getNamespaceURI(Z)===P.HTML?Q.treeAdapter.getTemplateContent(Z):Z,Y=Q.treeAdapter.getChildNodes(K);if(Y)for(let W of Y)X+=UQ(W,Q);return X}function UQ(Z,Q){if(Q.treeAdapter.isElementNode(Z))return BQ(Z,Q);if(Q.treeAdapter.isTextNode(Z))return wQ(Z,Q);if(Q.treeAdapter.isCommentNode(Z))return LQ(Z,Q);if(Q.treeAdapter.isDocumentTypeNode(Z))return PQ(Z,Q);return""}function BQ(Z,Q){let X=Q.treeAdapter.getTagName(Z);return`<${X}${FQ(Z,Q)}>${X3(Z,Q)?"":`${J3(Z,Q)}</${X}>`}`}function FQ(Z,{treeAdapter:Q}){let X="";for(let K of Q.getAttrList(Z)){if(X+=" ",K.namespace)switch(K.namespace){case P.XML:{X+=`xml:${K.name}`;break}case P.XMLNS:{if(K.name!=="xmlns")X+="xmlns:";X+=K.name;break}case P.XLINK:{X+=`xlink:${K.name}`;break}default:X+=`${K.prefix}:${K.name}`}else X+=K.name;X+=`="${Z3(K.value)}"`}return X}function wQ(Z,Q){let{treeAdapter:X}=Q,K=X.getTextNodeContent(Z),Y=X.getParentNode(Z),W=Y&&X.isElementNode(Y)&&X.getTagName(Y);return W&&X.getNamespaceURI(Y)===P.HTML&&F8(W,Q.scriptingEnabled)?K:Q3(K)}function LQ(Z,{treeAdapter:Q}){return`<!--${Q.getCommentNodeContent(Z)}-->`}function PQ(Z,{treeAdapter:Q}){return`<!DOCTYPE ${Q.getDocumentTypeNodeName(Z)}>`}function z1(Z,Q){return r1.parse(Z,Q)}import{z as R}from"zod";import*as c0 from"css-tree";var q1=20971520,xQ=new Set(["script","form","iframe","frame","frameset","object","embed","portal","base","audio","video","source","track","noscript","animate","animatemotion","animatetransform","discard","set"]),bQ=new Set(["action","cite","data","formaction","href","ping","poster","src","srcset","xlink:href"]),Y6=/^data:(?:image\/(?:png|jpe?g|gif|webp|avif|bmp|x-icon)|font\/[a-z0-9.+-]+|application\/(?:font-[a-z0-9.+-]+|vnd\.ms-fontobject|x-font-[a-z0-9.+-]+));/i,OQ=new Set(["date","datetime-local","email","month","number","password","search","tel","text","time","url","week"]);function CQ(Z){return"tagName"in Z}function K3(Z,Q){return Z.attrs.find((X)=>X.name.toLowerCase()===Q.toLowerCase())?.value??null}function y0(Z,Q,X){let K=Z.attrs.find((Y)=>Y.name.toLowerCase()===Q.toLowerCase());if(K)K.value=X;else Z.attrs.push({name:Q,value:X})}function Y3(Z){try{let Q=c0.parse(Z,{context:"stylesheet",parseCustomProperty:!0,positions:!1});return c0.walk(Q,{enter(X,K,Y){if(X.type==="Atrule"&&X.name.toLowerCase()==="import"){Y.remove(K);return}if(X.type==="Declaration"){let W=X.property.toLowerCase();if(W==="behavior"||W==="-moz-binding")Y.remove(K);return}if(X.type==="Url"&&!Y6.test(X.value)){X.value="data:,";return}if(X.type==="String"&&this.function&&["image-set","-webkit-image-set","src"].includes(this.function.name.toLowerCase())&&!Y6.test(X.value))X.value="data:,"}}),c0.generate(Q)}catch{return""}}function vQ(Z){return Y3(`x{${Z}}`).replace(/^x\{/,"").replace(/\}$/,"")}function RQ(Z){Z.attrs=Z.attrs.flatMap((X)=>{let K=X.name.toLowerCase();if(K.startsWith("on")||K==="srcdoc"||K==="nonce")return[];if(K==="style"){let Y=vQ(X.value);return Y?[{...X,value:Y}]:[]}if(bQ.has(K)){if(K==="src"&&Y6.test(X.value))return[X];if(K==="href"&&X.value.startsWith("#"))return[X];return[]}if(K==="target"||K==="download"||K==="http-equiv")return[];return[X]});let Q=Z.tagName.toLowerCase();if(Q==="textarea"||Q==="input"&&OQ.has((K3(Z,"type")??"text").toLowerCase()))y0(Z,"readonly",""),y0(Z,"aria-readonly","true"),y0(Z,"tabindex","-1");else if(Q==="button"||Q==="select"||Q==="input")y0(Z,"disabled",""),y0(Z,"aria-disabled","true"),y0(Z,"tabindex","-1");if(K3(Z,"contenteditable")!==null)y0(Z,"contenteditable","false"),y0(Z,"tabindex","-1");if(Z.tagName==="style"&&Z.childNodes){for(let X of Z.childNodes)if("value"in X&&typeof X.value==="string")X.value=Y3(X.value)}}function W3(Z){let Q=[];for(let X of Z.childNodes){if(CQ(X)){let K=X.tagName.toLowerCase();if(xQ.has(K))continue;if(K==="meta"&&X.attrs.some((Y)=>Y.name.toLowerCase()==="http-equiv"&&Y.value.toLowerCase()!=="content-type"))continue;if(K==="link")continue;RQ(X),W3(X)}Q.push(X)}Z.childNodes=Q}function V3(Z){if(Buffer.byteLength(Z,"utf8")>q1)throw Error("Browser snapshot exceeds the 20 MiB limit");let Q=z1(Z);W3(Q);let X=l0(Q);if(Buffer.byteLength(X,"utf8")>q1)throw Error("Sanitized browser snapshot exceeds the 20 MiB limit");return X}import*as d0 from"css-tree";function yQ(Z,Q){if(!Z||Z.startsWith("#"))return Z;try{let X=new URL(Z,Q);if(X.protocol!=="http:"&&X.protocol!=="https:")return null;if(X.username||X.password)return null;return X.href}catch{return null}}function H3(Z){try{let Q=d0.parse(Z.css,{context:"stylesheet",parseCustomProperty:!0,positions:!1});return d0.walk(Q,{enter(X,K,Y){if(X.type==="Atrule"&&X.name.toLowerCase()==="import"){if(K&&Y)Y.remove(K);return}if(X.type==="Declaration"){let z=X.property.toLowerCase();if(z==="behavior"||z==="-moz-binding"){if(K&&Y)Y.remove(K)}return}if(X.type!=="Url")return;let W=yQ(X.value,Z.baseUrl);if(W&&!W.startsWith("#"))X.value=Z.resourceUrl(W);else if(!W)X.value="data:,"}}),d0.generate(Q)}catch{return""}}var hQ=1200000,MQ=200,j3=8,NQ=65536,z3="ideawave-frame",DQ=R.object({browserNodeId:R.string().uuid(),url:R.string().max(4000)}).strict(),$Q=R.object({proxySessionId:R.string().uuid()}).strict(),GQ=R.object({proxySessionId:R.string().uuid(),revision:R.string().min(1).max(200),html:R.string().max(q1).optional()}).strict(),gQ=R.object({exact:R.string().min(1).max(2000),prefix:R.string().max(500).optional(),suffix:R.string().max(500).optional()}).strict(),W6=R.union([R.object({ref:R.string().min(1).max(200)}).strict(),R.object({selector:R.string().min(1).max(2000).nullable(),textQuote:gQ.nullable().optional(),framePath:R.array(R.string().max(1000)).max(12).optional()}).strict().refine((Z)=>Boolean(Z.selector||Z.textQuote),{message:"A selector or text quote is required"})]),EQ=R.discriminatedUnion("type",[R.object({type:R.literal("inspect")}).strict(),R.object({type:R.literal("locate"),target:W6}).strict(),R.object({type:R.literal("click"),target:W6}).strict(),R.object({type:R.literal("scroll"),deltaY:R.number().finite().min(-1e5).max(1e5).optional(),left:R.number().finite().min(0).max(1e7).optional(),top:R.number().finite().min(0).max(1e7).optional()}).strict(),R.object({type:R.literal("find"),query:R.string().max(500),direction:R.enum(["forward","backward"]).optional()}).strict(),R.object({type:R.literal("refresh")}).strict(),R.object({type:R.literal("back")}).strict(),R.object({type:R.literal("forward")}).strict(),R.object({type:R.literal("navigate"),url:R.string().max(4000)}).strict(),R.object({type:R.literal("highlight"),target:W6,color:R.string().regex(/^#[0-9a-fA-F]{6}$/)}).strict(),R.object({type:R.literal("selection")}).strict(),R.object({type:R.literal("snapshot")}).strict()]),mQ=R.object({type:R.literal("pointer"),phase:R.enum(["move","down","up"]),x:R.number().finite().min(0).max(2048),y:R.number().finite().min(0).max(2048),button:R.enum(["left","middle","right"]).optional(),buttons:R.number().int().min(0).max(31).optional()}).strict(),kQ=R.object({events:R.array(R.discriminatedUnion("type",[mQ,R.object({type:R.literal("wheel"),deltaX:R.number().finite().min(-1e5).max(1e5),deltaY:R.number().finite().min(-1e5).max(1e5)}).strict(),R.object({type:R.literal("key"),phase:R.enum(["down","up"]),key:R.string().min(1).max(64)}).strict(),R.object({type:R.literal("text"),text:R.string().max(5000)}).strict()])).max(64)}).strict(),_Q=R.object({width:R.number().finite().min(1).max(16384),height:R.number().finite().min(1).max(16384)}).strict();function SQ(){return z6(18).toString("hex")}function IQ(Z){if(!Z)return"";if(Z.startsWith("["))return Z.slice(1,Z.indexOf("]"));return Z.split(":")[0]?.toLowerCase()??""}function q3(Z){return typeof Z==="string"?Z:void 0}function uQ(Z){let Q=new URL(Z);if(Q.protocol!=="http:"&&Q.protocol!=="https:"||Q.username||Q.password)throw Error("Browser proxy frontend origin is invalid");return Q.origin}function TQ(Z){return Z.replace(/[&<>"']/g,(Q)=>{if(Q==="&")return"&";if(Q==="<")return"<";if(Q===">")return">";if(Q==='"')return""";return"'"})}function V6(Z){return JSON.stringify(Z).replace(/</g,"\\u003c")}function AQ(Z){let Q=V6(Z.bridgeToken),X=V6(Z.frontendOrigin),Y=`session=${encodeURIComponent(Z.sessionId)}&token=${encodeURIComponent(Z.bridgeToken)}`,W=TQ(Z.cspNonce);return`<!doctype html><html><head><meta charset="utf-8"><meta name="color-scheme" content="light"><style nonce="${W}">*{box-sizing:border-box}html,body,#surface,#view{border:0;margin:0;width:100%;height:100%;overflow:hidden}body{background:#fff}#surface{position:relative;outline:0;touch-action:none;user-select:none}#view{display:block;object-fit:fill;pointer-events:none}#status{position:absolute;inset:auto 12px 12px;padding:8px 10px;border:1px solid #fecaca;border-radius:8px;background:rgba(255,255,255,.96);color:#b91c1c;font:12px system-ui;box-shadow:0 8px 24px rgba(15,23,42,.12)}#status[hidden]{display:none}</style></head><body><div id="surface" tabindex="0" role="application" aria-label="Live browser page"><img id="view" draggable="false" alt="" src="/browser/stream?${Y}"><div id="status" hidden></div></div><script nonce="${W}">(()=>{"use strict";const TOKEN=${Q};const FRONTEND_ORIGIN=${X};const SESSION=${V6(Z.sessionId)};const surface=document.getElementById("surface");const view=document.getElementById("view");const status=document.getElementById("status");let metrics={viewportWidth:720,viewportHeight:442};let queue=[];let flushPending=false;let inputChain=Promise.resolve();const endpoint=(path)=>path+"?session="+encodeURIComponent(SESSION);const headers={"content-type":"application/json","x-ideawave-browser-token":TOKEN};const post=async(path,body)=>{const response=await fetch(endpoint(path),{method:"POST",headers,body:JSON.stringify(body),credentials:"omit",cache:"no-store"});if(!response.ok)throw new Error((await response.text())||"Browser command failed");const type=response.headers.get("content-type")||"";return type.includes("application/json")?response.json():null};const sendParent=(event,payload,requestId)=>window.parent.postMessage({type:"ideawave-browser-event",token:TOKEN,event,payload,...(requestId?{requestId}:{})},FRONTEND_ORIGIN);const showError=(message)=>{status.textContent=String(message);status.hidden=false};const flush=()=>{flushPending=false;const batch=queue.splice(0,64);if(batch.length)inputChain=inputChain.then(()=>post("/browser/input",{events:batch})).catch(showError);if(queue.length){flushPending=true;requestAnimationFrame(flush)}};const enqueue=(event)=>{queue.push(event);if(flushPending)return;flushPending=true;requestAnimationFrame(flush)};const point=(event)=>{const rect=surface.getBoundingClientRect();return{x:Math.max(0,Math.min(metrics.viewportWidth,(event.clientX-rect.left)*metrics.viewportWidth/Math.max(1,rect.width))),y:Math.max(0,Math.min(metrics.viewportHeight,(event.clientY-rect.top)*metrics.viewportHeight/Math.max(1,rect.height)))}};const button=(value)=>value===1?"middle":value===2?"right":"left";for(const name of ["pointermove","pointerdown","pointerup"]){surface.addEventListener(name,event=>{if(name==="pointerdown"){surface.focus({preventScroll:true});surface.setPointerCapture(event.pointerId)}const p=point(event);enqueue({type:"pointer",phase:name.slice(7),x:p.x,y:p.y,button:button(event.button),buttons:event.buttons});event.preventDefault()})}surface.addEventListener("wheel",event=>{enqueue({type:"wheel",deltaX:event.deltaX,deltaY:event.deltaY});event.preventDefault()},{passive:false});surface.addEventListener("keydown",event=>{if(event.isComposing)return;enqueue({type:"key",phase:"down",key:event.key});event.preventDefault()});surface.addEventListener("keyup",event=>{if(event.isComposing)return;enqueue({type:"key",phase:"up",key:event.key});event.preventDefault()});surface.addEventListener("compositionend",event=>{if(event.data)enqueue({type:"text",text:event.data})});surface.addEventListener("paste",event=>{const text=event.clipboardData&&event.clipboardData.getData("text/plain");if(text){enqueue({type:"text",text:text.slice(0,5000)});event.preventDefault()}});surface.addEventListener("contextmenu",event=>event.preventDefault());const resize=new ResizeObserver(entries=>{const rect=entries[0]&&entries[0].contentRect;if(rect)void post("/browser/viewport",{width:rect.width,height:rect.height}).catch(showError)});resize.observe(surface);const events=new EventSource("/browser/events?${Y}");events.onmessage=event=>{try{const message=JSON.parse(event.data);if(message.event==="state"&&message.payload&&message.payload.metrics)metrics=message.payload.metrics;if(message.event==="error")showError(message.payload&&message.payload.message||"Browser page error");else status.hidden=true;sendParent(message.event,message.payload)}catch(error){showError(error instanceof Error?error.message:String(error))}};events.onerror=()=>showError("Live browser stream disconnected");window.addEventListener("message",event=>{const message=event.data;if(event.source!==window.parent||event.origin!==FRONTEND_ORIGIN||!message||message.type!=="ideawave-browser-command"||message.token!==TOKEN)return;Promise.resolve(post("/browser/command",message.command||{})).then(result=>sendParent("response",{ok:true,result},message.requestId),error=>sendParent("response",{ok:false,error:error instanceof Error?error.message:String(error)},message.requestId))});window.addEventListener("beforeunload",()=>{events.close();resize.disconnect()})})();</script></body></html>`}function F3(Z){return(Z["content-type"]??"application/octet-stream").split(";")[0]?.trim().toLowerCase()??"application/octet-stream"}function lQ(Z){return"tagName"in Z}function H6(Z,Q){return Z.attrs.find((X)=>X.name.toLowerCase()===Q)?.value??null}function U3(Z,Q,X){let K=Z.attrs.find((Y)=>Y.name.toLowerCase()===Q);if(K)K.value=X;else Z.attrs.push({name:Q,value:X})}function B3(Z){let Q=F3(Z.headers);if(!(/^image\/(?:png|jpeg|gif|webp|avif|bmp|x-icon)$/.test(Q)||/^(?:font\/|application\/(?:font-|vnd\.ms-fontobject|x-font-))/.test(Q)))return null;return`data:${Q};base64,${Buffer.from(Z.body).toString("base64")}`}async function j6(Z){let Q=[],X=0;for await(let K of Z){let Y=Buffer.isBuffer(K)?K:Buffer.from(K);if(X+=Y.byteLength,X>NQ)throw Error("Browser request is too large");Q.push(Y)}return JSON.parse(Buffer.concat(Q).toString("utf8"))}class q6{sessions=new Map;port=null;sweepTimer;runtime;constructor(Z){this.runtime=Z??new t0,this.sweepTimer=setInterval(()=>this.sweep(),60000),this.sweepTimer.unref?.()}setPort(Z){this.port=Z}origin(Z){if(!this.port)throw Error("Browser proxy is not ready");return`http://${Z}.localhost:${this.port}`}wrapperOrigin(Z){return this.origin(Z.wrapperHost)}result(Z){let Q=this.wrapperOrigin(Z);return{proxySessionId:Z.id,wrapperUrl:`${Q}/browser/wrapper?session=${encodeURIComponent(Z.id)}`,bridgeToken:Z.bridgeToken,navigateUrlPrefix:`${Q}/browser/command?session=${encodeURIComponent(Z.id)}&url=`}}async handleRpc(Z,Q,X){switch(X.method){case"open_proxy_session":{let K=DQ.parse(X.params),Y=C0(K.url).href,W=uQ(Q),z=[...this.sessions.values()].find((q)=>q.frontendSessionId===Z&&q.browserNodeId===K.browserNodeId);if(z){if(z.frontendOrigin!==W)throw Error("Browser proxy session origin changed unexpectedly");if(z.lastUsedAt=Date.now(),z.remote.currentUrl!==Y)await z.remote.navigate(Y);return this.result(z)}let B=await this.runtime.createPage(Y),w={id:fQ(),frontendSessionId:Z,frontendOrigin:W,browserNodeId:K.browserNodeId,wrapperHost:`iw-browser-${SQ()}`,bridgeToken:z6(24).toString("base64url"),remote:B,lastUsedAt:Date.now()};return this.sessions.set(w.id,w),this.result(w)}case"close_proxy_session":{let K=$Q.parse(X.params),Y=this.sessions.get(K.proxySessionId);if(Y&&Y.frontendSessionId!==Z)throw Error("Browser proxy session belongs to another frontend session");if(Y)await this.closeSession(Y);return{closed:!0}}case"build_snapshot":{let K=GQ.parse(X.params),Y=this.ownedSession(Z,K.proxySessionId);if(Y.remote.currentRevision!==K.revision)throw Error("STALE_BROWSER_REF: inspect the browser again before freezing");return this.buildSnapshot(Y,K.revision)}}}async closeSession(Z){if(this.sessions.get(Z.id)===Z)this.sessions.delete(Z.id);await Z.remote.close()}closeFrontendSession(Z){for(let Q of[...this.sessions.values()])if(Q.frontendSessionId===Z)this.closeSession(Q)}async close(){clearInterval(this.sweepTimer);let Z=[...this.sessions.values()];this.sessions.clear(),await Promise.all(Z.map((Q)=>Q.remote.close())),await this.runtime.close()}ownedSession(Z,Q){let X=this.sessions.get(Q);if(!X||X.frontendSessionId!==Z)throw Error("Browser proxy session is unavailable");return X.lastUsedAt=Date.now(),X}sweep(){let Z=Date.now()-hQ;for(let Q of[...this.sessions.values()])if(Q.lastUsedAt<Z)this.closeSession(Q)}requestAuthorized(Z,Q){return q3(Z.headers.origin)===this.wrapperOrigin(Q)&&q3(Z.headers["x-ideawave-browser-token"])===Q.bridgeToken}async handleHttpRequest(Z,Q){let X=new URL(Z.url??"/","http://localhost");if(!X.pathname.startsWith("/browser/"))return!1;let K=X.searchParams.get("session"),Y=K?this.sessions.get(K):null;if(!Y)return Q.writeHead(404),Q.end(),!0;if(Y.lastUsedAt=Date.now(),IQ(Z.headers.host)!==`${Y.wrapperHost}.localhost`)return Q.writeHead(403),Q.end(),!0;try{if(X.pathname==="/browser/wrapper"){if(Z.method!=="GET"&&Z.method!=="HEAD")return Q.writeHead(405),Q.end(),!0;return this.sendViewer(Q,Y,Z.method==="HEAD"),!0}if(X.searchParams.get("token")===Y.bridgeToken){if(X.pathname==="/browser/stream")return this.sendFrameStream(Q,Y,Z.method==="HEAD"),!0;if(X.pathname==="/browser/events")return this.sendEventStream(Q,Y,Z.method==="HEAD"),!0}if(Z.method!=="POST"||!this.requestAuthorized(Z,Y))return Q.writeHead(403),Q.end(),!0;if(X.pathname==="/browser/input"){let W=kQ.parse(await j6(Z));return await Y.remote.input(W.events),this.sendJson(Q,{ok:!0}),!0}if(X.pathname==="/browser/viewport"){let W=_Q.parse(await j6(Z));return await Y.remote.setViewport(W.width,W.height),this.sendJson(Q,{ok:!0}),!0}if(X.pathname==="/browser/command"){let W=EQ.parse(await j6(Z));return this.sendJson(Q,await Y.remote.command(W)),!0}return Q.writeHead(404),Q.end(),!0}catch(W){let z=W instanceof Error?W.message:"Browser operation failed";if(Q.headersSent)Q.destroy(W instanceof Error?W:void 0);else Q.writeHead(400,{"content-type":"text/plain; charset=utf-8"}),Q.end(z);return!0}}sendViewer(Z,Q,X){let K=z6(18).toString("base64url"),Y=AQ({bridgeToken:Q.bridgeToken,cspNonce:K,frontendOrigin:Q.frontendOrigin,sessionId:Q.id}),W=Buffer.from(Y),z=["default-src 'none'","img-src 'self'",`style-src 'nonce-${K}'`,`script-src 'nonce-${K}'`,"connect-src 'self'","base-uri 'none'","form-action 'none'",`frame-ancestors ${Q.frontendOrigin}`].join("; ");Z.writeHead(200,{"access-control-allow-origin":Q.frontendOrigin,"cache-control":"no-store","content-length":String(W.byteLength),"content-security-policy":z,"content-type":"text/html; charset=utf-8","cross-origin-resource-policy":"cross-origin","referrer-policy":"no-referrer","x-content-type-options":"nosniff"}),Z.end(X?void 0:W)}sendFrameStream(Z,Q,X){if(Z.writeHead(200,{"cache-control":"no-store","content-type":`multipart/x-mixed-replace; boundary=${z3}`,"x-content-type-options":"nosniff"}),X){Z.end();return}let K=!1,Y=Q.remote.onFrame((W)=>{if(K||Z.destroyed)return;Q.lastUsedAt=Date.now(),K=!Z.write(Buffer.concat([Buffer.from(`--${z3}\r
|
|
34
|
+
${J instanceof Error?J.message:"Browser destination blocked"}`)}}async start(){if(this.server)return;let Z=F8.createServer((Q,X)=>{this.handleHttp(Q,X).catch((J)=>{if(X.headersSent)X.destroy(J);else X.writeHead(500),X.end()})});Z.on("connect",(Q,X,J)=>{this.handleConnect(Q,X,J).catch(()=>X.destroy())}),Z.on("connection",(Q)=>{this.sockets.add(Q),Q.on("error",()=>Q.destroy()),Q.once("close",()=>this.sockets.delete(Q))}),this.port=await jZ(Z),this.server=Z}async close(){let Z=this.server;this.server=null,this.port=null;for(let Q of this.sockets)Q.destroy();if(this.sockets.clear(),!Z)return;await new Promise((Q)=>Z.close(()=>Q()))}}var v8=8,FZ={width:720,height:442},LZ=320,wZ=180,y8=2048,PZ=45000,xZ=12582912,f8=300;function M8(Z,Q,X){return Math.min(X,Math.max(Q,Math.round(Z)))}function OZ(){if(R8()==="darwin")return y0(K6(),"Library","Application Support","IdeaWave","browser");if(R8()==="win32")return y0(process.env.LOCALAPPDATA??y0(K6(),"AppData","Local"),"IdeaWave","browser");return y0(process.env.XDG_CONFIG_HOME??y0(K6(),".config"),"ideawave","browser")}function bZ(Z=OZ()){return{profile:y0(Z,"profile"),browsers:y0(Z,"engines")}}async function CZ(Z){let X=UZ(import.meta.url).resolve("playwright-core/package.json"),J=y0(BZ(X),"cli.js");await new Promise((Y,W)=>{let z=zZ(process.execPath,[J,"install","chromium","--no-shell"],{stdio:"inherit",env:{...process.env,PLAYWRIGHT_BROWSERS_PATH:Z}});z.once("error",W),z.once("exit",(q)=>{if(q===0)Y();else W(Error(`Chromium installation exited with code ${q??"unknown"}`))})})}function RZ(Z){return{headless:!0,viewport:FZ,acceptDownloads:!1,serviceWorkers:"allow",proxy:{server:Z.serverUrl,username:Z.username,password:Z.password},args:["--disable-quic","--disable-session-crashed-bubble","--hide-crash-restore-bubble","--no-first-run","--proxy-bypass-list=<-loopback>","--force-webrtc-ip-handling-policy=disable_non_proxied_udp"]}}async function J6(Z){let Q=[...Z.values()].map((X)=>X.handle);Z.clear(),await Promise.all(Q.map((X)=>X.dispose().catch(()=>{return})))}async function vZ(Z){let Q=[],X=Z;while(X?.parentFrame()){let Y=await(await X.frameElement()).evaluate((W)=>{if(W.id)return`#${globalThis.CSS?.escape?globalThis.CSS.escape(W.id):W.id.replace(/[^a-zA-Z0-9_-]/g,(U)=>`\\${U}`)}`;let z=[],q=W;while(q&&q!==q.ownerDocument.documentElement&&z.length<8){let L=q.localName||"*",U=q.parentElement;if(U){let x=[...U.children].filter((G)=>G.localName===q?.localName);if(x.length>1)L+=`:nth-of-type(${x.indexOf(q)+1})`}z.unshift(L),q=U}return z.join(" > ")});Q.unshift(Y||"iframe"),X=X.parentFrame()}return Q}async function N8(Z){return Z.evaluate((Q)=>{let X=null;if(Q.id)X=`#${globalThis.CSS?.escape?globalThis.CSS.escape(Q.id):Q.id.replace(/[^a-zA-Z0-9_-]/g,(z)=>`\\${z}`)}`;else{let W=[],z=Q;while(z&&z!==z.ownerDocument.documentElement&&W.length<8){let q=z.localName||"*",L=z.parentElement;if(L){let U=[...L.children].filter((x)=>x.localName===z?.localName);if(U.length>1)q+=`:nth-of-type(${U.indexOf(z)+1})`}W.unshift(q),z=L}X=W.join(" > ")||null}let J=(Q.innerText||Q.textContent||"").replace(/\s+/g," ").trim().slice(0,500),Y={tag:Q.localName,text:J,selector:X};if(Q instanceof HTMLAnchorElement)Y.href=Q.href;if(Q instanceof HTMLInputElement)Y.inputType=Q.type,Y.value=Q.type==="password"?"":Q.value.slice(0,500);if(Q instanceof HTMLButtonElement||Q instanceof HTMLInputElement||Q instanceof HTMLSelectElement||Q instanceof HTMLTextAreaElement)Y.disabled=Q.disabled;return Y})}class h8{page;onClose;revision=b8();refs=new Map;refCounter=0;eventListeners=new Set;frameListeners=new Set;cdp=null;stateTimer=null;closed=!1;constructor(Z,Q){this.page=Z;this.onClose=Q}async initialize(Z){this.page.setDefaultNavigationTimeout(PZ),this.page.setDefaultTimeout(12000),this.page.on("framenavigated",(Q)=>{if(Q!==this.page.mainFrame()||!/^https?:/.test(Q.url()))return;this.revision=b8(),J6(this.refs),this.emitSoon()}),this.page.on("domcontentloaded",()=>this.emitSoon()),this.page.on("load",()=>this.emitSoon()),this.page.on("download",(Q)=>void Q.cancel()),this.page.on("popup",(Q)=>{(async()=>{await Q.waitForLoadState("domcontentloaded",{timeout:5000}).catch(()=>{return});let X=Q.url();if(await Q.close().catch(()=>{return}),/^https?:/.test(X))await this.navigate(X)})().catch(()=>{return})}),this.cdp=await this.page.context().newCDPSession(this.page),this.cdp.on("Page.screencastFrame",(Q)=>{let X=Buffer.from(Q.data,"base64");for(let J of this.frameListeners)J(X);this.cdp?.send("Page.screencastFrameAck",{sessionId:Q.sessionId})}),await this.cdp.send("Page.startScreencast",{format:"jpeg",quality:75,everyNthFrame:2}),await this.navigate(Z)}get currentRevision(){return this.revision}get currentUrl(){return this.page.url()}onEvent(Z){return this.eventListeners.add(Z),this.state().then((Q)=>Z({event:"state",payload:Q})).catch(()=>{return}),()=>this.eventListeners.delete(Z)}onFrame(Z){return this.frameListeners.add(Z),this.page.screenshot({type:"jpeg",quality:75}).then((Q)=>Z(Buffer.from(Q))).catch(()=>{return}),()=>this.frameListeners.delete(Z)}emit(Z){for(let Q of this.eventListeners)Q(Z)}emitSoon(){if(this.stateTimer||this.closed)return;this.stateTimer=setTimeout(()=>{this.stateTimer=null,this.state().then((Z)=>this.emit({event:"state",payload:Z})).catch(()=>{return})},50)}async metrics(){return this.page.evaluate(()=>{let{documentElement:Z,body:Q}=document;return{scrollX:window.scrollX,scrollY:window.scrollY,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight,documentWidth:Math.max(Z?.scrollWidth??0,Q?.scrollWidth??0),documentHeight:Math.max(Z?.scrollHeight??0,Q?.scrollHeight??0)}})}async state(){let Z=this.page.url(),[Q,X,J]=await Promise.all([this.page.title().catch(()=>Z),this.page.evaluate(()=>{return document.querySelector('link[rel~="icon"]')?.href||null}).catch(()=>null),this.metrics()]);return{sourceUrl:Z,title:Q||Z,faviconUrl:X,localFaviconUrl:null,revision:this.revision,metrics:J,frozen:!1}}async navigate(Z){let Q=v0(Z).href;return this.emit({event:"navigating",payload:{sourceUrl:this.page.url(),revision:this.revision}}),await this.page.goto(Q,{waitUntil:"domcontentloaded"}),this.emitSoon(),{ok:!0}}async refresh(){return this.emit({event:"navigating",payload:{sourceUrl:this.page.url(),revision:this.revision}}),await this.page.reload({waitUntil:"domcontentloaded"}),this.emitSoon(),{ok:!0}}async goBack(){return await this.page.goBack({waitUntil:"domcontentloaded"}),this.emitSoon(),{ok:!0}}async goForward(){return await this.page.goForward({waitUntil:"domcontentloaded"}),this.emitSoon(),{ok:!0}}async setViewport(Z,Q){await this.page.setViewportSize({width:M8(Z,LZ,y8),height:M8(Q,wZ,y8)}),this.emitSoon()}async input(Z){for(let Q of Z)if(Q.type==="pointer"){if(await this.page.mouse.move(Q.x,Q.y),Q.phase==="down")await this.page.mouse.down({button:Q.button??"left"});else if(Q.phase==="up")await this.page.mouse.up({button:Q.button??"left"})}else if(Q.type==="wheel")await this.page.mouse.wheel(Q.deltaX,Q.deltaY);else if(Q.type==="key")if(Q.phase==="down")await this.page.keyboard.down(Q.key);else await this.page.keyboard.up(Q.key);else await this.page.keyboard.insertText(Q.text);this.emitSoon()}async framesWithPaths(){let Z=this.page.frames().slice(0,24);return Promise.all(Z.map(async(Q)=>({frame:Q,path:await vZ(Q)})))}refFor(Z,Q){for(let[J,Y]of this.refs)if(Y.handle===Z)return J;let X=`${this.revision}:e${++this.refCounter}`;return this.refs.set(X,{handle:Z,framePath:Q}),X}async resolveTarget(Z){if("ref"in Z&&Z.ref){if(!Z.ref.startsWith(`${this.revision}:`))throw Error("STALE_BROWSER_REF: inspect the browser again");let Y=this.refs.get(Z.ref);if(!Y)throw Error("STALE_BROWSER_REF: inspect the browser again");return Y}let Q="framePath"in Z?Z.framePath??[]:[],X=(await this.framesWithPaths()).find((Y)=>JSON.stringify(Y.path)===JSON.stringify(Q));if(!X)throw Error("Browser frame was not found");let J=null;if("selector"in Z&&Z.selector)J=await X.frame.$(Z.selector);if(!J&&"textQuote"in Z&&Z.textQuote?.exact)J=await X.frame.getByText(Z.textQuote.exact,{exact:!1}).first().elementHandle();if(!J)throw Error("Browser element was not found");return{handle:J,framePath:X.path}}async locate(Z){let Q=await this.resolveTarget(Z),X=await Q.handle.boundingBox();if(!X)throw Error("STALE_BROWSER_REF: browser element is detached");let J=await Q.handle.evaluate((W)=>{let z=W.getBoundingClientRect(),q=(W.textContent??"").replace(/\s+/g," ").trim().slice(0,2000);return{rect:{x:z.x,y:z.y,width:z.width,height:z.height},scrollX:W.ownerDocument.defaultView?.scrollX??0,scrollY:W.ownerDocument.defaultView?.scrollY??0,text:q}}),Y=await N8(Q.handle);return{revision:this.revision,ref:this.refFor(Q.handle,Q.framePath),selector:Y.selector,textQuote:J.text?{exact:J.text}:null,framePath:Q.framePath,frame:J.rect,viewport:X,document:{x:J.rect.x+J.scrollX,y:J.rect.y+J.scrollY,width:J.rect.width,height:J.rect.height}}}async click(Z){return await(await this.resolveTarget(Z)).handle.click(),this.emitSoon(),{ok:!0,revision:this.revision}}async highlight(Z,Q){let X=await this.resolveTarget(Z);return await X.handle.evaluate((J,Y)=>{let W=J;W.dataset.ideawaveBrowserHighlight="true",W.style.outline=`3px solid ${Y}`,W.style.outlineOffset="2px"},Q),this.locate({ref:this.refFor(X.handle,X.framePath)})}async scroll(Z){await this.page.evaluate((X)=>{window.scrollTo({left:typeof X.left==="number"?X.left:window.scrollX,top:typeof X.top==="number"?X.top:window.scrollY+(X.deltaY??0)})},Z);let Q=await this.metrics();return this.emitSoon(),{ok:!0,metrics:Q,revision:this.revision}}async find(Z,Q=!1){let X=!1;for(let J of this.page.frames().slice(0,24))if(X=await J.evaluate(({value:Y,backwards:W})=>window.find(Y,!1,W,!0,!1,!0,!1),{value:Z.slice(0,500),backwards:Q}).catch(()=>!1),X)break;return{found:X,query:Z,revision:this.revision}}async selection(){for(let{frame:Z,path:Q}of await this.framesWithPaths()){let X=await Z.evaluateHandle(()=>{let Y=window.getSelection();if(!Y||Y.isCollapsed||!Y.anchorNode)return null;return Y.anchorNode.nodeType===Node.ELEMENT_NODE?Y.anchorNode:Y.anchorNode.parentElement}),J=X.asElement();if(!J){await X.dispose();continue}return this.locate({ref:this.refFor(J,Q)})}throw Error("No page selection is available")}async inspect(){await this.page.waitForLoadState("domcontentloaded",{timeout:12000}).catch(()=>{return}),await J6(this.refs),this.refCounter=0;let Z=[],Q=[],X=[],J=[];for(let{frame:z,path:q}of await this.framesWithPaths()){let L=await z.locator("body").innerText({timeout:1500}).catch(()=>"");if(L.trim())J.push(L.replace(/\s+/g," ").trim());for(let[U,x,G]of[["h1,h2,h3,h4,h5,h6",Z,200],["a[href]",Q,f8],["button,input,select,textarea,[role=button]",X,f8]]){if(x.length>=G)continue;let h=(await z.$$(U)).slice(0,G-x.length);for(let C of h){let b=C;if(!await b.isVisible().catch(()=>!1)){await b.dispose();continue}let f=await N8(b);x.push({ref:this.refFor(b,q),...f,framePath:q})}}}let Y=J.join(`
|
|
35
|
+
`),W=await this.state();return{sourceUrl:W.sourceUrl,title:W.title,mode:"live",revision:this.revision,untrustedContent:!0,visibleText:Y.slice(0,25000),truncated:Y.length>25000,headings:Z,links:Q,controls:X,metrics:W.metrics}}async snapshotHtml(){return this.page.evaluate(()=>{let Z=document.documentElement.cloneNode(!0),Q=document.documentElement.querySelectorAll("*"),X=Z.querySelectorAll("*");for(let J=0;J<Q.length;J+=1){let Y=Q[J],W=X[J];if(!Y||!W)continue;if(Y instanceof HTMLInputElement&&W instanceof HTMLInputElement){if(Y.type==="password")W.removeAttribute("value");else W.setAttribute("value",Y.value);if(Y.checked)W.setAttribute("checked","");else W.removeAttribute("checked")}else if(Y instanceof HTMLTextAreaElement&&W instanceof HTMLTextAreaElement)W.textContent=Y.value;else if(Y instanceof HTMLOptionElement&&W instanceof HTMLOptionElement)if(Y.selected)W.setAttribute("selected","");else W.removeAttribute("selected");else if(Y instanceof HTMLImageElement&&W instanceof HTMLImageElement&&Y.currentSrc)W.setAttribute("src",Y.currentSrc),W.removeAttribute("srcset")}return`<!doctype html>${Z.outerHTML}`})}async fetchResource(Z,Q=xZ){let X=v0(Z).href,J=await this.page.context().request.get(X,{failOnStatusCode:!1,maxRedirects:5,timeout:30000}),Y=Number(J.headers()["content-length"]??0);if(Number.isFinite(Y)&&Y>Q)throw Error("Browser proxy response exceeds the size limit");let W=Buffer.from(await J.body());if(W.byteLength>Q)throw Error("Browser proxy response exceeds the size limit");return{url:J.url(),status:J.status(),headers:J.headers(),body:W}}async command(Z){switch(Z.type){case"inspect":return this.inspect();case"locate":return this.locate(Z.target);case"click":return this.click(Z.target);case"scroll":return this.scroll({deltaY:typeof Z.deltaY==="number"?Z.deltaY:void 0,left:typeof Z.left==="number"?Z.left:void 0,top:typeof Z.top==="number"?Z.top:void 0});case"find":return this.find(String(Z.query??""),Z.direction==="backward");case"refresh":return this.refresh();case"navigate":return this.navigate(String(Z.url??""));case"back":return this.goBack();case"forward":return this.goForward();case"highlight":return this.highlight(Z.target,String(Z.color??"#FDE047"));case"selection":return this.selection();case"snapshot":return{sourceUrl:this.page.url(),title:await this.page.title(),revision:this.revision};default:throw Error("Unsupported browser command")}}async close(){if(this.closed)return;if(this.closed=!0,this.stateTimer)clearTimeout(this.stateTimer);this.stateTimer=null,await J6(this.refs),await this.cdp?.send("Page.stopScreencast").catch(()=>{return}),await this.cdp?.detach().catch(()=>{return}),await this.page.close({runBeforeUnload:!1}).catch(()=>{return}),this.eventListeners.clear(),this.frameListeners.clear(),this.onClose()}}class J1{onStatus;networkProxy;context=null;startPromise=null;pages=new Set;status={phase:"idle"};constructor(Z,Q){this.onStatus=Z;this.networkProxy=Q??new X6}setStatus(Z){this.status=Z,this.onStatus?.(Z)}getStatus(){return this.status}async startContext(){this.setStatus({phase:"starting",message:"Starting local Chrome…"});let Z=bZ();await Promise.all([C8(Z.profile,{recursive:!0}),C8(Z.browsers,{recursive:!0}),this.networkProxy.start()]),process.env.PLAYWRIGHT_BROWSERS_PATH=Z.browsers;let{chromium:Q}=await import("playwright-core"),X=RZ(this.networkProxy),J=null;if(await qZ(Q.executablePath()).then(()=>!0,()=>!1))try{J=await Q.launchPersistentContext(Z.profile,{...X,channel:"chromium"})}catch{J=null}if(!J)try{J=await Q.launchPersistentContext(Z.profile,{...X,channel:"chrome"})}catch{J=null}if(!J)this.setStatus({phase:"downloading",message:"Downloading the IdeaWave Chromium engine…"}),await CZ(Z.browsers),J=await Q.launchPersistentContext(Z.profile,{...X,channel:"chromium"});await J.route("**/*",async(q)=>{let L=q.request().url();try{let U=new URL(L);if(U.protocol==="http:"||U.protocol==="https:")v0(L);else if(U.protocol!=="data:"&&U.protocol!=="blob:"){await q.abort("blockedbyclient");return}await q.continue()}catch{await q.abort("blockedbyclient")}});let W=J.pages();await Promise.all(W.slice(1).map((q)=>q.close({runBeforeUnload:!1}).catch(()=>{return})));let z=W[0];if(z&&z.url()!=="about:blank")await z.goto("about:blank").catch(()=>{return});return this.context=J,this.setStatus({phase:"ready"}),J}ensureContext(){if(this.context)return Promise.resolve(this.context);if(this.startPromise)return this.startPromise;return this.startPromise=this.startContext().catch((Z)=>{throw this.setStatus({phase:"failed",message:Z instanceof Error?Z.message:String(Z)}),this.startPromise=null,Z}),this.startPromise}async createPage(Z){if(this.pages.size>=v8)throw Error(`IdeaWave supports at most ${v8} simultaneous live browser cards`);let Q=await this.ensureContext(),X=Q.pages().find((Y)=>Y.url()==="about:blank"&&![...this.pages].some((W)=>W.page===Y));X??=await Q.newPage();let J=new h8(X,()=>this.pages.delete(J));this.pages.add(J);try{return await J.initialize(Z),J}catch(Y){throw await J.close(),Y}}async close(){let Z=[...this.pages];this.pages.clear(),await Promise.all(Z.map((X)=>X.close()));let Q=this.context;this.context=null,this.startPromise=null,await Q?.close().catch(()=>{return}),await this.networkProxy.close(),this.setStatus({phase:"idle"})}}import{randomBytes as y6,randomUUID as XX}from"node:crypto";import*as H4 from"css-tree";var yZ=new Set([65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]),u="�",V;(function(Z){Z[Z.EOF=-1]="EOF",Z[Z.NULL=0]="NULL",Z[Z.TABULATION=9]="TABULATION",Z[Z.CARRIAGE_RETURN=13]="CARRIAGE_RETURN",Z[Z.LINE_FEED=10]="LINE_FEED",Z[Z.FORM_FEED=12]="FORM_FEED",Z[Z.SPACE=32]="SPACE",Z[Z.EXCLAMATION_MARK=33]="EXCLAMATION_MARK",Z[Z.QUOTATION_MARK=34]="QUOTATION_MARK",Z[Z.AMPERSAND=38]="AMPERSAND",Z[Z.APOSTROPHE=39]="APOSTROPHE",Z[Z.HYPHEN_MINUS=45]="HYPHEN_MINUS",Z[Z.SOLIDUS=47]="SOLIDUS",Z[Z.DIGIT_0=48]="DIGIT_0",Z[Z.DIGIT_9=57]="DIGIT_9",Z[Z.SEMICOLON=59]="SEMICOLON",Z[Z.LESS_THAN_SIGN=60]="LESS_THAN_SIGN",Z[Z.EQUALS_SIGN=61]="EQUALS_SIGN",Z[Z.GREATER_THAN_SIGN=62]="GREATER_THAN_SIGN",Z[Z.QUESTION_MARK=63]="QUESTION_MARK",Z[Z.LATIN_CAPITAL_A=65]="LATIN_CAPITAL_A",Z[Z.LATIN_CAPITAL_Z=90]="LATIN_CAPITAL_Z",Z[Z.RIGHT_SQUARE_BRACKET=93]="RIGHT_SQUARE_BRACKET",Z[Z.GRAVE_ACCENT=96]="GRAVE_ACCENT",Z[Z.LATIN_SMALL_A=97]="LATIN_SMALL_A",Z[Z.LATIN_SMALL_Z=122]="LATIN_SMALL_Z"})(V||(V={}));var e={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"};function p1(Z){return Z>=55296&&Z<=57343}function D8(Z){return Z>=56320&&Z<=57343}function $8(Z,Q){return(Z-55296)*1024+9216+Q}function s1(Z){return Z!==32&&Z!==10&&Z!==13&&Z!==9&&Z!==12&&Z>=1&&Z<=31||Z>=127&&Z<=159}function r1(Z){return Z>=64976&&Z<=65007||yZ.has(Z)}var F;(function(Z){Z.controlCharacterInInputStream="control-character-in-input-stream",Z.noncharacterInInputStream="noncharacter-in-input-stream",Z.surrogateInInputStream="surrogate-in-input-stream",Z.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",Z.endTagWithAttributes="end-tag-with-attributes",Z.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",Z.unexpectedSolidusInTag="unexpected-solidus-in-tag",Z.unexpectedNullCharacter="unexpected-null-character",Z.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",Z.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",Z.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",Z.missingEndTagName="missing-end-tag-name",Z.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",Z.unknownNamedCharacterReference="unknown-named-character-reference",Z.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",Z.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",Z.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",Z.eofBeforeTagName="eof-before-tag-name",Z.eofInTag="eof-in-tag",Z.missingAttributeValue="missing-attribute-value",Z.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",Z.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",Z.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",Z.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",Z.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",Z.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",Z.missingDoctypePublicIdentifier="missing-doctype-public-identifier",Z.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",Z.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",Z.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",Z.cdataInHtmlContent="cdata-in-html-content",Z.incorrectlyOpenedComment="incorrectly-opened-comment",Z.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",Z.eofInDoctype="eof-in-doctype",Z.nestedComment="nested-comment",Z.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",Z.eofInComment="eof-in-comment",Z.incorrectlyClosedComment="incorrectly-closed-comment",Z.eofInCdata="eof-in-cdata",Z.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",Z.nullCharacterReference="null-character-reference",Z.surrogateCharacterReference="surrogate-character-reference",Z.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",Z.controlCharacterReference="control-character-reference",Z.noncharacterCharacterReference="noncharacter-character-reference",Z.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",Z.missingDoctypeName="missing-doctype-name",Z.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",Z.duplicateAttribute="duplicate-attribute",Z.nonConformingDoctype="non-conforming-doctype",Z.missingDoctype="missing-doctype",Z.misplacedDoctype="misplaced-doctype",Z.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",Z.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",Z.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",Z.openElementsLeftAfterEof="open-elements-left-after-eof",Z.abandonedHeadElementChild="abandoned-head-element-child",Z.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",Z.nestedNoscriptInHead="nested-noscript-in-head",Z.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"})(F||(F={}));var MZ=65536;class Y6{constructor(Z){this.handler=Z,this.html="",this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=MZ,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1}get col(){return this.pos-this.lineStartPos+Number(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(Z,Q){let{line:X,col:J,offset:Y}=this,W=J+Q,z=Y+Q;return{code:Z,startLine:X,endLine:X,startCol:W,endCol:W,startOffset:z,endOffset:z}}_err(Z){if(this.handler.onParseError&&this.lastErrOffset!==this.offset)this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(Z,0))}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(Z){if(this.pos!==this.html.length-1){let Q=this.html.charCodeAt(this.pos+1);if(D8(Q))return this.pos++,this._addGap(),$8(Z,Q)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,V.EOF;return this._err(F.surrogateInInputStream),Z}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){if(this.willDropParsedChunk())this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0}write(Z,Q){if(this.html.length>0)this.html+=Z;else this.html=Z;this.endOfChunkHit=!1,this.lastChunkWritten=Q}insertHtmlAtCurrentPos(Z){this.html=this.html.substring(0,this.pos+1)+Z+this.html.substring(this.pos+1),this.endOfChunkHit=!1}startsWith(Z,Q){if(this.pos+Z.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(Q)return this.html.startsWith(Z,this.pos);for(let X=0;X<Z.length;X++)if((this.html.charCodeAt(this.pos+X)|32)!==Z.charCodeAt(X))return!1;return!0}peek(Z){let Q=this.pos+Z;if(Q>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,V.EOF;let X=this.html.charCodeAt(Q);return X===V.CARRIAGE_RETURN?V.LINE_FEED:X}advance(){if(this.pos++,this.isEol)this.isEol=!1,this.line++,this.lineStartPos=this.pos;if(this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,V.EOF;let Z=this.html.charCodeAt(this.pos);if(Z===V.CARRIAGE_RETURN)return this.isEol=!0,this.skipNextNewLine=!0,V.LINE_FEED;if(Z===V.LINE_FEED){if(this.isEol=!0,this.skipNextNewLine)return this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()}if(this.skipNextNewLine=!1,p1(Z))Z=this._processSurrogate(Z);if(!(this.handler.onParseError===null||Z>31&&Z<127||Z===V.LINE_FEED||Z===V.CARRIAGE_RETURN||Z>159&&Z<64976))this._checkForProblematicCharacters(Z);return Z}_checkForProblematicCharacters(Z){if(s1(Z))this._err(F.controlCharacterInInputStream);else if(r1(Z))this._err(F.noncharacterInInputStream)}retreat(Z){this.pos-=Z;while(this.pos<this.lastGapPos)this.lastGapPos=this.gapStack.pop(),this.pos--;this.isEol=!1}}var _;(function(Z){Z[Z.CHARACTER=0]="CHARACTER",Z[Z.NULL_CHARACTER=1]="NULL_CHARACTER",Z[Z.WHITESPACE_CHARACTER=2]="WHITESPACE_CHARACTER",Z[Z.START_TAG=3]="START_TAG",Z[Z.END_TAG=4]="END_TAG",Z[Z.COMMENT=5]="COMMENT",Z[Z.DOCTYPE=6]="DOCTYPE",Z[Z.EOF=7]="EOF",Z[Z.HIBERNATION=8]="HIBERNATION"})(_||(_={}));function o1(Z,Q){for(let X=Z.attrs.length-1;X>=0;X--)if(Z.attrs[X].name===Q)return Z.attrs[X].value;return null}var hZ=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function G8(Z){if(Z>=55296&&Z<=57343||Z>1114111)return 65533;return hZ.get(Z)??Z}function g8(Z){let Q=atob(Z),X=Q.length&-2,J=new Uint16Array(X/2);for(let Y=0,W=0;Y<X;Y+=2){let z=Q.charCodeAt(Y),q=Q.charCodeAt(Y+1);J[W++]=z|q<<8}return J}var W6=g8("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg");var o;(function(Z){Z[Z.VALUE_LENGTH=49152]="VALUE_LENGTH",Z[Z.FLAG13=8192]="FLAG13",Z[Z.BRANCH_LENGTH=8064]="BRANCH_LENGTH",Z[Z.JUMP_TABLE=127]="JUMP_TABLE"})(o||(o={}));var d;(function(Z){Z[Z.NUM=35]="NUM",Z[Z.SEMI=59]="SEMI",Z[Z.EQUALS=61]="EQUALS",Z[Z.ZERO=48]="ZERO",Z[Z.NINE=57]="NINE",Z[Z.LOWER_A=97]="LOWER_A",Z[Z.LOWER_F=102]="LOWER_F",Z[Z.LOWER_X=120]="LOWER_X",Z[Z.LOWER_Z=122]="LOWER_Z",Z[Z.UPPER_A=65]="UPPER_A",Z[Z.UPPER_F=70]="UPPER_F",Z[Z.UPPER_Z=90]="UPPER_Z"})(d||(d={}));var E8=32;function V6(Z){return Z>=d.ZERO&&Z<=d.NINE}function DZ(Z){return Z>=d.UPPER_A&&Z<=d.UPPER_F||Z>=d.LOWER_A&&Z<=d.LOWER_F}function $Z(Z){return Z>=d.UPPER_A&&Z<=d.UPPER_Z||Z>=d.LOWER_A&&Z<=d.LOWER_Z||V6(Z)}function GZ(Z){return Z===d.EQUALS||$Z(Z)}var s;(function(Z){Z[Z.EntityStart=0]="EntityStart",Z[Z.NumericStart=1]="NumericStart",Z[Z.NumericDecimal=2]="NumericDecimal",Z[Z.NumericHex=3]="NumericHex",Z[Z.NamedEntity=4]="NamedEntity"})(s||(s={}));var F0;(function(Z){Z[Z.Legacy=0]="Legacy",Z[Z.Strict=1]="Strict",Z[Z.Attribute=2]="Attribute"})(F0||(F0={}));class j6{decodeTree;emitCodePoint;errors;constructor(Z,Q,X){this.decodeTree=Z,this.emitCodePoint=Q,this.errors=X}state=s.EntityStart;consumed=1;result=0;treeIndex=0;excess=1;decodeMode=F0.Strict;runConsumed=0;startEntity(Z){this.decodeMode=Z,this.state=s.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(Z,Q){switch(this.state){case s.EntityStart:{if(Z.charCodeAt(Q)===d.NUM)return this.state=s.NumericStart,this.consumed+=1,this.stateNumericStart(Z,Q+1);return this.state=s.NamedEntity,this.stateNamedEntity(Z,Q)}case s.NumericStart:return this.stateNumericStart(Z,Q);case s.NumericDecimal:return this.stateNumericDecimal(Z,Q);case s.NumericHex:return this.stateNumericHex(Z,Q);case s.NamedEntity:return this.stateNamedEntity(Z,Q)}}stateNumericStart(Z,Q){if(Q>=Z.length)return-1;if((Z.charCodeAt(Q)|E8)===d.LOWER_X)return this.state=s.NumericHex,this.consumed+=1,this.stateNumericHex(Z,Q+1);return this.state=s.NumericDecimal,this.stateNumericDecimal(Z,Q)}stateNumericHex(Z,Q){while(Q<Z.length){let X=Z.charCodeAt(Q);if(V6(X)||DZ(X)){let J=X<=d.NINE?X-d.ZERO:(X|E8)-d.LOWER_A+10;this.result=this.result*16+J,this.consumed++,Q++}else return this.emitNumericEntity(X,3)}return-1}stateNumericDecimal(Z,Q){while(Q<Z.length){let X=Z.charCodeAt(Q);if(V6(X))this.result=this.result*10+(X-d.ZERO),this.consumed++,Q++;else return this.emitNumericEntity(X,2)}return-1}emitNumericEntity(Z,Q){if(this.consumed<=Q)return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(Z===d.SEMI)this.consumed+=1;else if(this.decodeMode===F0.Strict)return 0;if(this.emitCodePoint(G8(this.result),this.consumed),this.errors){if(Z!==d.SEMI)this.errors.missingSemicolonAfterCharacterReference();this.errors.validateNumericCharacterReference(this.result)}return this.consumed}stateNamedEntity(Z,Q){let{decodeTree:X}=this,J=X[this.treeIndex],Y=(J&o.VALUE_LENGTH)>>14;while(Q<Z.length){if(Y===0&&(J&o.FLAG13)!==0){let z=(J&o.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let q=J&o.JUMP_TABLE;if(Z.charCodeAt(Q)!==q)return this.result===0?0:this.emitNotTerminatedNamedEntity();Q++,this.excess++,this.runConsumed++}while(this.runConsumed<z){if(Q>=Z.length)return-1;let q=this.runConsumed-1,L=X[this.treeIndex+1+(q>>1)],U=q%2===0?L&255:L>>8&255;if(Z.charCodeAt(Q)!==U)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();Q++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(z>>1),J=X[this.treeIndex],Y=(J&o.VALUE_LENGTH)>>14}if(Q>=Z.length)break;let W=Z.charCodeAt(Q);if(W===d.SEMI&&Y!==0&&(J&o.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,Y,this.consumed+this.excess);if(this.treeIndex=gZ(X,J,this.treeIndex+Math.max(1,Y),W),this.treeIndex<0)return this.result===0||this.decodeMode===F0.Attribute&&(Y===0||GZ(W))?0:this.emitNotTerminatedNamedEntity();if(J=X[this.treeIndex],Y=(J&o.VALUE_LENGTH)>>14,Y!==0){if(W===d.SEMI)return this.emitNamedEntityData(this.treeIndex,Y,this.consumed+this.excess);if(this.decodeMode!==F0.Strict&&(J&o.FLAG13)===0)this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0}Q++,this.excess++}return-1}emitNotTerminatedNamedEntity(){let{result:Z,decodeTree:Q}=this,X=(Q[Z]&o.VALUE_LENGTH)>>14;return this.emitNamedEntityData(Z,X,this.consumed),this.errors?.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(Z,Q,X){let{decodeTree:J}=this;if(this.emitCodePoint(Q===1?J[Z]&~(o.VALUE_LENGTH|o.FLAG13):J[Z+1],X),Q===3)this.emitCodePoint(J[Z+2],X);return X}end(){switch(this.state){case s.NamedEntity:return this.result!==0&&(this.decodeMode!==F0.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case s.NumericDecimal:return this.emitNumericEntity(0,2);case s.NumericHex:return this.emitNumericEntity(0,3);case s.NumericStart:return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case s.EntityStart:return 0}}}function gZ(Z,Q,X,J){let Y=(Q&o.BRANCH_LENGTH)>>7,W=Q&o.JUMP_TABLE;if(Y===0)return W!==0&&J===W?X:-1;if(W){let U=J-W;return U<0||U>=Y?-1:Z[X+U]-1}let z=Y+1>>1,q=0,L=Y-1;while(q<=L){let U=q+L>>>1,x=U>>1,h=Z[X+x]>>(U&1)*8&255;if(h<J)q=U+1;else if(h>J)L=U-1;else return Z[X+z+U]}return-1}var P;(function(Z){Z.HTML="http://www.w3.org/1999/xhtml",Z.MATHML="http://www.w3.org/1998/Math/MathML",Z.SVG="http://www.w3.org/2000/svg",Z.XLINK="http://www.w3.org/1999/xlink",Z.XML="http://www.w3.org/XML/1998/namespace",Z.XMLNS="http://www.w3.org/2000/xmlns/"})(P||(P={}));var x0;(function(Z){Z.TYPE="type",Z.ACTION="action",Z.ENCODING="encoding",Z.PROMPT="prompt",Z.NAME="name",Z.COLOR="color",Z.FACE="face",Z.SIZE="size"})(x0||(x0={}));var Z0;(function(Z){Z.NO_QUIRKS="no-quirks",Z.QUIRKS="quirks",Z.LIMITED_QUIRKS="limited-quirks"})(Z0||(Z0={}));var B;(function(Z){Z.A="a",Z.ADDRESS="address",Z.ANNOTATION_XML="annotation-xml",Z.APPLET="applet",Z.AREA="area",Z.ARTICLE="article",Z.ASIDE="aside",Z.B="b",Z.BASE="base",Z.BASEFONT="basefont",Z.BGSOUND="bgsound",Z.BIG="big",Z.BLOCKQUOTE="blockquote",Z.BODY="body",Z.BR="br",Z.BUTTON="button",Z.CAPTION="caption",Z.CENTER="center",Z.CODE="code",Z.COL="col",Z.COLGROUP="colgroup",Z.DD="dd",Z.DESC="desc",Z.DETAILS="details",Z.DIALOG="dialog",Z.DIR="dir",Z.DIV="div",Z.DL="dl",Z.DT="dt",Z.EM="em",Z.EMBED="embed",Z.FIELDSET="fieldset",Z.FIGCAPTION="figcaption",Z.FIGURE="figure",Z.FONT="font",Z.FOOTER="footer",Z.FOREIGN_OBJECT="foreignObject",Z.FORM="form",Z.FRAME="frame",Z.FRAMESET="frameset",Z.H1="h1",Z.H2="h2",Z.H3="h3",Z.H4="h4",Z.H5="h5",Z.H6="h6",Z.HEAD="head",Z.HEADER="header",Z.HGROUP="hgroup",Z.HR="hr",Z.HTML="html",Z.I="i",Z.IMG="img",Z.IMAGE="image",Z.INPUT="input",Z.IFRAME="iframe",Z.KEYGEN="keygen",Z.LABEL="label",Z.LI="li",Z.LINK="link",Z.LISTING="listing",Z.MAIN="main",Z.MALIGNMARK="malignmark",Z.MARQUEE="marquee",Z.MATH="math",Z.MENU="menu",Z.META="meta",Z.MGLYPH="mglyph",Z.MI="mi",Z.MO="mo",Z.MN="mn",Z.MS="ms",Z.MTEXT="mtext",Z.NAV="nav",Z.NOBR="nobr",Z.NOFRAMES="noframes",Z.NOEMBED="noembed",Z.NOSCRIPT="noscript",Z.OBJECT="object",Z.OL="ol",Z.OPTGROUP="optgroup",Z.OPTION="option",Z.P="p",Z.PARAM="param",Z.PLAINTEXT="plaintext",Z.PRE="pre",Z.RB="rb",Z.RP="rp",Z.RT="rt",Z.RTC="rtc",Z.RUBY="ruby",Z.S="s",Z.SCRIPT="script",Z.SEARCH="search",Z.SECTION="section",Z.SELECT="select",Z.SOURCE="source",Z.SMALL="small",Z.SPAN="span",Z.STRIKE="strike",Z.STRONG="strong",Z.STYLE="style",Z.SUB="sub",Z.SUMMARY="summary",Z.SUP="sup",Z.TABLE="table",Z.TBODY="tbody",Z.TEMPLATE="template",Z.TEXTAREA="textarea",Z.TFOOT="tfoot",Z.TD="td",Z.TH="th",Z.THEAD="thead",Z.TITLE="title",Z.TR="tr",Z.TRACK="track",Z.TT="tt",Z.U="u",Z.UL="ul",Z.SVG="svg",Z.VAR="var",Z.WBR="wbr",Z.XMP="xmp"})(B||(B={}));var K;(function(Z){Z[Z.UNKNOWN=0]="UNKNOWN",Z[Z.A=1]="A",Z[Z.ADDRESS=2]="ADDRESS",Z[Z.ANNOTATION_XML=3]="ANNOTATION_XML",Z[Z.APPLET=4]="APPLET",Z[Z.AREA=5]="AREA",Z[Z.ARTICLE=6]="ARTICLE",Z[Z.ASIDE=7]="ASIDE",Z[Z.B=8]="B",Z[Z.BASE=9]="BASE",Z[Z.BASEFONT=10]="BASEFONT",Z[Z.BGSOUND=11]="BGSOUND",Z[Z.BIG=12]="BIG",Z[Z.BLOCKQUOTE=13]="BLOCKQUOTE",Z[Z.BODY=14]="BODY",Z[Z.BR=15]="BR",Z[Z.BUTTON=16]="BUTTON",Z[Z.CAPTION=17]="CAPTION",Z[Z.CENTER=18]="CENTER",Z[Z.CODE=19]="CODE",Z[Z.COL=20]="COL",Z[Z.COLGROUP=21]="COLGROUP",Z[Z.DD=22]="DD",Z[Z.DESC=23]="DESC",Z[Z.DETAILS=24]="DETAILS",Z[Z.DIALOG=25]="DIALOG",Z[Z.DIR=26]="DIR",Z[Z.DIV=27]="DIV",Z[Z.DL=28]="DL",Z[Z.DT=29]="DT",Z[Z.EM=30]="EM",Z[Z.EMBED=31]="EMBED",Z[Z.FIELDSET=32]="FIELDSET",Z[Z.FIGCAPTION=33]="FIGCAPTION",Z[Z.FIGURE=34]="FIGURE",Z[Z.FONT=35]="FONT",Z[Z.FOOTER=36]="FOOTER",Z[Z.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",Z[Z.FORM=38]="FORM",Z[Z.FRAME=39]="FRAME",Z[Z.FRAMESET=40]="FRAMESET",Z[Z.H1=41]="H1",Z[Z.H2=42]="H2",Z[Z.H3=43]="H3",Z[Z.H4=44]="H4",Z[Z.H5=45]="H5",Z[Z.H6=46]="H6",Z[Z.HEAD=47]="HEAD",Z[Z.HEADER=48]="HEADER",Z[Z.HGROUP=49]="HGROUP",Z[Z.HR=50]="HR",Z[Z.HTML=51]="HTML",Z[Z.I=52]="I",Z[Z.IMG=53]="IMG",Z[Z.IMAGE=54]="IMAGE",Z[Z.INPUT=55]="INPUT",Z[Z.IFRAME=56]="IFRAME",Z[Z.KEYGEN=57]="KEYGEN",Z[Z.LABEL=58]="LABEL",Z[Z.LI=59]="LI",Z[Z.LINK=60]="LINK",Z[Z.LISTING=61]="LISTING",Z[Z.MAIN=62]="MAIN",Z[Z.MALIGNMARK=63]="MALIGNMARK",Z[Z.MARQUEE=64]="MARQUEE",Z[Z.MATH=65]="MATH",Z[Z.MENU=66]="MENU",Z[Z.META=67]="META",Z[Z.MGLYPH=68]="MGLYPH",Z[Z.MI=69]="MI",Z[Z.MO=70]="MO",Z[Z.MN=71]="MN",Z[Z.MS=72]="MS",Z[Z.MTEXT=73]="MTEXT",Z[Z.NAV=74]="NAV",Z[Z.NOBR=75]="NOBR",Z[Z.NOFRAMES=76]="NOFRAMES",Z[Z.NOEMBED=77]="NOEMBED",Z[Z.NOSCRIPT=78]="NOSCRIPT",Z[Z.OBJECT=79]="OBJECT",Z[Z.OL=80]="OL",Z[Z.OPTGROUP=81]="OPTGROUP",Z[Z.OPTION=82]="OPTION",Z[Z.P=83]="P",Z[Z.PARAM=84]="PARAM",Z[Z.PLAINTEXT=85]="PLAINTEXT",Z[Z.PRE=86]="PRE",Z[Z.RB=87]="RB",Z[Z.RP=88]="RP",Z[Z.RT=89]="RT",Z[Z.RTC=90]="RTC",Z[Z.RUBY=91]="RUBY",Z[Z.S=92]="S",Z[Z.SCRIPT=93]="SCRIPT",Z[Z.SEARCH=94]="SEARCH",Z[Z.SECTION=95]="SECTION",Z[Z.SELECT=96]="SELECT",Z[Z.SOURCE=97]="SOURCE",Z[Z.SMALL=98]="SMALL",Z[Z.SPAN=99]="SPAN",Z[Z.STRIKE=100]="STRIKE",Z[Z.STRONG=101]="STRONG",Z[Z.STYLE=102]="STYLE",Z[Z.SUB=103]="SUB",Z[Z.SUMMARY=104]="SUMMARY",Z[Z.SUP=105]="SUP",Z[Z.TABLE=106]="TABLE",Z[Z.TBODY=107]="TBODY",Z[Z.TEMPLATE=108]="TEMPLATE",Z[Z.TEXTAREA=109]="TEXTAREA",Z[Z.TFOOT=110]="TFOOT",Z[Z.TD=111]="TD",Z[Z.TH=112]="TH",Z[Z.THEAD=113]="THEAD",Z[Z.TITLE=114]="TITLE",Z[Z.TR=115]="TR",Z[Z.TRACK=116]="TRACK",Z[Z.TT=117]="TT",Z[Z.U=118]="U",Z[Z.UL=119]="UL",Z[Z.SVG=120]="SVG",Z[Z.VAR=121]="VAR",Z[Z.WBR=122]="WBR",Z[Z.XMP=123]="XMP"})(K||(K={}));var EZ=new Map([[B.A,K.A],[B.ADDRESS,K.ADDRESS],[B.ANNOTATION_XML,K.ANNOTATION_XML],[B.APPLET,K.APPLET],[B.AREA,K.AREA],[B.ARTICLE,K.ARTICLE],[B.ASIDE,K.ASIDE],[B.B,K.B],[B.BASE,K.BASE],[B.BASEFONT,K.BASEFONT],[B.BGSOUND,K.BGSOUND],[B.BIG,K.BIG],[B.BLOCKQUOTE,K.BLOCKQUOTE],[B.BODY,K.BODY],[B.BR,K.BR],[B.BUTTON,K.BUTTON],[B.CAPTION,K.CAPTION],[B.CENTER,K.CENTER],[B.CODE,K.CODE],[B.COL,K.COL],[B.COLGROUP,K.COLGROUP],[B.DD,K.DD],[B.DESC,K.DESC],[B.DETAILS,K.DETAILS],[B.DIALOG,K.DIALOG],[B.DIR,K.DIR],[B.DIV,K.DIV],[B.DL,K.DL],[B.DT,K.DT],[B.EM,K.EM],[B.EMBED,K.EMBED],[B.FIELDSET,K.FIELDSET],[B.FIGCAPTION,K.FIGCAPTION],[B.FIGURE,K.FIGURE],[B.FONT,K.FONT],[B.FOOTER,K.FOOTER],[B.FOREIGN_OBJECT,K.FOREIGN_OBJECT],[B.FORM,K.FORM],[B.FRAME,K.FRAME],[B.FRAMESET,K.FRAMESET],[B.H1,K.H1],[B.H2,K.H2],[B.H3,K.H3],[B.H4,K.H4],[B.H5,K.H5],[B.H6,K.H6],[B.HEAD,K.HEAD],[B.HEADER,K.HEADER],[B.HGROUP,K.HGROUP],[B.HR,K.HR],[B.HTML,K.HTML],[B.I,K.I],[B.IMG,K.IMG],[B.IMAGE,K.IMAGE],[B.INPUT,K.INPUT],[B.IFRAME,K.IFRAME],[B.KEYGEN,K.KEYGEN],[B.LABEL,K.LABEL],[B.LI,K.LI],[B.LINK,K.LINK],[B.LISTING,K.LISTING],[B.MAIN,K.MAIN],[B.MALIGNMARK,K.MALIGNMARK],[B.MARQUEE,K.MARQUEE],[B.MATH,K.MATH],[B.MENU,K.MENU],[B.META,K.META],[B.MGLYPH,K.MGLYPH],[B.MI,K.MI],[B.MO,K.MO],[B.MN,K.MN],[B.MS,K.MS],[B.MTEXT,K.MTEXT],[B.NAV,K.NAV],[B.NOBR,K.NOBR],[B.NOFRAMES,K.NOFRAMES],[B.NOEMBED,K.NOEMBED],[B.NOSCRIPT,K.NOSCRIPT],[B.OBJECT,K.OBJECT],[B.OL,K.OL],[B.OPTGROUP,K.OPTGROUP],[B.OPTION,K.OPTION],[B.P,K.P],[B.PARAM,K.PARAM],[B.PLAINTEXT,K.PLAINTEXT],[B.PRE,K.PRE],[B.RB,K.RB],[B.RP,K.RP],[B.RT,K.RT],[B.RTC,K.RTC],[B.RUBY,K.RUBY],[B.S,K.S],[B.SCRIPT,K.SCRIPT],[B.SEARCH,K.SEARCH],[B.SECTION,K.SECTION],[B.SELECT,K.SELECT],[B.SOURCE,K.SOURCE],[B.SMALL,K.SMALL],[B.SPAN,K.SPAN],[B.STRIKE,K.STRIKE],[B.STRONG,K.STRONG],[B.STYLE,K.STYLE],[B.SUB,K.SUB],[B.SUMMARY,K.SUMMARY],[B.SUP,K.SUP],[B.TABLE,K.TABLE],[B.TBODY,K.TBODY],[B.TEMPLATE,K.TEMPLATE],[B.TEXTAREA,K.TEXTAREA],[B.TFOOT,K.TFOOT],[B.TD,K.TD],[B.TH,K.TH],[B.THEAD,K.THEAD],[B.TITLE,K.TITLE],[B.TR,K.TR],[B.TRACK,K.TRACK],[B.TT,K.TT],[B.U,K.U],[B.UL,K.UL],[B.SVG,K.SVG],[B.VAR,K.VAR],[B.WBR,K.WBR],[B.XMP,K.XMP]]);function _0(Z){var Q;return(Q=EZ.get(Z))!==null&&Q!==void 0?Q:K.UNKNOWN}var O=K,m8={[P.HTML]:new Set([O.ADDRESS,O.APPLET,O.AREA,O.ARTICLE,O.ASIDE,O.BASE,O.BASEFONT,O.BGSOUND,O.BLOCKQUOTE,O.BODY,O.BR,O.BUTTON,O.CAPTION,O.CENTER,O.COL,O.COLGROUP,O.DD,O.DETAILS,O.DIR,O.DIV,O.DL,O.DT,O.EMBED,O.FIELDSET,O.FIGCAPTION,O.FIGURE,O.FOOTER,O.FORM,O.FRAME,O.FRAMESET,O.H1,O.H2,O.H3,O.H4,O.H5,O.H6,O.HEAD,O.HEADER,O.HGROUP,O.HR,O.HTML,O.IFRAME,O.IMG,O.INPUT,O.LI,O.LINK,O.LISTING,O.MAIN,O.MARQUEE,O.MENU,O.META,O.NAV,O.NOEMBED,O.NOFRAMES,O.NOSCRIPT,O.OBJECT,O.OL,O.P,O.PARAM,O.PLAINTEXT,O.PRE,O.SCRIPT,O.SECTION,O.SELECT,O.SOURCE,O.STYLE,O.SUMMARY,O.TABLE,O.TBODY,O.TD,O.TEMPLATE,O.TEXTAREA,O.TFOOT,O.TH,O.THEAD,O.TITLE,O.TR,O.TRACK,O.UL,O.WBR,O.XMP]),[P.MATHML]:new Set([O.MI,O.MO,O.MN,O.MS,O.MTEXT,O.ANNOTATION_XML]),[P.SVG]:new Set([O.TITLE,O.FOREIGN_OBJECT,O.DESC]),[P.XLINK]:new Set,[P.XML]:new Set,[P.XMLNS]:new Set},Y1=new Set([O.H1,O.H2,O.H3,O.H4,O.H5,O.H6]),mZ=new Set([B.STYLE,B.SCRIPT,B.XMP,B.IFRAME,B.NOEMBED,B.NOFRAMES,B.PLAINTEXT]);function k8(Z,Q){return mZ.has(Z)||Q&&Z===B.NOSCRIPT}var j;(function(Z){Z[Z.DATA=0]="DATA",Z[Z.RCDATA=1]="RCDATA",Z[Z.RAWTEXT=2]="RAWTEXT",Z[Z.SCRIPT_DATA=3]="SCRIPT_DATA",Z[Z.PLAINTEXT=4]="PLAINTEXT",Z[Z.TAG_OPEN=5]="TAG_OPEN",Z[Z.END_TAG_OPEN=6]="END_TAG_OPEN",Z[Z.TAG_NAME=7]="TAG_NAME",Z[Z.RCDATA_LESS_THAN_SIGN=8]="RCDATA_LESS_THAN_SIGN",Z[Z.RCDATA_END_TAG_OPEN=9]="RCDATA_END_TAG_OPEN",Z[Z.RCDATA_END_TAG_NAME=10]="RCDATA_END_TAG_NAME",Z[Z.RAWTEXT_LESS_THAN_SIGN=11]="RAWTEXT_LESS_THAN_SIGN",Z[Z.RAWTEXT_END_TAG_OPEN=12]="RAWTEXT_END_TAG_OPEN",Z[Z.RAWTEXT_END_TAG_NAME=13]="RAWTEXT_END_TAG_NAME",Z[Z.SCRIPT_DATA_LESS_THAN_SIGN=14]="SCRIPT_DATA_LESS_THAN_SIGN",Z[Z.SCRIPT_DATA_END_TAG_OPEN=15]="SCRIPT_DATA_END_TAG_OPEN",Z[Z.SCRIPT_DATA_END_TAG_NAME=16]="SCRIPT_DATA_END_TAG_NAME",Z[Z.SCRIPT_DATA_ESCAPE_START=17]="SCRIPT_DATA_ESCAPE_START",Z[Z.SCRIPT_DATA_ESCAPE_START_DASH=18]="SCRIPT_DATA_ESCAPE_START_DASH",Z[Z.SCRIPT_DATA_ESCAPED=19]="SCRIPT_DATA_ESCAPED",Z[Z.SCRIPT_DATA_ESCAPED_DASH=20]="SCRIPT_DATA_ESCAPED_DASH",Z[Z.SCRIPT_DATA_ESCAPED_DASH_DASH=21]="SCRIPT_DATA_ESCAPED_DASH_DASH",Z[Z.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN",Z[Z.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]="SCRIPT_DATA_ESCAPED_END_TAG_OPEN",Z[Z.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]="SCRIPT_DATA_ESCAPED_END_TAG_NAME",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]="SCRIPT_DATA_DOUBLE_ESCAPE_START",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPED=26]="SCRIPT_DATA_DOUBLE_ESCAPED",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]="SCRIPT_DATA_DOUBLE_ESCAPE_END",Z[Z.BEFORE_ATTRIBUTE_NAME=31]="BEFORE_ATTRIBUTE_NAME",Z[Z.ATTRIBUTE_NAME=32]="ATTRIBUTE_NAME",Z[Z.AFTER_ATTRIBUTE_NAME=33]="AFTER_ATTRIBUTE_NAME",Z[Z.BEFORE_ATTRIBUTE_VALUE=34]="BEFORE_ATTRIBUTE_VALUE",Z[Z.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]="ATTRIBUTE_VALUE_DOUBLE_QUOTED",Z[Z.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]="ATTRIBUTE_VALUE_SINGLE_QUOTED",Z[Z.ATTRIBUTE_VALUE_UNQUOTED=37]="ATTRIBUTE_VALUE_UNQUOTED",Z[Z.AFTER_ATTRIBUTE_VALUE_QUOTED=38]="AFTER_ATTRIBUTE_VALUE_QUOTED",Z[Z.SELF_CLOSING_START_TAG=39]="SELF_CLOSING_START_TAG",Z[Z.BOGUS_COMMENT=40]="BOGUS_COMMENT",Z[Z.MARKUP_DECLARATION_OPEN=41]="MARKUP_DECLARATION_OPEN",Z[Z.COMMENT_START=42]="COMMENT_START",Z[Z.COMMENT_START_DASH=43]="COMMENT_START_DASH",Z[Z.COMMENT=44]="COMMENT",Z[Z.COMMENT_LESS_THAN_SIGN=45]="COMMENT_LESS_THAN_SIGN",Z[Z.COMMENT_LESS_THAN_SIGN_BANG=46]="COMMENT_LESS_THAN_SIGN_BANG",Z[Z.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]="COMMENT_LESS_THAN_SIGN_BANG_DASH",Z[Z.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH",Z[Z.COMMENT_END_DASH=49]="COMMENT_END_DASH",Z[Z.COMMENT_END=50]="COMMENT_END",Z[Z.COMMENT_END_BANG=51]="COMMENT_END_BANG",Z[Z.DOCTYPE=52]="DOCTYPE",Z[Z.BEFORE_DOCTYPE_NAME=53]="BEFORE_DOCTYPE_NAME",Z[Z.DOCTYPE_NAME=54]="DOCTYPE_NAME",Z[Z.AFTER_DOCTYPE_NAME=55]="AFTER_DOCTYPE_NAME",Z[Z.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]="AFTER_DOCTYPE_PUBLIC_KEYWORD",Z[Z.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER",Z[Z.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED",Z[Z.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED",Z[Z.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]="AFTER_DOCTYPE_PUBLIC_IDENTIFIER",Z[Z.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS",Z[Z.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]="AFTER_DOCTYPE_SYSTEM_KEYWORD",Z[Z.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER",Z[Z.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED",Z[Z.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED",Z[Z.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]="AFTER_DOCTYPE_SYSTEM_IDENTIFIER",Z[Z.BOGUS_DOCTYPE=67]="BOGUS_DOCTYPE",Z[Z.CDATA_SECTION=68]="CDATA_SECTION",Z[Z.CDATA_SECTION_BRACKET=69]="CDATA_SECTION_BRACKET",Z[Z.CDATA_SECTION_END=70]="CDATA_SECTION_END",Z[Z.CHARACTER_REFERENCE=71]="CHARACTER_REFERENCE",Z[Z.AMBIGUOUS_AMPERSAND=72]="AMBIGUOUS_AMPERSAND"})(j||(j={}));var n={DATA:j.DATA,RCDATA:j.RCDATA,RAWTEXT:j.RAWTEXT,SCRIPT_DATA:j.SCRIPT_DATA,PLAINTEXT:j.PLAINTEXT,CDATA_SECTION:j.CDATA_SECTION};function _Z(Z){return Z>=V.DIGIT_0&&Z<=V.DIGIT_9}function W1(Z){return Z>=V.LATIN_CAPITAL_A&&Z<=V.LATIN_CAPITAL_Z}function SZ(Z){return Z>=V.LATIN_SMALL_A&&Z<=V.LATIN_SMALL_Z}function f0(Z){return SZ(Z)||W1(Z)}function _8(Z){return f0(Z)||_Z(Z)}function n1(Z){return Z+32}function I8(Z){return Z===V.SPACE||Z===V.LINE_FEED||Z===V.TABULATION||Z===V.FORM_FEED}function S8(Z){return I8(Z)||Z===V.SOLIDUS||Z===V.GREATER_THAN_SIGN}function IZ(Z){if(Z===V.NULL)return F.nullCharacterReference;else if(Z>1114111)return F.characterReferenceOutsideUnicodeRange;else if(p1(Z))return F.surrogateCharacterReference;else if(r1(Z))return F.noncharacterCharacterReference;else if(s1(Z)||Z===V.CARRIAGE_RETURN)return F.controlCharacterReference;return null}class t1{constructor(Z,Q){this.options=Z,this.handler=Q,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=j.DATA,this.returnState=j.DATA,this.entityStartPos=0,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new Y6(Q),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new j6(W6,(X,J)=>{this.preprocessor.pos=this.entityStartPos+J-1,this._flushCodePointConsumedAsCharacterReference(X)},Q.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(F.missingSemicolonAfterCharacterReference,1)},absenceOfDigitsInNumericCharacterReference:(X)=>{this._err(F.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+X)},validateNumericCharacterReference:(X)=>{let J=IZ(X);if(J)this._err(J,1)}}:void 0)}_err(Z,Q=0){var X,J;(J=(X=this.handler).onParseError)===null||J===void 0||J.call(X,this.preprocessor.getError(Z,Q))}getCurrentLocation(Z){if(!this.options.sourceCodeLocationInfo)return null;return{startLine:this.preprocessor.line,startCol:this.preprocessor.col-Z,startOffset:this.preprocessor.offset-Z,endLine:-1,endCol:-1,endOffset:-1}}_runParsingLoop(){if(this.inLoop)return;this.inLoop=!0;while(this.active&&!this.paused){this.consumedAfterSnapshot=0;let Z=this._consume();if(!this._ensureHibernation())this._callState(Z)}this.inLoop=!1}pause(){this.paused=!0}resume(Z){if(!this.paused)throw Error("Parser was already resumed");if(this.paused=!1,this.inLoop)return;if(this._runParsingLoop(),!this.paused)Z===null||Z===void 0||Z()}write(Z,Q,X){if(this.active=!0,this.preprocessor.write(Z,Q),this._runParsingLoop(),!this.paused)X===null||X===void 0||X()}insertHtmlAtCurrentPos(Z){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(Z),this._runParsingLoop()}_ensureHibernation(){if(this.preprocessor.endOfChunkHit)return this.preprocessor.retreat(this.consumedAfterSnapshot),this.consumedAfterSnapshot=0,this.active=!1,!0;return!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_advanceBy(Z){this.consumedAfterSnapshot+=Z;for(let Q=0;Q<Z;Q++)this.preprocessor.advance()}_consumeSequenceIfMatch(Z,Q){if(this.preprocessor.startsWith(Z,Q))return this._advanceBy(Z.length-1),!0;return!1}_createStartTagToken(){this.currentToken={type:_.START_TAG,tagName:"",tagID:K.UNKNOWN,selfClosing:!1,ackSelfClosing:!1,attrs:[],location:this.getCurrentLocation(1)}}_createEndTagToken(){this.currentToken={type:_.END_TAG,tagName:"",tagID:K.UNKNOWN,selfClosing:!1,ackSelfClosing:!1,attrs:[],location:this.getCurrentLocation(2)}}_createCommentToken(Z){this.currentToken={type:_.COMMENT,data:"",location:this.getCurrentLocation(Z)}}_createDoctypeToken(Z){this.currentToken={type:_.DOCTYPE,name:Z,forceQuirks:!1,publicId:null,systemId:null,location:this.currentLocation}}_createCharacterToken(Z,Q){this.currentCharacterToken={type:Z,chars:Q,location:this.currentLocation}}_createAttr(Z){this.currentAttr={name:Z,value:""},this.currentLocation=this.getCurrentLocation(0)}_leaveAttrName(){var Z,Q;let X=this.currentToken;if(o1(X,this.currentAttr.name)===null){if(X.attrs.push(this.currentAttr),X.location&&this.currentLocation){let J=(Z=(Q=X.location).attrs)!==null&&Z!==void 0?Z:Q.attrs=Object.create(null);J[this.currentAttr.name]=this.currentLocation,this._leaveAttrValue()}}else this._err(F.duplicateAttribute)}_leaveAttrValue(){if(this.currentLocation)this.currentLocation.endLine=this.preprocessor.line,this.currentLocation.endCol=this.preprocessor.col,this.currentLocation.endOffset=this.preprocessor.offset}prepareToken(Z){if(this._emitCurrentCharacterToken(Z.location),this.currentToken=null,Z.location)Z.location.endLine=this.preprocessor.line,Z.location.endCol=this.preprocessor.col+1,Z.location.endOffset=this.preprocessor.offset+1;this.currentLocation=this.getCurrentLocation(-1)}emitCurrentTagToken(){let Z=this.currentToken;if(this.prepareToken(Z),Z.tagID=_0(Z.tagName),Z.type===_.START_TAG)this.lastStartTagName=Z.tagName,this.handler.onStartTag(Z);else{if(Z.attrs.length>0)this._err(F.endTagWithAttributes);if(Z.selfClosing)this._err(F.endTagWithTrailingSolidus);this.handler.onEndTag(Z)}this.preprocessor.dropParsedChunk()}emitCurrentComment(Z){this.prepareToken(Z),this.handler.onComment(Z),this.preprocessor.dropParsedChunk()}emitCurrentDoctype(Z){this.prepareToken(Z),this.handler.onDoctype(Z),this.preprocessor.dropParsedChunk()}_emitCurrentCharacterToken(Z){if(this.currentCharacterToken){if(Z&&this.currentCharacterToken.location)this.currentCharacterToken.location.endLine=Z.startLine,this.currentCharacterToken.location.endCol=Z.startCol,this.currentCharacterToken.location.endOffset=Z.startOffset;switch(this.currentCharacterToken.type){case _.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case _.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case _.WHITESPACE_CHARACTER:{this.handler.onWhitespaceCharacter(this.currentCharacterToken);break}}this.currentCharacterToken=null}}_emitEOFToken(){let Z=this.getCurrentLocation(0);if(Z)Z.endLine=Z.startLine,Z.endCol=Z.startCol,Z.endOffset=Z.startOffset;this._emitCurrentCharacterToken(Z),this.handler.onEof({type:_.EOF,location:Z}),this.active=!1}_appendCharToCurrentCharacterToken(Z,Q){if(this.currentCharacterToken)if(this.currentCharacterToken.type===Z){this.currentCharacterToken.chars+=Q;return}else this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();this._createCharacterToken(Z,Q)}_emitCodePoint(Z){let Q=I8(Z)?_.WHITESPACE_CHARACTER:Z===V.NULL?_.NULL_CHARACTER:_.CHARACTER;this._appendCharToCurrentCharacterToken(Q,Z<65536?String.fromCharCode(Z):String.fromCodePoint(Z))}_emitChars(Z){this._appendCharToCurrentCharacterToken(_.CHARACTER,Z)}_startCharacterReference(){this.returnState=this.state,this.state=j.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?F0.Attribute:F0.Legacy)}_isCharacterReferenceInAttribute(){return this.returnState===j.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===j.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===j.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(Z){if(this._isCharacterReferenceInAttribute())this.currentAttr.value+=String.fromCodePoint(Z);else this._emitCodePoint(Z)}_callState(Z){switch(this.state){case j.DATA:{this._stateData(Z);break}case j.RCDATA:{this._stateRcdata(Z);break}case j.RAWTEXT:{this._stateRawtext(Z);break}case j.SCRIPT_DATA:{this._stateScriptData(Z);break}case j.PLAINTEXT:{this._statePlaintext(Z);break}case j.TAG_OPEN:{this._stateTagOpen(Z);break}case j.END_TAG_OPEN:{this._stateEndTagOpen(Z);break}case j.TAG_NAME:{this._stateTagName(Z);break}case j.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(Z);break}case j.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(Z);break}case j.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(Z);break}case j.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(Z);break}case j.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(Z);break}case j.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(Z);break}case j.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(Z);break}case j.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(Z);break}case j.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(Z);break}case j.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(Z);break}case j.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(Z);break}case j.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(Z);break}case j.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(Z);break}case j.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(Z);break}case j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(Z);break}case j.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(Z);break}case j.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(Z);break}case j.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(Z);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(Z);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(Z);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(Z);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(Z);break}case j.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(Z);break}case j.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(Z);break}case j.ATTRIBUTE_NAME:{this._stateAttributeName(Z);break}case j.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(Z);break}case j.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(Z);break}case j.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(Z);break}case j.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(Z);break}case j.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(Z);break}case j.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(Z);break}case j.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(Z);break}case j.BOGUS_COMMENT:{this._stateBogusComment(Z);break}case j.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(Z);break}case j.COMMENT_START:{this._stateCommentStart(Z);break}case j.COMMENT_START_DASH:{this._stateCommentStartDash(Z);break}case j.COMMENT:{this._stateComment(Z);break}case j.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(Z);break}case j.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(Z);break}case j.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(Z);break}case j.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(Z);break}case j.COMMENT_END_DASH:{this._stateCommentEndDash(Z);break}case j.COMMENT_END:{this._stateCommentEnd(Z);break}case j.COMMENT_END_BANG:{this._stateCommentEndBang(Z);break}case j.DOCTYPE:{this._stateDoctype(Z);break}case j.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(Z);break}case j.DOCTYPE_NAME:{this._stateDoctypeName(Z);break}case j.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(Z);break}case j.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(Z);break}case j.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(Z);break}case j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(Z);break}case j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(Z);break}case j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(Z);break}case j.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(Z);break}case j.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(Z);break}case j.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(Z);break}case j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(Z);break}case j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(Z);break}case j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(Z);break}case j.BOGUS_DOCTYPE:{this._stateBogusDoctype(Z);break}case j.CDATA_SECTION:{this._stateCdataSection(Z);break}case j.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(Z);break}case j.CDATA_SECTION_END:{this._stateCdataSectionEnd(Z);break}case j.CHARACTER_REFERENCE:{this._stateCharacterReference();break}case j.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(Z);break}default:throw Error("Unknown state")}}_stateData(Z){switch(Z){case V.LESS_THAN_SIGN:{this.state=j.TAG_OPEN;break}case V.AMPERSAND:{this._startCharacterReference();break}case V.NULL:{this._err(F.unexpectedNullCharacter),this._emitCodePoint(Z);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateRcdata(Z){switch(Z){case V.AMPERSAND:{this._startCharacterReference();break}case V.LESS_THAN_SIGN:{this.state=j.RCDATA_LESS_THAN_SIGN;break}case V.NULL:{this._err(F.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateRawtext(Z){switch(Z){case V.LESS_THAN_SIGN:{this.state=j.RAWTEXT_LESS_THAN_SIGN;break}case V.NULL:{this._err(F.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateScriptData(Z){switch(Z){case V.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_LESS_THAN_SIGN;break}case V.NULL:{this._err(F.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_statePlaintext(Z){switch(Z){case V.NULL:{this._err(F.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateTagOpen(Z){if(f0(Z))this._createStartTagToken(),this.state=j.TAG_NAME,this._stateTagName(Z);else switch(Z){case V.EXCLAMATION_MARK:{this.state=j.MARKUP_DECLARATION_OPEN;break}case V.SOLIDUS:{this.state=j.END_TAG_OPEN;break}case V.QUESTION_MARK:{this._err(F.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=j.BOGUS_COMMENT,this._stateBogusComment(Z);break}case V.EOF:{this._err(F.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(F.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=j.DATA,this._stateData(Z)}}_stateEndTagOpen(Z){if(f0(Z))this._createEndTagToken(),this.state=j.TAG_NAME,this._stateTagName(Z);else switch(Z){case V.GREATER_THAN_SIGN:{this._err(F.missingEndTagName),this.state=j.DATA;break}case V.EOF:{this._err(F.eofBeforeTagName),this._emitChars("</"),this._emitEOFToken();break}default:this._err(F.invalidFirstCharacterOfTagName),this._createCommentToken(2),this.state=j.BOGUS_COMMENT,this._stateBogusComment(Z)}}_stateTagName(Z){let Q=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=j.BEFORE_ATTRIBUTE_NAME;break}case V.SOLIDUS:{this.state=j.SELF_CLOSING_START_TAG;break}case V.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentTagToken();break}case V.NULL:{this._err(F.unexpectedNullCharacter),Q.tagName+=u;break}case V.EOF:{this._err(F.eofInTag),this._emitEOFToken();break}default:Q.tagName+=String.fromCodePoint(W1(Z)?n1(Z):Z)}}_stateRcdataLessThanSign(Z){if(Z===V.SOLIDUS)this.state=j.RCDATA_END_TAG_OPEN;else this._emitChars("<"),this.state=j.RCDATA,this._stateRcdata(Z)}_stateRcdataEndTagOpen(Z){if(f0(Z))this.state=j.RCDATA_END_TAG_NAME,this._stateRcdataEndTagName(Z);else this._emitChars("</"),this.state=j.RCDATA,this._stateRcdata(Z)}handleSpecialEndTag(Z){if(!this.preprocessor.startsWith(this.lastStartTagName,!1))return!this._ensureHibernation();this._createEndTagToken();let Q=this.currentToken;switch(Q.tagName=this.lastStartTagName,this.preprocessor.peek(this.lastStartTagName.length)){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:return this._advanceBy(this.lastStartTagName.length),this.state=j.BEFORE_ATTRIBUTE_NAME,!1;case V.SOLIDUS:return this._advanceBy(this.lastStartTagName.length),this.state=j.SELF_CLOSING_START_TAG,!1;case V.GREATER_THAN_SIGN:return this._advanceBy(this.lastStartTagName.length),this.emitCurrentTagToken(),this.state=j.DATA,!1;default:return!this._ensureHibernation()}}_stateRcdataEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=j.RCDATA,this._stateRcdata(Z)}_stateRawtextLessThanSign(Z){if(Z===V.SOLIDUS)this.state=j.RAWTEXT_END_TAG_OPEN;else this._emitChars("<"),this.state=j.RAWTEXT,this._stateRawtext(Z)}_stateRawtextEndTagOpen(Z){if(f0(Z))this.state=j.RAWTEXT_END_TAG_NAME,this._stateRawtextEndTagName(Z);else this._emitChars("</"),this.state=j.RAWTEXT,this._stateRawtext(Z)}_stateRawtextEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=j.RAWTEXT,this._stateRawtext(Z)}_stateScriptDataLessThanSign(Z){switch(Z){case V.SOLIDUS:{this.state=j.SCRIPT_DATA_END_TAG_OPEN;break}case V.EXCLAMATION_MARK:{this.state=j.SCRIPT_DATA_ESCAPE_START,this._emitChars("<!");break}default:this._emitChars("<"),this.state=j.SCRIPT_DATA,this._stateScriptData(Z)}}_stateScriptDataEndTagOpen(Z){if(f0(Z))this.state=j.SCRIPT_DATA_END_TAG_NAME,this._stateScriptDataEndTagName(Z);else this._emitChars("</"),this.state=j.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=j.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEscapeStart(Z){if(Z===V.HYPHEN_MINUS)this.state=j.SCRIPT_DATA_ESCAPE_START_DASH,this._emitChars("-");else this.state=j.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEscapeStartDash(Z){if(Z===V.HYPHEN_MINUS)this.state=j.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");else this.state=j.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEscaped(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_ESCAPED_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case V.NULL:{this._err(F.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._err(F.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateScriptDataEscapedDash(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case V.NULL:{this._err(F.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_ESCAPED,this._emitChars(u);break}case V.EOF:{this._err(F.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataEscapedDashDash(Z){switch(Z){case V.HYPHEN_MINUS:{this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case V.GREATER_THAN_SIGN:{this.state=j.SCRIPT_DATA,this._emitChars(">");break}case V.NULL:{this._err(F.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_ESCAPED,this._emitChars(u);break}case V.EOF:{this._err(F.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataEscapedLessThanSign(Z){if(Z===V.SOLIDUS)this.state=j.SCRIPT_DATA_ESCAPED_END_TAG_OPEN;else if(f0(Z))this._emitChars("<"),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(Z);else this._emitChars("<"),this.state=j.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataEscapedEndTagOpen(Z){if(f0(Z))this.state=j.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(Z);else this._emitChars("</"),this.state=j.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataEscapedEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=j.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataDoubleEscapeStart(Z){if(this.preprocessor.startsWith(e.SCRIPT,!1)&&S8(this.preprocessor.peek(e.SCRIPT.length))){this._emitCodePoint(Z);for(let Q=0;Q<e.SCRIPT.length;Q++)this._emitCodePoint(this._consume());this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED}else if(!this._ensureHibernation())this.state=j.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataDoubleEscaped(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case V.NULL:{this._err(F.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._err(F.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateScriptDataDoubleEscapedDash(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case V.NULL:{this._err(F.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(u);break}case V.EOF:{this._err(F.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataDoubleEscapedDashDash(Z){switch(Z){case V.HYPHEN_MINUS:{this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case V.GREATER_THAN_SIGN:{this.state=j.SCRIPT_DATA,this._emitChars(">");break}case V.NULL:{this._err(F.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(u);break}case V.EOF:{this._err(F.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataDoubleEscapedLessThanSign(Z){if(Z===V.SOLIDUS)this.state=j.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/");else this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(Z)}_stateScriptDataDoubleEscapeEnd(Z){if(this.preprocessor.startsWith(e.SCRIPT,!1)&&S8(this.preprocessor.peek(e.SCRIPT.length))){this._emitCodePoint(Z);for(let Q=0;Q<e.SCRIPT.length;Q++)this._emitCodePoint(this._consume());this.state=j.SCRIPT_DATA_ESCAPED}else if(!this._ensureHibernation())this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(Z)}_stateBeforeAttributeName(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.SOLIDUS:case V.GREATER_THAN_SIGN:case V.EOF:{this.state=j.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(Z);break}case V.EQUALS_SIGN:{this._err(F.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state=j.ATTRIBUTE_NAME;break}default:this._createAttr(""),this.state=j.ATTRIBUTE_NAME,this._stateAttributeName(Z)}}_stateAttributeName(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:case V.SOLIDUS:case V.GREATER_THAN_SIGN:case V.EOF:{this._leaveAttrName(),this.state=j.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(Z);break}case V.EQUALS_SIGN:{this._leaveAttrName(),this.state=j.BEFORE_ATTRIBUTE_VALUE;break}case V.QUOTATION_MARK:case V.APOSTROPHE:case V.LESS_THAN_SIGN:{this._err(F.unexpectedCharacterInAttributeName),this.currentAttr.name+=String.fromCodePoint(Z);break}case V.NULL:{this._err(F.unexpectedNullCharacter),this.currentAttr.name+=u;break}default:this.currentAttr.name+=String.fromCodePoint(W1(Z)?n1(Z):Z)}}_stateAfterAttributeName(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.SOLIDUS:{this.state=j.SELF_CLOSING_START_TAG;break}case V.EQUALS_SIGN:{this.state=j.BEFORE_ATTRIBUTE_VALUE;break}case V.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentTagToken();break}case V.EOF:{this._err(F.eofInTag),this._emitEOFToken();break}default:this._createAttr(""),this.state=j.ATTRIBUTE_NAME,this._stateAttributeName(Z)}}_stateBeforeAttributeValue(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.QUOTATION_MARK:{this.state=j.ATTRIBUTE_VALUE_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this.state=j.ATTRIBUTE_VALUE_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(F.missingAttributeValue),this.state=j.DATA,this.emitCurrentTagToken();break}default:this.state=j.ATTRIBUTE_VALUE_UNQUOTED,this._stateAttributeValueUnquoted(Z)}}_stateAttributeValueDoubleQuoted(Z){switch(Z){case V.QUOTATION_MARK:{this.state=j.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case V.AMPERSAND:{this._startCharacterReference();break}case V.NULL:{this._err(F.unexpectedNullCharacter),this.currentAttr.value+=u;break}case V.EOF:{this._err(F.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(Z)}}_stateAttributeValueSingleQuoted(Z){switch(Z){case V.APOSTROPHE:{this.state=j.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case V.AMPERSAND:{this._startCharacterReference();break}case V.NULL:{this._err(F.unexpectedNullCharacter),this.currentAttr.value+=u;break}case V.EOF:{this._err(F.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(Z)}}_stateAttributeValueUnquoted(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this._leaveAttrValue(),this.state=j.BEFORE_ATTRIBUTE_NAME;break}case V.AMPERSAND:{this._startCharacterReference();break}case V.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=j.DATA,this.emitCurrentTagToken();break}case V.NULL:{this._err(F.unexpectedNullCharacter),this.currentAttr.value+=u;break}case V.QUOTATION_MARK:case V.APOSTROPHE:case V.LESS_THAN_SIGN:case V.EQUALS_SIGN:case V.GRAVE_ACCENT:{this._err(F.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=String.fromCodePoint(Z);break}case V.EOF:{this._err(F.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(Z)}}_stateAfterAttributeValueQuoted(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this._leaveAttrValue(),this.state=j.BEFORE_ATTRIBUTE_NAME;break}case V.SOLIDUS:{this._leaveAttrValue(),this.state=j.SELF_CLOSING_START_TAG;break}case V.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=j.DATA,this.emitCurrentTagToken();break}case V.EOF:{this._err(F.eofInTag),this._emitEOFToken();break}default:this._err(F.missingWhitespaceBetweenAttributes),this.state=j.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(Z)}}_stateSelfClosingStartTag(Z){switch(Z){case V.GREATER_THAN_SIGN:{let Q=this.currentToken;Q.selfClosing=!0,this.state=j.DATA,this.emitCurrentTagToken();break}case V.EOF:{this._err(F.eofInTag),this._emitEOFToken();break}default:this._err(F.unexpectedSolidusInTag),this.state=j.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(Z)}}_stateBogusComment(Z){let Q=this.currentToken;switch(Z){case V.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentComment(Q);break}case V.EOF:{this.emitCurrentComment(Q),this._emitEOFToken();break}case V.NULL:{this._err(F.unexpectedNullCharacter),Q.data+=u;break}default:Q.data+=String.fromCodePoint(Z)}}_stateMarkupDeclarationOpen(Z){if(this._consumeSequenceIfMatch(e.DASH_DASH,!0))this._createCommentToken(e.DASH_DASH.length+1),this.state=j.COMMENT_START;else if(this._consumeSequenceIfMatch(e.DOCTYPE,!1))this.currentLocation=this.getCurrentLocation(e.DOCTYPE.length+1),this.state=j.DOCTYPE;else if(this._consumeSequenceIfMatch(e.CDATA_START,!0))if(this.inForeignNode)this.state=j.CDATA_SECTION;else this._err(F.cdataInHtmlContent),this._createCommentToken(e.CDATA_START.length+1),this.currentToken.data="[CDATA[",this.state=j.BOGUS_COMMENT;else if(!this._ensureHibernation())this._err(F.incorrectlyOpenedComment),this._createCommentToken(2),this.state=j.BOGUS_COMMENT,this._stateBogusComment(Z)}_stateCommentStart(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=j.COMMENT_START_DASH;break}case V.GREATER_THAN_SIGN:{this._err(F.abruptClosingOfEmptyComment),this.state=j.DATA;let Q=this.currentToken;this.emitCurrentComment(Q);break}default:this.state=j.COMMENT,this._stateComment(Z)}}_stateCommentStartDash(Z){let Q=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{this.state=j.COMMENT_END;break}case V.GREATER_THAN_SIGN:{this._err(F.abruptClosingOfEmptyComment),this.state=j.DATA,this.emitCurrentComment(Q);break}case V.EOF:{this._err(F.eofInComment),this.emitCurrentComment(Q),this._emitEOFToken();break}default:Q.data+="-",this.state=j.COMMENT,this._stateComment(Z)}}_stateComment(Z){let Q=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{this.state=j.COMMENT_END_DASH;break}case V.LESS_THAN_SIGN:{Q.data+="<",this.state=j.COMMENT_LESS_THAN_SIGN;break}case V.NULL:{this._err(F.unexpectedNullCharacter),Q.data+=u;break}case V.EOF:{this._err(F.eofInComment),this.emitCurrentComment(Q),this._emitEOFToken();break}default:Q.data+=String.fromCodePoint(Z)}}_stateCommentLessThanSign(Z){let Q=this.currentToken;switch(Z){case V.EXCLAMATION_MARK:{Q.data+="!",this.state=j.COMMENT_LESS_THAN_SIGN_BANG;break}case V.LESS_THAN_SIGN:{Q.data+="<";break}default:this.state=j.COMMENT,this._stateComment(Z)}}_stateCommentLessThanSignBang(Z){if(Z===V.HYPHEN_MINUS)this.state=j.COMMENT_LESS_THAN_SIGN_BANG_DASH;else this.state=j.COMMENT,this._stateComment(Z)}_stateCommentLessThanSignBangDash(Z){if(Z===V.HYPHEN_MINUS)this.state=j.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH;else this.state=j.COMMENT_END_DASH,this._stateCommentEndDash(Z)}_stateCommentLessThanSignBangDashDash(Z){if(Z!==V.GREATER_THAN_SIGN&&Z!==V.EOF)this._err(F.nestedComment);this.state=j.COMMENT_END,this._stateCommentEnd(Z)}_stateCommentEndDash(Z){let Q=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{this.state=j.COMMENT_END;break}case V.EOF:{this._err(F.eofInComment),this.emitCurrentComment(Q),this._emitEOFToken();break}default:Q.data+="-",this.state=j.COMMENT,this._stateComment(Z)}}_stateCommentEnd(Z){let Q=this.currentToken;switch(Z){case V.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentComment(Q);break}case V.EXCLAMATION_MARK:{this.state=j.COMMENT_END_BANG;break}case V.HYPHEN_MINUS:{Q.data+="-";break}case V.EOF:{this._err(F.eofInComment),this.emitCurrentComment(Q),this._emitEOFToken();break}default:Q.data+="--",this.state=j.COMMENT,this._stateComment(Z)}}_stateCommentEndBang(Z){let Q=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{Q.data+="--!",this.state=j.COMMENT_END_DASH;break}case V.GREATER_THAN_SIGN:{this._err(F.incorrectlyClosedComment),this.state=j.DATA,this.emitCurrentComment(Q);break}case V.EOF:{this._err(F.eofInComment),this.emitCurrentComment(Q),this._emitEOFToken();break}default:Q.data+="--!",this.state=j.COMMENT,this._stateComment(Z)}}_stateDoctype(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_NAME;break}case V.GREATER_THAN_SIGN:{this.state=j.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(Z);break}case V.EOF:{this._err(F.eofInDoctype),this._createDoctypeToken(null);let Q=this.currentToken;Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:this._err(F.missingWhitespaceBeforeDoctypeName),this.state=j.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(Z)}}_stateBeforeDoctypeName(Z){if(W1(Z))this._createDoctypeToken(String.fromCharCode(n1(Z))),this.state=j.DOCTYPE_NAME;else switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.NULL:{this._err(F.unexpectedNullCharacter),this._createDoctypeToken(u),this.state=j.DOCTYPE_NAME;break}case V.GREATER_THAN_SIGN:{this._err(F.missingDoctypeName),this._createDoctypeToken(null);let Q=this.currentToken;Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this.state=j.DATA;break}case V.EOF:{this._err(F.eofInDoctype),this._createDoctypeToken(null);let Q=this.currentToken;Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:this._createDoctypeToken(String.fromCodePoint(Z)),this.state=j.DOCTYPE_NAME}}_stateDoctypeName(Z){let Q=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=j.AFTER_DOCTYPE_NAME;break}case V.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(Q);break}case V.NULL:{this._err(F.unexpectedNullCharacter),Q.name+=u;break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:Q.name+=String.fromCodePoint(W1(Z)?n1(Z):Z)}}_stateAfterDoctypeName(Z){let Q=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(Q);break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:if(this._consumeSequenceIfMatch(e.PUBLIC,!1))this.state=j.AFTER_DOCTYPE_PUBLIC_KEYWORD;else if(this._consumeSequenceIfMatch(e.SYSTEM,!1))this.state=j.AFTER_DOCTYPE_SYSTEM_KEYWORD;else if(!this._ensureHibernation())this._err(F.invalidCharacterSequenceAfterDoctypeName),Q.forceQuirks=!0,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateAfterDoctypePublicKeyword(Z){let Q=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;break}case V.QUOTATION_MARK:{this._err(F.missingWhitespaceAfterDoctypePublicKeyword),Q.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this._err(F.missingWhitespaceAfterDoctypePublicKeyword),Q.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(F.missingDoctypePublicIdentifier),Q.forceQuirks=!0,this.state=j.DATA,this.emitCurrentDoctype(Q);break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:this._err(F.missingQuoteBeforeDoctypePublicIdentifier),Q.forceQuirks=!0,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateBeforeDoctypePublicIdentifier(Z){let Q=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.QUOTATION_MARK:{Q.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{Q.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(F.missingDoctypePublicIdentifier),Q.forceQuirks=!0,this.state=j.DATA,this.emitCurrentDoctype(Q);break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:this._err(F.missingQuoteBeforeDoctypePublicIdentifier),Q.forceQuirks=!0,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateDoctypePublicIdentifierDoubleQuoted(Z){let Q=this.currentToken;switch(Z){case V.QUOTATION_MARK:{this.state=j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case V.NULL:{this._err(F.unexpectedNullCharacter),Q.publicId+=u;break}case V.GREATER_THAN_SIGN:{this._err(F.abruptDoctypePublicIdentifier),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this.state=j.DATA;break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:Q.publicId+=String.fromCodePoint(Z)}}_stateDoctypePublicIdentifierSingleQuoted(Z){let Q=this.currentToken;switch(Z){case V.APOSTROPHE:{this.state=j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case V.NULL:{this._err(F.unexpectedNullCharacter),Q.publicId+=u;break}case V.GREATER_THAN_SIGN:{this._err(F.abruptDoctypePublicIdentifier),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this.state=j.DATA;break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:Q.publicId+=String.fromCodePoint(Z)}}_stateAfterDoctypePublicIdentifier(Z){let Q=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=j.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;break}case V.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(Q);break}case V.QUOTATION_MARK:{this._err(F.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),Q.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this._err(F.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),Q.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:this._err(F.missingQuoteBeforeDoctypeSystemIdentifier),Q.forceQuirks=!0,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateBetweenDoctypePublicAndSystemIdentifiers(Z){let Q=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.GREATER_THAN_SIGN:{this.emitCurrentDoctype(Q),this.state=j.DATA;break}case V.QUOTATION_MARK:{Q.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{Q.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:this._err(F.missingQuoteBeforeDoctypeSystemIdentifier),Q.forceQuirks=!0,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateAfterDoctypeSystemKeyword(Z){let Q=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;break}case V.QUOTATION_MARK:{this._err(F.missingWhitespaceAfterDoctypeSystemKeyword),Q.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this._err(F.missingWhitespaceAfterDoctypeSystemKeyword),Q.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(F.missingDoctypeSystemIdentifier),Q.forceQuirks=!0,this.state=j.DATA,this.emitCurrentDoctype(Q);break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:this._err(F.missingQuoteBeforeDoctypeSystemIdentifier),Q.forceQuirks=!0,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateBeforeDoctypeSystemIdentifier(Z){let Q=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.QUOTATION_MARK:{Q.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{Q.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(F.missingDoctypeSystemIdentifier),Q.forceQuirks=!0,this.state=j.DATA,this.emitCurrentDoctype(Q);break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:this._err(F.missingQuoteBeforeDoctypeSystemIdentifier),Q.forceQuirks=!0,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateDoctypeSystemIdentifierDoubleQuoted(Z){let Q=this.currentToken;switch(Z){case V.QUOTATION_MARK:{this.state=j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case V.NULL:{this._err(F.unexpectedNullCharacter),Q.systemId+=u;break}case V.GREATER_THAN_SIGN:{this._err(F.abruptDoctypeSystemIdentifier),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this.state=j.DATA;break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:Q.systemId+=String.fromCodePoint(Z)}}_stateDoctypeSystemIdentifierSingleQuoted(Z){let Q=this.currentToken;switch(Z){case V.APOSTROPHE:{this.state=j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case V.NULL:{this._err(F.unexpectedNullCharacter),Q.systemId+=u;break}case V.GREATER_THAN_SIGN:{this._err(F.abruptDoctypeSystemIdentifier),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this.state=j.DATA;break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:Q.systemId+=String.fromCodePoint(Z)}}_stateAfterDoctypeSystemIdentifier(Z){let Q=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.GREATER_THAN_SIGN:{this.emitCurrentDoctype(Q),this.state=j.DATA;break}case V.EOF:{this._err(F.eofInDoctype),Q.forceQuirks=!0,this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:this._err(F.unexpectedCharacterAfterDoctypeSystemIdentifier),this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateBogusDoctype(Z){let Q=this.currentToken;switch(Z){case V.GREATER_THAN_SIGN:{this.emitCurrentDoctype(Q),this.state=j.DATA;break}case V.NULL:{this._err(F.unexpectedNullCharacter);break}case V.EOF:{this.emitCurrentDoctype(Q),this._emitEOFToken();break}default:}}_stateCdataSection(Z){switch(Z){case V.RIGHT_SQUARE_BRACKET:{this.state=j.CDATA_SECTION_BRACKET;break}case V.EOF:{this._err(F.eofInCdata),this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateCdataSectionBracket(Z){if(Z===V.RIGHT_SQUARE_BRACKET)this.state=j.CDATA_SECTION_END;else this._emitChars("]"),this.state=j.CDATA_SECTION,this._stateCdataSection(Z)}_stateCdataSectionEnd(Z){switch(Z){case V.GREATER_THAN_SIGN:{this.state=j.DATA;break}case V.RIGHT_SQUARE_BRACKET:{this._emitChars("]");break}default:this._emitChars("]]"),this.state=j.CDATA_SECTION,this._stateCdataSection(Z)}}_stateCharacterReference(){let Z=this.entityDecoder.write(this.preprocessor.html,this.preprocessor.pos);if(Z<0)if(this.preprocessor.lastChunkWritten)Z=this.entityDecoder.end();else{this.active=!1,this.preprocessor.pos=this.preprocessor.html.length-1,this.consumedAfterSnapshot=0,this.preprocessor.endOfChunkHit=!0;return}if(Z===0)this.preprocessor.pos=this.entityStartPos,this._flushCodePointConsumedAsCharacterReference(V.AMPERSAND),this.state=!this._isCharacterReferenceInAttribute()&&_8(this.preprocessor.peek(1))?j.AMBIGUOUS_AMPERSAND:this.returnState;else this.state=this.returnState}_stateAmbiguousAmpersand(Z){if(_8(Z))this._flushCodePointConsumedAsCharacterReference(Z);else{if(Z===V.SEMICOLON)this._err(F.unknownNamedCharacterReference);this.state=this.returnState,this._callState(Z)}}}var c8=new Set([K.DD,K.DT,K.LI,K.OPTGROUP,K.OPTION,K.P,K.RB,K.RP,K.RT,K.RTC]),T8=new Set([...c8,K.CAPTION,K.COLGROUP,K.TBODY,K.TD,K.TFOOT,K.TH,K.THEAD,K.TR]),e1=new Set([K.APPLET,K.CAPTION,K.HTML,K.MARQUEE,K.OBJECT,K.TABLE,K.TD,K.TEMPLATE,K.TH]),TZ=new Set([...e1,K.OL,K.UL]),AZ=new Set([...e1,K.BUTTON]),A8=new Set([K.ANNOTATION_XML,K.MI,K.MN,K.MO,K.MS,K.MTEXT]),u8=new Set([K.DESC,K.FOREIGN_OBJECT,K.TITLE]),uZ=new Set([K.TR,K.TEMPLATE,K.HTML]),cZ=new Set([K.TBODY,K.TFOOT,K.THEAD,K.TEMPLATE,K.HTML]),lZ=new Set([K.TABLE,K.TEMPLATE,K.HTML]),dZ=new Set([K.TD,K.TH]);class H6{get currentTmplContentOrNode(){return this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):this.current}constructor(Z,Q,X){this.treeAdapter=Q,this.handler=X,this.items=[],this.tagIDs=[],this.stackTop=-1,this.tmplCount=0,this.currentTagId=K.UNKNOWN,this.current=Z}_indexOf(Z){return this.items.lastIndexOf(Z,this.stackTop)}_isInTemplate(){return this.currentTagId===K.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===P.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagId=this.tagIDs[this.stackTop]}push(Z,Q){if(this.stackTop++,this.items[this.stackTop]=Z,this.current=Z,this.tagIDs[this.stackTop]=Q,this.currentTagId=Q,this._isInTemplate())this.tmplCount++;this.handler.onItemPush(Z,Q,!0)}pop(){let Z=this.current;if(this.tmplCount>0&&this._isInTemplate())this.tmplCount--;this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(Z,!0)}replace(Z,Q){let X=this._indexOf(Z);if(this.items[X]=Q,X===this.stackTop)this.current=Q}insertAfter(Z,Q,X){let J=this._indexOf(Z)+1;if(this.items.splice(J,0,Q),this.tagIDs.splice(J,0,X),this.stackTop++,J===this.stackTop)this._updateCurrentElement();if(this.current&&this.currentTagId!==void 0)this.handler.onItemPush(this.current,this.currentTagId,J===this.stackTop)}popUntilTagNamePopped(Z){let Q=this.stackTop+1;do Q=this.tagIDs.lastIndexOf(Z,Q-1);while(Q>0&&this.treeAdapter.getNamespaceURI(this.items[Q])!==P.HTML);this.shortenToLength(Math.max(Q,0))}shortenToLength(Z){while(this.stackTop>=Z){let Q=this.current;if(this.tmplCount>0&&this._isInTemplate())this.tmplCount-=1;this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(Q,this.stackTop<Z)}}popUntilElementPopped(Z){let Q=this._indexOf(Z);this.shortenToLength(Math.max(Q,0))}popUntilPopped(Z,Q){let X=this._indexOfTagNames(Z,Q);this.shortenToLength(Math.max(X,0))}popUntilNumberedHeaderPopped(){this.popUntilPopped(Y1,P.HTML)}popUntilTableCellPopped(){this.popUntilPopped(dZ,P.HTML)}popAllUpToHtmlElement(){this.tmplCount=0,this.shortenToLength(1)}_indexOfTagNames(Z,Q){for(let X=this.stackTop;X>=0;X--)if(Z.has(this.tagIDs[X])&&this.treeAdapter.getNamespaceURI(this.items[X])===Q)return X;return-1}clearBackTo(Z,Q){let X=this._indexOfTagNames(Z,Q);this.shortenToLength(X+1)}clearBackToTableContext(){this.clearBackTo(lZ,P.HTML)}clearBackToTableBodyContext(){this.clearBackTo(cZ,P.HTML)}clearBackToTableRowContext(){this.clearBackTo(uZ,P.HTML)}remove(Z){let Q=this._indexOf(Z);if(Q>=0)if(Q===this.stackTop)this.pop();else this.items.splice(Q,1),this.tagIDs.splice(Q,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(Z,!1)}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===K.BODY?this.items[1]:null}contains(Z){return this._indexOf(Z)>-1}getCommonAncestor(Z){let Q=this._indexOf(Z)-1;return Q>=0?this.items[Q]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===K.HTML}hasInDynamicScope(Z,Q){for(let X=this.stackTop;X>=0;X--){let J=this.tagIDs[X];switch(this.treeAdapter.getNamespaceURI(this.items[X])){case P.HTML:{if(J===Z)return!0;if(Q.has(J))return!1;break}case P.SVG:{if(u8.has(J))return!1;break}case P.MATHML:{if(A8.has(J))return!1;break}}}return!0}hasInScope(Z){return this.hasInDynamicScope(Z,e1)}hasInListItemScope(Z){return this.hasInDynamicScope(Z,TZ)}hasInButtonScope(Z){return this.hasInDynamicScope(Z,AZ)}hasNumberedHeaderInScope(){for(let Z=this.stackTop;Z>=0;Z--){let Q=this.tagIDs[Z];switch(this.treeAdapter.getNamespaceURI(this.items[Z])){case P.HTML:{if(Y1.has(Q))return!0;if(e1.has(Q))return!1;break}case P.SVG:{if(u8.has(Q))return!1;break}case P.MATHML:{if(A8.has(Q))return!1;break}}}return!0}hasInTableScope(Z){for(let Q=this.stackTop;Q>=0;Q--){if(this.treeAdapter.getNamespaceURI(this.items[Q])!==P.HTML)continue;switch(this.tagIDs[Q]){case Z:return!0;case K.TABLE:case K.HTML:return!1}}return!0}hasTableBodyContextInTableScope(){for(let Z=this.stackTop;Z>=0;Z--){if(this.treeAdapter.getNamespaceURI(this.items[Z])!==P.HTML)continue;switch(this.tagIDs[Z]){case K.TBODY:case K.THEAD:case K.TFOOT:return!0;case K.TABLE:case K.HTML:return!1}}return!0}hasInSelectScope(Z){for(let Q=this.stackTop;Q>=0;Q--){if(this.treeAdapter.getNamespaceURI(this.items[Q])!==P.HTML)continue;switch(this.tagIDs[Q]){case Z:return!0;case K.OPTION:case K.OPTGROUP:break;default:return!1}}return!0}generateImpliedEndTags(){while(this.currentTagId!==void 0&&c8.has(this.currentTagId))this.pop()}generateImpliedEndTagsThoroughly(){while(this.currentTagId!==void 0&&T8.has(this.currentTagId))this.pop()}generateImpliedEndTagsWithExclusion(Z){while(this.currentTagId!==void 0&&this.currentTagId!==Z&&T8.has(this.currentTagId))this.pop()}}var z0;(function(Z){Z[Z.Marker=0]="Marker",Z[Z.Element=1]="Element"})(z0||(z0={}));var l8={type:z0.Marker};class z6{constructor(Z){this.treeAdapter=Z,this.entries=[],this.bookmark=null}_getNoahArkConditionCandidates(Z,Q){let X=[],J=Q.length,Y=this.treeAdapter.getTagName(Z),W=this.treeAdapter.getNamespaceURI(Z);for(let z=0;z<this.entries.length;z++){let q=this.entries[z];if(q.type===z0.Marker)break;let{element:L}=q;if(this.treeAdapter.getTagName(L)===Y&&this.treeAdapter.getNamespaceURI(L)===W){let U=this.treeAdapter.getAttrList(L);if(U.length===J)X.push({idx:z,attrs:U})}}return X}_ensureNoahArkCondition(Z){if(this.entries.length<3)return;let Q=this.treeAdapter.getAttrList(Z),X=this._getNoahArkConditionCandidates(Z,Q);if(X.length<3)return;let J=new Map(Q.map((W)=>[W.name,W.value])),Y=0;for(let W=0;W<X.length;W++){let z=X[W];if(z.attrs.every((q)=>J.get(q.name)===q.value)){if(Y+=1,Y>=3)this.entries.splice(z.idx,1)}}}insertMarker(){this.entries.unshift(l8)}pushElement(Z,Q){this._ensureNoahArkCondition(Z),this.entries.unshift({type:z0.Element,element:Z,token:Q})}insertElementAfterBookmark(Z,Q){let X=this.entries.indexOf(this.bookmark);this.entries.splice(X,0,{type:z0.Element,element:Z,token:Q})}removeEntry(Z){let Q=this.entries.indexOf(Z);if(Q!==-1)this.entries.splice(Q,1)}clearToLastMarker(){let Z=this.entries.indexOf(l8);if(Z===-1)this.entries.length=0;else this.entries.splice(0,Z+1)}getElementEntryInScopeWithTagName(Z){let Q=this.entries.find((X)=>X.type===z0.Marker||this.treeAdapter.getTagName(X.element)===Z);return Q&&Q.type===z0.Element?Q:null}getElementEntry(Z){return this.entries.find((Q)=>Q.type===z0.Element&&Q.element===Z)}}var W0={createDocument(){return{nodeName:"#document",mode:Z0.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return{nodeName:"#document-fragment",childNodes:[]}},createElement(Z,Q,X){return{nodeName:Z,tagName:Z,attrs:X,namespaceURI:Q,childNodes:[],parentNode:null}},createCommentNode(Z){return{nodeName:"#comment",data:Z,parentNode:null}},createTextNode(Z){return{nodeName:"#text",value:Z,parentNode:null}},appendChild(Z,Q){Z.childNodes.push(Q),Q.parentNode=Z},insertBefore(Z,Q,X){let J=Z.childNodes.indexOf(X);Z.childNodes.splice(J,0,Q),Q.parentNode=Z},setTemplateContent(Z,Q){Z.content=Q},getTemplateContent(Z){return Z.content},setDocumentType(Z,Q,X,J){let Y=Z.childNodes.find((W)=>W.nodeName==="#documentType");if(Y)Y.name=Q,Y.publicId=X,Y.systemId=J;else{let W={nodeName:"#documentType",name:Q,publicId:X,systemId:J,parentNode:null};W0.appendChild(Z,W)}},setDocumentMode(Z,Q){Z.mode=Q},getDocumentMode(Z){return Z.mode},detachNode(Z){if(Z.parentNode){let Q=Z.parentNode.childNodes.indexOf(Z);Z.parentNode.childNodes.splice(Q,1),Z.parentNode=null}},insertText(Z,Q){if(Z.childNodes.length>0){let X=Z.childNodes[Z.childNodes.length-1];if(W0.isTextNode(X)){X.value+=Q;return}}W0.appendChild(Z,W0.createTextNode(Q))},insertTextBefore(Z,Q,X){let J=Z.childNodes[Z.childNodes.indexOf(X)-1];if(J&&W0.isTextNode(J))J.value+=Q;else W0.insertBefore(Z,W0.createTextNode(Q),X)},adoptAttributes(Z,Q){let X=new Set(Z.attrs.map((J)=>J.name));for(let J=0;J<Q.length;J++)if(!X.has(Q[J].name))Z.attrs.push(Q[J])},getFirstChild(Z){return Z.childNodes[0]},getChildNodes(Z){return Z.childNodes},getParentNode(Z){return Z.parentNode},getAttrList(Z){return Z.attrs},getTagName(Z){return Z.tagName},getNamespaceURI(Z){return Z.namespaceURI},getTextNodeContent(Z){return Z.value},getCommentNodeContent(Z){return Z.data},getDocumentTypeNodeName(Z){return Z.name},getDocumentTypeNodePublicId(Z){return Z.publicId},getDocumentTypeNodeSystemId(Z){return Z.systemId},isTextNode(Z){return Z.nodeName==="#text"},isCommentNode(Z){return Z.nodeName==="#comment"},isDocumentTypeNode(Z){return Z.nodeName==="#documentType"},isElementNode(Z){return Object.prototype.hasOwnProperty.call(Z,"tagName")},setNodeSourceCodeLocation(Z,Q){Z.sourceCodeLocation=Q},getNodeSourceCodeLocation(Z){return Z.sourceCodeLocation},updateNodeSourceCodeLocation(Z,Q){Z.sourceCodeLocation={...Z.sourceCodeLocation,...Q}}};var i8="html",iZ="about:legacy-compat",aZ="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd",a8=["+//silmaril//dtd html pro v0r11 19970101//","-//as//dtd html 3.0 aswedit + extensions//","-//advasoft ltd//dtd html 3.0 aswedit + extensions//","-//ietf//dtd html 2.0 level 1//","-//ietf//dtd html 2.0 level 2//","-//ietf//dtd html 2.0 strict level 1//","-//ietf//dtd html 2.0 strict level 2//","-//ietf//dtd html 2.0 strict//","-//ietf//dtd html 2.0//","-//ietf//dtd html 2.1e//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.2 final//","-//ietf//dtd html 3.2//","-//ietf//dtd html 3//","-//ietf//dtd html level 0//","-//ietf//dtd html level 1//","-//ietf//dtd html level 2//","-//ietf//dtd html level 3//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict//","-//ietf//dtd html//","-//metrius//dtd metrius presentational//","-//microsoft//dtd internet explorer 2.0 html strict//","-//microsoft//dtd internet explorer 2.0 html//","-//microsoft//dtd internet explorer 2.0 tables//","-//microsoft//dtd internet explorer 3.0 html strict//","-//microsoft//dtd internet explorer 3.0 html//","-//microsoft//dtd internet explorer 3.0 tables//","-//netscape comm. corp.//dtd html//","-//netscape comm. corp.//dtd strict html//","-//o'reilly and associates//dtd html 2.0//","-//o'reilly and associates//dtd html extended 1.0//","-//o'reilly and associates//dtd html extended relaxed 1.0//","-//sq//dtd html 2.0 hotmetal + extensions//","-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//","-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//","-//spyglass//dtd html 2.0 extended//","-//sun microsystems corp.//dtd hotjava html//","-//sun microsystems corp.//dtd hotjava strict html//","-//w3c//dtd html 3 1995-03-24//","-//w3c//dtd html 3.2 draft//","-//w3c//dtd html 3.2 final//","-//w3c//dtd html 3.2//","-//w3c//dtd html 3.2s draft//","-//w3c//dtd html 4.0 frameset//","-//w3c//dtd html 4.0 transitional//","-//w3c//dtd html experimental 19960712//","-//w3c//dtd html experimental 970421//","-//w3c//dtd w3 html//","-//w3o//dtd w3 html 3.0//","-//webtechs//dtd mozilla html 2.0//","-//webtechs//dtd mozilla html//"],pZ=[...a8,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],sZ=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),p8=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],rZ=[...p8,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function d8(Z,Q){return Q.some((X)=>Z.startsWith(X))}function s8(Z){return Z.name===i8&&Z.publicId===null&&(Z.systemId===null||Z.systemId===iZ)}function r8(Z){if(Z.name!==i8)return Z0.QUIRKS;let{systemId:Q}=Z;if(Q&&Q.toLowerCase()===aZ)return Z0.QUIRKS;let{publicId:X}=Z;if(X!==null){if(X=X.toLowerCase(),sZ.has(X))return Z0.QUIRKS;let J=Q===null?pZ:a8;if(d8(X,J))return Z0.QUIRKS;if(J=Q===null?p8:rZ,d8(X,J))return Z0.LIMITED_QUIRKS}return Z0.NO_QUIRKS}var o8={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},nZ="definitionurl",tZ="definitionURL",eZ=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map((Z)=>[Z.toLowerCase(),Z])),Z5=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:P.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:P.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:P.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:P.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:P.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:P.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:P.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:P.XML}],["xml:space",{prefix:"xml",name:"space",namespace:P.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:P.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:P.XMLNS}]]),Q5=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map((Z)=>[Z.toLowerCase(),Z])),X5=new Set([K.B,K.BIG,K.BLOCKQUOTE,K.BODY,K.BR,K.CENTER,K.CODE,K.DD,K.DIV,K.DL,K.DT,K.EM,K.EMBED,K.H1,K.H2,K.H3,K.H4,K.H5,K.H6,K.HEAD,K.HR,K.I,K.IMG,K.LI,K.LISTING,K.MENU,K.META,K.NOBR,K.OL,K.P,K.PRE,K.RUBY,K.S,K.SMALL,K.SPAN,K.STRONG,K.STRIKE,K.SUB,K.SUP,K.TABLE,K.TT,K.U,K.UL,K.VAR]);function n8(Z){let Q=Z.tagID;return Q===K.FONT&&Z.attrs.some(({name:J})=>J===x0.COLOR||J===x0.SIZE||J===x0.FACE)||X5.has(Q)}function q6(Z){for(let Q=0;Q<Z.attrs.length;Q++)if(Z.attrs[Q].name===nZ){Z.attrs[Q].name=tZ;break}}function U6(Z){for(let Q=0;Q<Z.attrs.length;Q++){let X=eZ.get(Z.attrs[Q].name);if(X!=null)Z.attrs[Q].name=X}}function Z4(Z){for(let Q=0;Q<Z.attrs.length;Q++){let X=Z5.get(Z.attrs[Q].name);if(X)Z.attrs[Q].prefix=X.prefix,Z.attrs[Q].name=X.name,Z.attrs[Q].namespace=X.namespace}}function t8(Z){let Q=Q5.get(Z.tagName);if(Q!=null)Z.tagName=Q,Z.tagID=_0(Z.tagName)}function K5(Z,Q){return Q===P.MATHML&&(Z===K.MI||Z===K.MO||Z===K.MN||Z===K.MS||Z===K.MTEXT)}function J5(Z,Q,X){if(Q===P.MATHML&&Z===K.ANNOTATION_XML){for(let J=0;J<X.length;J++)if(X[J].name===x0.ENCODING){let Y=X[J].value.toLowerCase();return Y===o8.TEXT_HTML||Y===o8.APPLICATION_XML}}return Q===P.SVG&&(Z===K.FOREIGN_OBJECT||Z===K.DESC||Z===K.TITLE)}function e8(Z,Q,X,J){return(!J||J===P.HTML)&&J5(Z,Q,X)||(!J||J===P.MATHML)&&K5(Z,Q)}var Y5="hidden",W5=8,V5=3,H;(function(Z){Z[Z.INITIAL=0]="INITIAL",Z[Z.BEFORE_HTML=1]="BEFORE_HTML",Z[Z.BEFORE_HEAD=2]="BEFORE_HEAD",Z[Z.IN_HEAD=3]="IN_HEAD",Z[Z.IN_HEAD_NO_SCRIPT=4]="IN_HEAD_NO_SCRIPT",Z[Z.AFTER_HEAD=5]="AFTER_HEAD",Z[Z.IN_BODY=6]="IN_BODY",Z[Z.TEXT=7]="TEXT",Z[Z.IN_TABLE=8]="IN_TABLE",Z[Z.IN_TABLE_TEXT=9]="IN_TABLE_TEXT",Z[Z.IN_CAPTION=10]="IN_CAPTION",Z[Z.IN_COLUMN_GROUP=11]="IN_COLUMN_GROUP",Z[Z.IN_TABLE_BODY=12]="IN_TABLE_BODY",Z[Z.IN_ROW=13]="IN_ROW",Z[Z.IN_CELL=14]="IN_CELL",Z[Z.IN_SELECT=15]="IN_SELECT",Z[Z.IN_SELECT_IN_TABLE=16]="IN_SELECT_IN_TABLE",Z[Z.IN_TEMPLATE=17]="IN_TEMPLATE",Z[Z.AFTER_BODY=18]="AFTER_BODY",Z[Z.IN_FRAMESET=19]="IN_FRAMESET",Z[Z.AFTER_FRAMESET=20]="AFTER_FRAMESET",Z[Z.AFTER_AFTER_BODY=21]="AFTER_AFTER_BODY",Z[Z.AFTER_AFTER_FRAMESET=22]="AFTER_AFTER_FRAMESET"})(H||(H={}));var j5={startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1},J3=new Set([K.TABLE,K.TBODY,K.TFOOT,K.THEAD,K.TR]),Q3={scriptingEnabled:!0,sourceCodeLocationInfo:!1,treeAdapter:W0,onParseError:null};class J4{constructor(Z,Q,X=null,J=null){if(this.fragmentContext=X,this.scriptHandler=J,this.currentToken=null,this.stopped=!1,this.insertionMode=H.INITIAL,this.originalInsertionMode=H.INITIAL,this.headElement=null,this.formElement=null,this.currentNotInHTML=!1,this.tmplInsertionModeStack=[],this.pendingCharacterTokens=[],this.hasNonWhitespacePendingCharacterToken=!1,this.framesetOk=!0,this.skipNextNewLine=!1,this.fosterParentingEnabled=!1,this.options={...Q3,...Z},this.treeAdapter=this.options.treeAdapter,this.onParseError=this.options.onParseError,this.onParseError)this.options.sourceCodeLocationInfo=!0;this.document=Q!==null&&Q!==void 0?Q:this.treeAdapter.createDocument(),this.tokenizer=new t1(this.options,this),this.activeFormattingElements=new z6(this.treeAdapter),this.fragmentContextID=X?_0(this.treeAdapter.getTagName(X)):K.UNKNOWN,this._setContextModes(X!==null&&X!==void 0?X:this.document,this.fragmentContextID),this.openElements=new H6(this.document,this.treeAdapter,this)}static parse(Z,Q){let X=new this(Q);return X.tokenizer.write(Z,!0),X.document}static getFragmentParser(Z,Q){let X={...Q3,...Q};Z!==null&&Z!==void 0||(Z=X.treeAdapter.createElement(B.TEMPLATE,P.HTML,[]));let J=X.treeAdapter.createElement("documentmock",P.HTML,[]),Y=new this(X,J,Z);if(Y.fragmentContextID===K.TEMPLATE)Y.tmplInsertionModeStack.unshift(H.IN_TEMPLATE);return Y._initTokenizerForFragmentParsing(),Y._insertFakeRootElement(),Y._resetInsertionMode(),Y._findFormInFragmentContext(),Y}getFragment(){let Z=this.treeAdapter.getFirstChild(this.document),Q=this.treeAdapter.createDocumentFragment();return this._adoptNodes(Z,Q),Q}_err(Z,Q,X){var J;if(!this.onParseError)return;let Y=(J=Z.location)!==null&&J!==void 0?J:j5,W={code:Q,startLine:Y.startLine,startCol:Y.startCol,startOffset:Y.startOffset,endLine:X?Y.startLine:Y.endLine,endCol:X?Y.startCol:Y.endCol,endOffset:X?Y.startOffset:Y.endOffset};this.onParseError(W)}onItemPush(Z,Q,X){var J,Y;if((Y=(J=this.treeAdapter).onItemPush)===null||Y===void 0||Y.call(J,Z),X&&this.openElements.stackTop>0)this._setContextModes(Z,Q)}onItemPop(Z,Q){var X,J;if(this.options.sourceCodeLocationInfo)this._setEndLocation(Z,this.currentToken);if((J=(X=this.treeAdapter).onItemPop)===null||J===void 0||J.call(X,Z,this.openElements.current),Q){let Y,W;if(this.openElements.stackTop===0&&this.fragmentContext)Y=this.fragmentContext,W=this.fragmentContextID;else({current:Y,currentTagId:W}=this.openElements);this._setContextModes(Y,W)}}_setContextModes(Z,Q){let X=Z===this.document||Z&&this.treeAdapter.getNamespaceURI(Z)===P.HTML;this.currentNotInHTML=!X,this.tokenizer.inForeignNode=!X&&Z!==void 0&&Q!==void 0&&!this._isIntegrationPoint(Q,Z)}_switchToTextParsing(Z,Q){this._insertElement(Z,P.HTML),this.tokenizer.state=Q,this.originalInsertionMode=this.insertionMode,this.insertionMode=H.TEXT}switchToPlaintextParsing(){this.insertionMode=H.TEXT,this.originalInsertionMode=H.IN_BODY,this.tokenizer.state=n.PLAINTEXT}_getAdjustedCurrentElement(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let Z=this.fragmentContext;while(Z){if(this.treeAdapter.getTagName(Z)===B.FORM){this.formElement=Z;break}Z=this.treeAdapter.getParentNode(Z)}}_initTokenizerForFragmentParsing(){if(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==P.HTML)return;switch(this.fragmentContextID){case K.TITLE:case K.TEXTAREA:{this.tokenizer.state=n.RCDATA;break}case K.STYLE:case K.XMP:case K.IFRAME:case K.NOEMBED:case K.NOFRAMES:case K.NOSCRIPT:{this.tokenizer.state=n.RAWTEXT;break}case K.SCRIPT:{this.tokenizer.state=n.SCRIPT_DATA;break}case K.PLAINTEXT:{this.tokenizer.state=n.PLAINTEXT;break}default:}}_setDocumentType(Z){let Q=Z.name||"",X=Z.publicId||"",J=Z.systemId||"";if(this.treeAdapter.setDocumentType(this.document,Q,X,J),Z.location){let W=this.treeAdapter.getChildNodes(this.document).find((z)=>this.treeAdapter.isDocumentTypeNode(z));if(W)this.treeAdapter.setNodeSourceCodeLocation(W,Z.location)}}_attachElementToTree(Z,Q){if(this.options.sourceCodeLocationInfo){let X=Q&&{...Q,startTag:Q};this.treeAdapter.setNodeSourceCodeLocation(Z,X)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(Z);else{let X=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(X!==null&&X!==void 0?X:this.document,Z)}}_appendElement(Z,Q){let X=this.treeAdapter.createElement(Z.tagName,Q,Z.attrs);this._attachElementToTree(X,Z.location)}_insertElement(Z,Q){let X=this.treeAdapter.createElement(Z.tagName,Q,Z.attrs);this._attachElementToTree(X,Z.location),this.openElements.push(X,Z.tagID)}_insertFakeElement(Z,Q){let X=this.treeAdapter.createElement(Z,P.HTML,[]);this._attachElementToTree(X,null),this.openElements.push(X,Q)}_insertTemplate(Z){let Q=this.treeAdapter.createElement(Z.tagName,P.HTML,Z.attrs),X=this.treeAdapter.createDocumentFragment();if(this.treeAdapter.setTemplateContent(Q,X),this._attachElementToTree(Q,Z.location),this.openElements.push(Q,Z.tagID),this.options.sourceCodeLocationInfo)this.treeAdapter.setNodeSourceCodeLocation(X,null)}_insertFakeRootElement(){let Z=this.treeAdapter.createElement(B.HTML,P.HTML,[]);if(this.options.sourceCodeLocationInfo)this.treeAdapter.setNodeSourceCodeLocation(Z,null);this.treeAdapter.appendChild(this.openElements.current,Z),this.openElements.push(Z,K.HTML)}_appendCommentNode(Z,Q){let X=this.treeAdapter.createCommentNode(Z.data);if(this.treeAdapter.appendChild(Q,X),this.options.sourceCodeLocationInfo)this.treeAdapter.setNodeSourceCodeLocation(X,Z.location)}_insertCharacters(Z){let Q,X;if(this._shouldFosterParentOnInsertion())if({parent:Q,beforeElement:X}=this._findFosterParentingLocation(),X)this.treeAdapter.insertTextBefore(Q,Z.chars,X);else this.treeAdapter.insertText(Q,Z.chars);else Q=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(Q,Z.chars);if(!Z.location)return;let J=this.treeAdapter.getChildNodes(Q),Y=X?J.lastIndexOf(X):J.length,W=J[Y-1];if(this.treeAdapter.getNodeSourceCodeLocation(W)){let{endLine:q,endCol:L,endOffset:U}=Z.location;this.treeAdapter.updateNodeSourceCodeLocation(W,{endLine:q,endCol:L,endOffset:U})}else if(this.options.sourceCodeLocationInfo)this.treeAdapter.setNodeSourceCodeLocation(W,Z.location)}_adoptNodes(Z,Q){for(let X=this.treeAdapter.getFirstChild(Z);X;X=this.treeAdapter.getFirstChild(Z))this.treeAdapter.detachNode(X),this.treeAdapter.appendChild(Q,X)}_setEndLocation(Z,Q){if(this.treeAdapter.getNodeSourceCodeLocation(Z)&&Q.location){let X=Q.location,J=this.treeAdapter.getTagName(Z),Y=Q.type===_.END_TAG&&J===Q.tagName?{endTag:{...X},endLine:X.endLine,endCol:X.endCol,endOffset:X.endOffset}:{endLine:X.startLine,endCol:X.startCol,endOffset:X.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(Z,Y)}}shouldProcessStartTagTokenInForeignContent(Z){if(!this.currentNotInHTML)return!1;let Q,X;if(this.openElements.stackTop===0&&this.fragmentContext)Q=this.fragmentContext,X=this.fragmentContextID;else({current:Q,currentTagId:X}=this.openElements);if(Z.tagID===K.SVG&&this.treeAdapter.getTagName(Q)===B.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(Q)===P.MATHML)return!1;return this.tokenizer.inForeignNode||(Z.tagID===K.MGLYPH||Z.tagID===K.MALIGNMARK)&&X!==void 0&&!this._isIntegrationPoint(X,Q,P.HTML)}_processToken(Z){switch(Z.type){case _.CHARACTER:{this.onCharacter(Z);break}case _.NULL_CHARACTER:{this.onNullCharacter(Z);break}case _.COMMENT:{this.onComment(Z);break}case _.DOCTYPE:{this.onDoctype(Z);break}case _.START_TAG:{this._processStartTag(Z);break}case _.END_TAG:{this.onEndTag(Z);break}case _.EOF:{this.onEof(Z);break}case _.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(Z);break}}}_isIntegrationPoint(Z,Q,X){let J=this.treeAdapter.getNamespaceURI(Q),Y=this.treeAdapter.getAttrList(Q);return e8(Z,J,Y,X)}_reconstructActiveFormattingElements(){let Z=this.activeFormattingElements.entries.length;if(Z){let Q=this.activeFormattingElements.entries.findIndex((J)=>J.type===z0.Marker||this.openElements.contains(J.element)),X=Q===-1?Z-1:Q-1;for(let J=X;J>=0;J--){let Y=this.activeFormattingElements.entries[J];this._insertElement(Y.token,this.treeAdapter.getNamespaceURI(Y.element)),Y.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=H.IN_ROW}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(K.P),this.openElements.popUntilTagNamePopped(K.P)}_resetInsertionMode(){for(let Z=this.openElements.stackTop;Z>=0;Z--)switch(Z===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[Z]){case K.TR:{this.insertionMode=H.IN_ROW;return}case K.TBODY:case K.THEAD:case K.TFOOT:{this.insertionMode=H.IN_TABLE_BODY;return}case K.CAPTION:{this.insertionMode=H.IN_CAPTION;return}case K.COLGROUP:{this.insertionMode=H.IN_COLUMN_GROUP;return}case K.TABLE:{this.insertionMode=H.IN_TABLE;return}case K.BODY:{this.insertionMode=H.IN_BODY;return}case K.FRAMESET:{this.insertionMode=H.IN_FRAMESET;return}case K.SELECT:{this._resetInsertionModeForSelect(Z);return}case K.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case K.HTML:{this.insertionMode=this.headElement?H.AFTER_HEAD:H.BEFORE_HEAD;return}case K.TD:case K.TH:{if(Z>0){this.insertionMode=H.IN_CELL;return}break}case K.HEAD:{if(Z>0){this.insertionMode=H.IN_HEAD;return}break}}this.insertionMode=H.IN_BODY}_resetInsertionModeForSelect(Z){if(Z>0)for(let Q=Z-1;Q>0;Q--){let X=this.openElements.tagIDs[Q];if(X===K.TEMPLATE)break;else if(X===K.TABLE){this.insertionMode=H.IN_SELECT_IN_TABLE;return}}this.insertionMode=H.IN_SELECT}_isElementCausesFosterParenting(Z){return J3.has(Z)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this.openElements.currentTagId!==void 0&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let Z=this.openElements.stackTop;Z>=0;Z--){let Q=this.openElements.items[Z];switch(this.openElements.tagIDs[Z]){case K.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(Q)===P.HTML)return{parent:this.treeAdapter.getTemplateContent(Q),beforeElement:null};break}case K.TABLE:{let X=this.treeAdapter.getParentNode(Q);if(X)return{parent:X,beforeElement:Q};return{parent:this.openElements.items[Z-1],beforeElement:null}}default:}}return{parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(Z){let Q=this._findFosterParentingLocation();if(Q.beforeElement)this.treeAdapter.insertBefore(Q.parent,Z,Q.beforeElement);else this.treeAdapter.appendChild(Q.parent,Z)}_isSpecialElement(Z,Q){let X=this.treeAdapter.getNamespaceURI(Z);return m8[X].has(Q)}onCharacter(Z){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){IQ(this,Z);return}switch(this.insertionMode){case H.INITIAL:{V1(this,Z);break}case H.BEFORE_HTML:{H1(this,Z);break}case H.BEFORE_HEAD:{z1(this,Z);break}case H.IN_HEAD:{q1(this,Z);break}case H.IN_HEAD_NO_SCRIPT:{U1(this,Z);break}case H.AFTER_HEAD:{B1(this,Z);break}case H.IN_BODY:case H.IN_CAPTION:case H.IN_CELL:case H.IN_TEMPLATE:{W3(this,Z);break}case H.TEXT:case H.IN_SELECT:case H.IN_SELECT_IN_TABLE:{this._insertCharacters(Z);break}case H.IN_TABLE:case H.IN_TABLE_BODY:case H.IN_ROW:{B6(this,Z);break}case H.IN_TABLE_TEXT:{U3(this,Z);break}case H.IN_COLUMN_GROUP:{X4(this,Z);break}case H.AFTER_BODY:{K4(this,Z);break}case H.AFTER_AFTER_BODY:{Q4(this,Z);break}default:}}onNullCharacter(Z){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){SQ(this,Z);return}switch(this.insertionMode){case H.INITIAL:{V1(this,Z);break}case H.BEFORE_HTML:{H1(this,Z);break}case H.BEFORE_HEAD:{z1(this,Z);break}case H.IN_HEAD:{q1(this,Z);break}case H.IN_HEAD_NO_SCRIPT:{U1(this,Z);break}case H.AFTER_HEAD:{B1(this,Z);break}case H.TEXT:{this._insertCharacters(Z);break}case H.IN_TABLE:case H.IN_TABLE_BODY:case H.IN_ROW:{B6(this,Z);break}case H.IN_COLUMN_GROUP:{X4(this,Z);break}case H.AFTER_BODY:{K4(this,Z);break}case H.AFTER_AFTER_BODY:{Q4(this,Z);break}default:}}onComment(Z){if(this.skipNextNewLine=!1,this.currentNotInHTML){F6(this,Z);return}switch(this.insertionMode){case H.INITIAL:case H.BEFORE_HTML:case H.BEFORE_HEAD:case H.IN_HEAD:case H.IN_HEAD_NO_SCRIPT:case H.AFTER_HEAD:case H.IN_BODY:case H.IN_TABLE:case H.IN_CAPTION:case H.IN_COLUMN_GROUP:case H.IN_TABLE_BODY:case H.IN_ROW:case H.IN_CELL:case H.IN_SELECT:case H.IN_SELECT_IN_TABLE:case H.IN_TEMPLATE:case H.IN_FRAMESET:case H.AFTER_FRAMESET:{F6(this,Z);break}case H.IN_TABLE_TEXT:{j1(this,Z);break}case H.AFTER_BODY:{L5(this,Z);break}case H.AFTER_AFTER_BODY:case H.AFTER_AFTER_FRAMESET:{w5(this,Z);break}default:}}onDoctype(Z){switch(this.skipNextNewLine=!1,this.insertionMode){case H.INITIAL:{P5(this,Z);break}case H.BEFORE_HEAD:case H.IN_HEAD:case H.IN_HEAD_NO_SCRIPT:case H.AFTER_HEAD:{this._err(Z,F.misplacedDoctype);break}case H.IN_TABLE_TEXT:{j1(this,Z);break}default:}}onStartTag(Z){if(this.skipNextNewLine=!1,this.currentToken=Z,this._processStartTag(Z),Z.selfClosing&&!Z.ackSelfClosing)this._err(Z,F.nonVoidHtmlElementStartTagWithTrailingSolidus)}_processStartTag(Z){if(this.shouldProcessStartTagTokenInForeignContent(Z))TQ(this,Z);else this._startTagOutsideForeignContent(Z)}_startTagOutsideForeignContent(Z){switch(this.insertionMode){case H.INITIAL:{V1(this,Z);break}case H.BEFORE_HTML:{x5(this,Z);break}case H.BEFORE_HEAD:{b5(this,Z);break}case H.IN_HEAD:{q0(this,Z);break}case H.IN_HEAD_NO_SCRIPT:{v5(this,Z);break}case H.AFTER_HEAD:{f5(this,Z);break}case H.IN_BODY:{t(this,Z);break}case H.IN_TABLE:{d0(this,Z);break}case H.IN_TABLE_TEXT:{j1(this,Z);break}case H.IN_CAPTION:{CQ(this,Z);break}case H.IN_COLUMN_GROUP:{x6(this,Z);break}case H.IN_TABLE_BODY:{V4(this,Z);break}case H.IN_ROW:{j4(this,Z);break}case H.IN_CELL:{yQ(this,Z);break}case H.IN_SELECT:{L3(this,Z);break}case H.IN_SELECT_IN_TABLE:{MQ(this,Z);break}case H.IN_TEMPLATE:{hQ(this,Z);break}case H.AFTER_BODY:{$Q(this,Z);break}case H.IN_FRAMESET:{GQ(this,Z);break}case H.AFTER_FRAMESET:{EQ(this,Z);break}case H.AFTER_AFTER_BODY:{kQ(this,Z);break}case H.AFTER_AFTER_FRAMESET:{_Q(this,Z);break}default:}}onEndTag(Z){if(this.skipNextNewLine=!1,this.currentToken=Z,this.currentNotInHTML)AQ(this,Z);else this._endTagOutsideForeignContent(Z)}_endTagOutsideForeignContent(Z){switch(this.insertionMode){case H.INITIAL:{V1(this,Z);break}case H.BEFORE_HTML:{O5(this,Z);break}case H.BEFORE_HEAD:{C5(this,Z);break}case H.IN_HEAD:{R5(this,Z);break}case H.IN_HEAD_NO_SCRIPT:{y5(this,Z);break}case H.AFTER_HEAD:{M5(this,Z);break}case H.IN_BODY:{W4(this,Z);break}case H.TEXT:{qQ(this,Z);break}case H.IN_TABLE:{F1(this,Z);break}case H.IN_TABLE_TEXT:{j1(this,Z);break}case H.IN_CAPTION:{RQ(this,Z);break}case H.IN_COLUMN_GROUP:{vQ(this,Z);break}case H.IN_TABLE_BODY:{L6(this,Z);break}case H.IN_ROW:{F3(this,Z);break}case H.IN_CELL:{fQ(this,Z);break}case H.IN_SELECT:{w3(this,Z);break}case H.IN_SELECT_IN_TABLE:{NQ(this,Z);break}case H.IN_TEMPLATE:{DQ(this,Z);break}case H.AFTER_BODY:{x3(this,Z);break}case H.IN_FRAMESET:{gQ(this,Z);break}case H.AFTER_FRAMESET:{mQ(this,Z);break}case H.AFTER_AFTER_BODY:{Q4(this,Z);break}default:}}onEof(Z){switch(this.insertionMode){case H.INITIAL:{V1(this,Z);break}case H.BEFORE_HTML:{H1(this,Z);break}case H.BEFORE_HEAD:{z1(this,Z);break}case H.IN_HEAD:{q1(this,Z);break}case H.IN_HEAD_NO_SCRIPT:{U1(this,Z);break}case H.AFTER_HEAD:{B1(this,Z);break}case H.IN_BODY:case H.IN_TABLE:case H.IN_CAPTION:case H.IN_COLUMN_GROUP:case H.IN_TABLE_BODY:case H.IN_ROW:case H.IN_CELL:case H.IN_SELECT:case H.IN_SELECT_IN_TABLE:{z3(this,Z);break}case H.TEXT:{UQ(this,Z);break}case H.IN_TABLE_TEXT:{j1(this,Z);break}case H.IN_TEMPLATE:{P3(this,Z);break}case H.AFTER_BODY:case H.IN_FRAMESET:case H.AFTER_FRAMESET:case H.AFTER_AFTER_BODY:case H.AFTER_AFTER_FRAMESET:{P6(this,Z);break}default:}}onWhitespaceCharacter(Z){if(this.skipNextNewLine){if(this.skipNextNewLine=!1,Z.chars.charCodeAt(0)===V.LINE_FEED){if(Z.chars.length===1)return;Z.chars=Z.chars.substr(1)}}if(this.tokenizer.inForeignNode){this._insertCharacters(Z);return}switch(this.insertionMode){case H.IN_HEAD:case H.IN_HEAD_NO_SCRIPT:case H.AFTER_HEAD:case H.TEXT:case H.IN_COLUMN_GROUP:case H.IN_SELECT:case H.IN_SELECT_IN_TABLE:case H.IN_FRAMESET:case H.AFTER_FRAMESET:{this._insertCharacters(Z);break}case H.IN_BODY:case H.IN_CAPTION:case H.IN_CELL:case H.IN_TEMPLATE:case H.AFTER_BODY:case H.AFTER_AFTER_BODY:case H.AFTER_AFTER_FRAMESET:{Y3(this,Z);break}case H.IN_TABLE:case H.IN_TABLE_BODY:case H.IN_ROW:{B6(this,Z);break}case H.IN_TABLE_TEXT:{q3(this,Z);break}default:}}}function H5(Z,Q){let X=Z.activeFormattingElements.getElementEntryInScopeWithTagName(Q.tagName);if(X){if(!Z.openElements.contains(X.element))Z.activeFormattingElements.removeEntry(X),X=null;else if(!Z.openElements.hasInScope(Q.tagID))X=null}else H3(Z,Q);return X}function z5(Z,Q){let X=null,J=Z.openElements.stackTop;for(;J>=0;J--){let Y=Z.openElements.items[J];if(Y===Q.element)break;if(Z._isSpecialElement(Y,Z.openElements.tagIDs[J]))X=Y}if(!X)Z.openElements.shortenToLength(Math.max(J,0)),Z.activeFormattingElements.removeEntry(Q);return X}function q5(Z,Q,X){let J=Q,Y=Z.openElements.getCommonAncestor(Q);for(let W=0,z=Y;z!==X;W++,z=Y){Y=Z.openElements.getCommonAncestor(z);let q=Z.activeFormattingElements.getElementEntry(z),L=q&&W>=V5;if(!q||L){if(L)Z.activeFormattingElements.removeEntry(q);Z.openElements.remove(z)}else{if(z=U5(Z,q),J===Q)Z.activeFormattingElements.bookmark=q;Z.treeAdapter.detachNode(J),Z.treeAdapter.appendChild(z,J),J=z}}return J}function U5(Z,Q){let X=Z.treeAdapter.getNamespaceURI(Q.element),J=Z.treeAdapter.createElement(Q.token.tagName,X,Q.token.attrs);return Z.openElements.replace(Q.element,J),Q.element=J,J}function B5(Z,Q,X){let J=Z.treeAdapter.getTagName(Q),Y=_0(J);if(Z._isElementCausesFosterParenting(Y))Z._fosterParentElement(X);else{let W=Z.treeAdapter.getNamespaceURI(Q);if(Y===K.TEMPLATE&&W===P.HTML)Q=Z.treeAdapter.getTemplateContent(Q);Z.treeAdapter.appendChild(Q,X)}}function F5(Z,Q,X){let J=Z.treeAdapter.getNamespaceURI(X.element),{token:Y}=X,W=Z.treeAdapter.createElement(Y.tagName,J,Y.attrs);Z._adoptNodes(Q,W),Z.treeAdapter.appendChild(Q,W),Z.activeFormattingElements.insertElementAfterBookmark(W,Y),Z.activeFormattingElements.removeEntry(X),Z.openElements.remove(X.element),Z.openElements.insertAfter(Q,W,Y.tagID)}function w6(Z,Q){for(let X=0;X<W5;X++){let J=H5(Z,Q);if(!J)break;let Y=z5(Z,J);if(!Y)break;Z.activeFormattingElements.bookmark=J;let W=q5(Z,Y,J.element),z=Z.openElements.getCommonAncestor(J.element);if(Z.treeAdapter.detachNode(W),z)B5(Z,z,W);F5(Z,Y,J)}}function F6(Z,Q){Z._appendCommentNode(Q,Z.openElements.currentTmplContentOrNode)}function L5(Z,Q){Z._appendCommentNode(Q,Z.openElements.items[0])}function w5(Z,Q){Z._appendCommentNode(Q,Z.document)}function P6(Z,Q){if(Z.stopped=!0,Q.location){let X=Z.fragmentContext?0:2;for(let J=Z.openElements.stackTop;J>=X;J--)Z._setEndLocation(Z.openElements.items[J],Q);if(!Z.fragmentContext&&Z.openElements.stackTop>=0){let J=Z.openElements.items[0],Y=Z.treeAdapter.getNodeSourceCodeLocation(J);if(Y&&!Y.endTag){if(Z._setEndLocation(J,Q),Z.openElements.stackTop>=1){let W=Z.openElements.items[1],z=Z.treeAdapter.getNodeSourceCodeLocation(W);if(z&&!z.endTag)Z._setEndLocation(W,Q)}}}}}function P5(Z,Q){Z._setDocumentType(Q);let X=Q.forceQuirks?Z0.QUIRKS:r8(Q);if(!s8(Q))Z._err(Q,F.nonConformingDoctype);Z.treeAdapter.setDocumentMode(Z.document,X),Z.insertionMode=H.BEFORE_HTML}function V1(Z,Q){Z._err(Q,F.missingDoctype,!0),Z.treeAdapter.setDocumentMode(Z.document,Z0.QUIRKS),Z.insertionMode=H.BEFORE_HTML,Z._processToken(Q)}function x5(Z,Q){if(Q.tagID===K.HTML)Z._insertElement(Q,P.HTML),Z.insertionMode=H.BEFORE_HEAD;else H1(Z,Q)}function O5(Z,Q){let X=Q.tagID;if(X===K.HTML||X===K.HEAD||X===K.BODY||X===K.BR)H1(Z,Q)}function H1(Z,Q){Z._insertFakeRootElement(),Z.insertionMode=H.BEFORE_HEAD,Z._processToken(Q)}function b5(Z,Q){switch(Q.tagID){case K.HTML:{t(Z,Q);break}case K.HEAD:{Z._insertElement(Q,P.HTML),Z.headElement=Z.openElements.current,Z.insertionMode=H.IN_HEAD;break}default:z1(Z,Q)}}function C5(Z,Q){let X=Q.tagID;if(X===K.HEAD||X===K.BODY||X===K.HTML||X===K.BR)z1(Z,Q);else Z._err(Q,F.endTagWithoutMatchingOpenElement)}function z1(Z,Q){Z._insertFakeElement(B.HEAD,K.HEAD),Z.headElement=Z.openElements.current,Z.insertionMode=H.IN_HEAD,Z._processToken(Q)}function q0(Z,Q){switch(Q.tagID){case K.HTML:{t(Z,Q);break}case K.BASE:case K.BASEFONT:case K.BGSOUND:case K.LINK:case K.META:{Z._appendElement(Q,P.HTML),Q.ackSelfClosing=!0;break}case K.TITLE:{Z._switchToTextParsing(Q,n.RCDATA);break}case K.NOSCRIPT:{if(Z.options.scriptingEnabled)Z._switchToTextParsing(Q,n.RAWTEXT);else Z._insertElement(Q,P.HTML),Z.insertionMode=H.IN_HEAD_NO_SCRIPT;break}case K.NOFRAMES:case K.STYLE:{Z._switchToTextParsing(Q,n.RAWTEXT);break}case K.SCRIPT:{Z._switchToTextParsing(Q,n.SCRIPT_DATA);break}case K.TEMPLATE:{Z._insertTemplate(Q),Z.activeFormattingElements.insertMarker(),Z.framesetOk=!1,Z.insertionMode=H.IN_TEMPLATE,Z.tmplInsertionModeStack.unshift(H.IN_TEMPLATE);break}case K.HEAD:{Z._err(Q,F.misplacedStartTagForHeadElement);break}default:q1(Z,Q)}}function R5(Z,Q){switch(Q.tagID){case K.HEAD:{Z.openElements.pop(),Z.insertionMode=H.AFTER_HEAD;break}case K.BODY:case K.BR:case K.HTML:{q1(Z,Q);break}case K.TEMPLATE:{S0(Z,Q);break}default:Z._err(Q,F.endTagWithoutMatchingOpenElement)}}function S0(Z,Q){if(Z.openElements.tmplCount>0){if(Z.openElements.generateImpliedEndTagsThoroughly(),Z.openElements.currentTagId!==K.TEMPLATE)Z._err(Q,F.closingOfElementWithOpenChildElements);Z.openElements.popUntilTagNamePopped(K.TEMPLATE),Z.activeFormattingElements.clearToLastMarker(),Z.tmplInsertionModeStack.shift(),Z._resetInsertionMode()}else Z._err(Q,F.endTagWithoutMatchingOpenElement)}function q1(Z,Q){Z.openElements.pop(),Z.insertionMode=H.AFTER_HEAD,Z._processToken(Q)}function v5(Z,Q){switch(Q.tagID){case K.HTML:{t(Z,Q);break}case K.BASEFONT:case K.BGSOUND:case K.HEAD:case K.LINK:case K.META:case K.NOFRAMES:case K.STYLE:{q0(Z,Q);break}case K.NOSCRIPT:{Z._err(Q,F.nestedNoscriptInHead);break}default:U1(Z,Q)}}function y5(Z,Q){switch(Q.tagID){case K.NOSCRIPT:{Z.openElements.pop(),Z.insertionMode=H.IN_HEAD;break}case K.BR:{U1(Z,Q);break}default:Z._err(Q,F.endTagWithoutMatchingOpenElement)}}function U1(Z,Q){let X=Q.type===_.EOF?F.openElementsLeftAfterEof:F.disallowedContentInNoscriptInHead;Z._err(Q,X),Z.openElements.pop(),Z.insertionMode=H.IN_HEAD,Z._processToken(Q)}function f5(Z,Q){switch(Q.tagID){case K.HTML:{t(Z,Q);break}case K.BODY:{Z._insertElement(Q,P.HTML),Z.framesetOk=!1,Z.insertionMode=H.IN_BODY;break}case K.FRAMESET:{Z._insertElement(Q,P.HTML),Z.insertionMode=H.IN_FRAMESET;break}case K.BASE:case K.BASEFONT:case K.BGSOUND:case K.LINK:case K.META:case K.NOFRAMES:case K.SCRIPT:case K.STYLE:case K.TEMPLATE:case K.TITLE:{Z._err(Q,F.abandonedHeadElementChild),Z.openElements.push(Z.headElement,K.HEAD),q0(Z,Q),Z.openElements.remove(Z.headElement);break}case K.HEAD:{Z._err(Q,F.misplacedStartTagForHeadElement);break}default:B1(Z,Q)}}function M5(Z,Q){switch(Q.tagID){case K.BODY:case K.HTML:case K.BR:{B1(Z,Q);break}case K.TEMPLATE:{S0(Z,Q);break}default:Z._err(Q,F.endTagWithoutMatchingOpenElement)}}function B1(Z,Q){Z._insertFakeElement(B.BODY,K.BODY),Z.insertionMode=H.IN_BODY,Y4(Z,Q)}function Y4(Z,Q){switch(Q.type){case _.CHARACTER:{W3(Z,Q);break}case _.WHITESPACE_CHARACTER:{Y3(Z,Q);break}case _.COMMENT:{F6(Z,Q);break}case _.START_TAG:{t(Z,Q);break}case _.END_TAG:{W4(Z,Q);break}case _.EOF:{z3(Z,Q);break}default:}}function Y3(Z,Q){Z._reconstructActiveFormattingElements(),Z._insertCharacters(Q)}function W3(Z,Q){Z._reconstructActiveFormattingElements(),Z._insertCharacters(Q),Z.framesetOk=!1}function N5(Z,Q){if(Z.openElements.tmplCount===0)Z.treeAdapter.adoptAttributes(Z.openElements.items[0],Q.attrs)}function h5(Z,Q){let X=Z.openElements.tryPeekProperlyNestedBodyElement();if(X&&Z.openElements.tmplCount===0)Z.framesetOk=!1,Z.treeAdapter.adoptAttributes(X,Q.attrs)}function D5(Z,Q){let X=Z.openElements.tryPeekProperlyNestedBodyElement();if(Z.framesetOk&&X)Z.treeAdapter.detachNode(X),Z.openElements.popAllUpToHtmlElement(),Z._insertElement(Q,P.HTML),Z.insertionMode=H.IN_FRAMESET}function $5(Z,Q){if(Z.openElements.hasInButtonScope(K.P))Z._closePElement();Z._insertElement(Q,P.HTML)}function G5(Z,Q){if(Z.openElements.hasInButtonScope(K.P))Z._closePElement();if(Z.openElements.currentTagId!==void 0&&Y1.has(Z.openElements.currentTagId))Z.openElements.pop();Z._insertElement(Q,P.HTML)}function g5(Z,Q){if(Z.openElements.hasInButtonScope(K.P))Z._closePElement();Z._insertElement(Q,P.HTML),Z.skipNextNewLine=!0,Z.framesetOk=!1}function E5(Z,Q){let X=Z.openElements.tmplCount>0;if(!Z.formElement||X){if(Z.openElements.hasInButtonScope(K.P))Z._closePElement();if(Z._insertElement(Q,P.HTML),!X)Z.formElement=Z.openElements.current}}function m5(Z,Q){Z.framesetOk=!1;let X=Q.tagID;for(let J=Z.openElements.stackTop;J>=0;J--){let Y=Z.openElements.tagIDs[J];if(X===K.LI&&Y===K.LI||(X===K.DD||X===K.DT)&&(Y===K.DD||Y===K.DT)){Z.openElements.generateImpliedEndTagsWithExclusion(Y),Z.openElements.popUntilTagNamePopped(Y);break}if(Y!==K.ADDRESS&&Y!==K.DIV&&Y!==K.P&&Z._isSpecialElement(Z.openElements.items[J],Y))break}if(Z.openElements.hasInButtonScope(K.P))Z._closePElement();Z._insertElement(Q,P.HTML)}function k5(Z,Q){if(Z.openElements.hasInButtonScope(K.P))Z._closePElement();Z._insertElement(Q,P.HTML),Z.tokenizer.state=n.PLAINTEXT}function _5(Z,Q){if(Z.openElements.hasInScope(K.BUTTON))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(K.BUTTON);Z._reconstructActiveFormattingElements(),Z._insertElement(Q,P.HTML),Z.framesetOk=!1}function S5(Z,Q){let X=Z.activeFormattingElements.getElementEntryInScopeWithTagName(B.A);if(X)w6(Z,Q),Z.openElements.remove(X.element),Z.activeFormattingElements.removeEntry(X);Z._reconstructActiveFormattingElements(),Z._insertElement(Q,P.HTML),Z.activeFormattingElements.pushElement(Z.openElements.current,Q)}function I5(Z,Q){Z._reconstructActiveFormattingElements(),Z._insertElement(Q,P.HTML),Z.activeFormattingElements.pushElement(Z.openElements.current,Q)}function T5(Z,Q){if(Z._reconstructActiveFormattingElements(),Z.openElements.hasInScope(K.NOBR))w6(Z,Q),Z._reconstructActiveFormattingElements();Z._insertElement(Q,P.HTML),Z.activeFormattingElements.pushElement(Z.openElements.current,Q)}function A5(Z,Q){Z._reconstructActiveFormattingElements(),Z._insertElement(Q,P.HTML),Z.activeFormattingElements.insertMarker(),Z.framesetOk=!1}function u5(Z,Q){if(Z.treeAdapter.getDocumentMode(Z.document)!==Z0.QUIRKS&&Z.openElements.hasInButtonScope(K.P))Z._closePElement();Z._insertElement(Q,P.HTML),Z.framesetOk=!1,Z.insertionMode=H.IN_TABLE}function V3(Z,Q){Z._reconstructActiveFormattingElements(),Z._appendElement(Q,P.HTML),Z.framesetOk=!1,Q.ackSelfClosing=!0}function j3(Z){let Q=o1(Z,x0.TYPE);return Q!=null&&Q.toLowerCase()===Y5}function c5(Z,Q){if(Z._reconstructActiveFormattingElements(),Z._appendElement(Q,P.HTML),!j3(Q))Z.framesetOk=!1;Q.ackSelfClosing=!0}function l5(Z,Q){Z._appendElement(Q,P.HTML),Q.ackSelfClosing=!0}function d5(Z,Q){if(Z.openElements.hasInButtonScope(K.P))Z._closePElement();Z._appendElement(Q,P.HTML),Z.framesetOk=!1,Q.ackSelfClosing=!0}function i5(Z,Q){Q.tagName=B.IMG,Q.tagID=K.IMG,V3(Z,Q)}function a5(Z,Q){Z._insertElement(Q,P.HTML),Z.skipNextNewLine=!0,Z.tokenizer.state=n.RCDATA,Z.originalInsertionMode=Z.insertionMode,Z.framesetOk=!1,Z.insertionMode=H.TEXT}function p5(Z,Q){if(Z.openElements.hasInButtonScope(K.P))Z._closePElement();Z._reconstructActiveFormattingElements(),Z.framesetOk=!1,Z._switchToTextParsing(Q,n.RAWTEXT)}function s5(Z,Q){Z.framesetOk=!1,Z._switchToTextParsing(Q,n.RAWTEXT)}function X3(Z,Q){Z._switchToTextParsing(Q,n.RAWTEXT)}function r5(Z,Q){Z._reconstructActiveFormattingElements(),Z._insertElement(Q,P.HTML),Z.framesetOk=!1,Z.insertionMode=Z.insertionMode===H.IN_TABLE||Z.insertionMode===H.IN_CAPTION||Z.insertionMode===H.IN_TABLE_BODY||Z.insertionMode===H.IN_ROW||Z.insertionMode===H.IN_CELL?H.IN_SELECT_IN_TABLE:H.IN_SELECT}function o5(Z,Q){if(Z.openElements.currentTagId===K.OPTION)Z.openElements.pop();Z._reconstructActiveFormattingElements(),Z._insertElement(Q,P.HTML)}function n5(Z,Q){if(Z.openElements.hasInScope(K.RUBY))Z.openElements.generateImpliedEndTags();Z._insertElement(Q,P.HTML)}function t5(Z,Q){if(Z.openElements.hasInScope(K.RUBY))Z.openElements.generateImpliedEndTagsWithExclusion(K.RTC);Z._insertElement(Q,P.HTML)}function e5(Z,Q){if(Z._reconstructActiveFormattingElements(),q6(Q),Z4(Q),Q.selfClosing)Z._appendElement(Q,P.MATHML);else Z._insertElement(Q,P.MATHML);Q.ackSelfClosing=!0}function ZQ(Z,Q){if(Z._reconstructActiveFormattingElements(),U6(Q),Z4(Q),Q.selfClosing)Z._appendElement(Q,P.SVG);else Z._insertElement(Q,P.SVG);Q.ackSelfClosing=!0}function K3(Z,Q){Z._reconstructActiveFormattingElements(),Z._insertElement(Q,P.HTML)}function t(Z,Q){switch(Q.tagID){case K.I:case K.S:case K.B:case K.U:case K.EM:case K.TT:case K.BIG:case K.CODE:case K.FONT:case K.SMALL:case K.STRIKE:case K.STRONG:{I5(Z,Q);break}case K.A:{S5(Z,Q);break}case K.H1:case K.H2:case K.H3:case K.H4:case K.H5:case K.H6:{G5(Z,Q);break}case K.P:case K.DL:case K.OL:case K.UL:case K.DIV:case K.DIR:case K.NAV:case K.MAIN:case K.MENU:case K.ASIDE:case K.CENTER:case K.FIGURE:case K.FOOTER:case K.HEADER:case K.HGROUP:case K.DIALOG:case K.DETAILS:case K.ADDRESS:case K.ARTICLE:case K.SEARCH:case K.SECTION:case K.SUMMARY:case K.FIELDSET:case K.BLOCKQUOTE:case K.FIGCAPTION:{$5(Z,Q);break}case K.LI:case K.DD:case K.DT:{m5(Z,Q);break}case K.BR:case K.IMG:case K.WBR:case K.AREA:case K.EMBED:case K.KEYGEN:{V3(Z,Q);break}case K.HR:{d5(Z,Q);break}case K.RB:case K.RTC:{n5(Z,Q);break}case K.RT:case K.RP:{t5(Z,Q);break}case K.PRE:case K.LISTING:{g5(Z,Q);break}case K.XMP:{p5(Z,Q);break}case K.SVG:{ZQ(Z,Q);break}case K.HTML:{N5(Z,Q);break}case K.BASE:case K.LINK:case K.META:case K.STYLE:case K.TITLE:case K.SCRIPT:case K.BGSOUND:case K.BASEFONT:case K.TEMPLATE:{q0(Z,Q);break}case K.BODY:{h5(Z,Q);break}case K.FORM:{E5(Z,Q);break}case K.NOBR:{T5(Z,Q);break}case K.MATH:{e5(Z,Q);break}case K.TABLE:{u5(Z,Q);break}case K.INPUT:{c5(Z,Q);break}case K.PARAM:case K.TRACK:case K.SOURCE:{l5(Z,Q);break}case K.IMAGE:{i5(Z,Q);break}case K.BUTTON:{_5(Z,Q);break}case K.APPLET:case K.OBJECT:case K.MARQUEE:{A5(Z,Q);break}case K.IFRAME:{s5(Z,Q);break}case K.SELECT:{r5(Z,Q);break}case K.OPTION:case K.OPTGROUP:{o5(Z,Q);break}case K.NOEMBED:case K.NOFRAMES:{X3(Z,Q);break}case K.FRAMESET:{D5(Z,Q);break}case K.TEXTAREA:{a5(Z,Q);break}case K.NOSCRIPT:{if(Z.options.scriptingEnabled)X3(Z,Q);else K3(Z,Q);break}case K.PLAINTEXT:{k5(Z,Q);break}case K.COL:case K.TH:case K.TD:case K.TR:case K.HEAD:case K.FRAME:case K.TBODY:case K.TFOOT:case K.THEAD:case K.CAPTION:case K.COLGROUP:break;default:K3(Z,Q)}}function QQ(Z,Q){if(Z.openElements.hasInScope(K.BODY)){if(Z.insertionMode=H.AFTER_BODY,Z.options.sourceCodeLocationInfo){let X=Z.openElements.tryPeekProperlyNestedBodyElement();if(X)Z._setEndLocation(X,Q)}}}function XQ(Z,Q){if(Z.openElements.hasInScope(K.BODY))Z.insertionMode=H.AFTER_BODY,x3(Z,Q)}function KQ(Z,Q){let X=Q.tagID;if(Z.openElements.hasInScope(X))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(X)}function JQ(Z){let Q=Z.openElements.tmplCount>0,{formElement:X}=Z;if(!Q)Z.formElement=null;if((X||Q)&&Z.openElements.hasInScope(K.FORM)){if(Z.openElements.generateImpliedEndTags(),Q)Z.openElements.popUntilTagNamePopped(K.FORM);else if(X)Z.openElements.remove(X)}}function YQ(Z){if(!Z.openElements.hasInButtonScope(K.P))Z._insertFakeElement(B.P,K.P);Z._closePElement()}function WQ(Z){if(Z.openElements.hasInListItemScope(K.LI))Z.openElements.generateImpliedEndTagsWithExclusion(K.LI),Z.openElements.popUntilTagNamePopped(K.LI)}function VQ(Z,Q){let X=Q.tagID;if(Z.openElements.hasInScope(X))Z.openElements.generateImpliedEndTagsWithExclusion(X),Z.openElements.popUntilTagNamePopped(X)}function jQ(Z){if(Z.openElements.hasNumberedHeaderInScope())Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilNumberedHeaderPopped()}function HQ(Z,Q){let X=Q.tagID;if(Z.openElements.hasInScope(X))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(X),Z.activeFormattingElements.clearToLastMarker()}function zQ(Z){Z._reconstructActiveFormattingElements(),Z._insertFakeElement(B.BR,K.BR),Z.openElements.pop(),Z.framesetOk=!1}function H3(Z,Q){let{tagName:X,tagID:J}=Q;for(let Y=Z.openElements.stackTop;Y>0;Y--){let W=Z.openElements.items[Y],z=Z.openElements.tagIDs[Y];if(J===z&&(J!==K.UNKNOWN||Z.treeAdapter.getTagName(W)===X)){if(Z.openElements.generateImpliedEndTagsWithExclusion(J),Z.openElements.stackTop>=Y)Z.openElements.shortenToLength(Y);break}if(Z._isSpecialElement(W,z))break}}function W4(Z,Q){switch(Q.tagID){case K.A:case K.B:case K.I:case K.S:case K.U:case K.EM:case K.TT:case K.BIG:case K.CODE:case K.FONT:case K.NOBR:case K.SMALL:case K.STRIKE:case K.STRONG:{w6(Z,Q);break}case K.P:{YQ(Z);break}case K.DL:case K.UL:case K.OL:case K.DIR:case K.DIV:case K.NAV:case K.PRE:case K.MAIN:case K.MENU:case K.ASIDE:case K.BUTTON:case K.CENTER:case K.FIGURE:case K.FOOTER:case K.HEADER:case K.HGROUP:case K.DIALOG:case K.ADDRESS:case K.ARTICLE:case K.DETAILS:case K.SEARCH:case K.SECTION:case K.SUMMARY:case K.LISTING:case K.FIELDSET:case K.BLOCKQUOTE:case K.FIGCAPTION:{KQ(Z,Q);break}case K.LI:{WQ(Z);break}case K.DD:case K.DT:{VQ(Z,Q);break}case K.H1:case K.H2:case K.H3:case K.H4:case K.H5:case K.H6:{jQ(Z);break}case K.BR:{zQ(Z);break}case K.BODY:{QQ(Z,Q);break}case K.HTML:{XQ(Z,Q);break}case K.FORM:{JQ(Z);break}case K.APPLET:case K.OBJECT:case K.MARQUEE:{HQ(Z,Q);break}case K.TEMPLATE:{S0(Z,Q);break}default:H3(Z,Q)}}function z3(Z,Q){if(Z.tmplInsertionModeStack.length>0)P3(Z,Q);else P6(Z,Q)}function qQ(Z,Q){var X;if(Q.tagID===K.SCRIPT)(X=Z.scriptHandler)===null||X===void 0||X.call(Z,Z.openElements.current);Z.openElements.pop(),Z.insertionMode=Z.originalInsertionMode}function UQ(Z,Q){Z._err(Q,F.eofInElementThatCanContainOnlyText),Z.openElements.pop(),Z.insertionMode=Z.originalInsertionMode,Z.onEof(Q)}function B6(Z,Q){if(Z.openElements.currentTagId!==void 0&&J3.has(Z.openElements.currentTagId))switch(Z.pendingCharacterTokens.length=0,Z.hasNonWhitespacePendingCharacterToken=!1,Z.originalInsertionMode=Z.insertionMode,Z.insertionMode=H.IN_TABLE_TEXT,Q.type){case _.CHARACTER:{U3(Z,Q);break}case _.WHITESPACE_CHARACTER:{q3(Z,Q);break}}else L1(Z,Q)}function BQ(Z,Q){Z.openElements.clearBackToTableContext(),Z.activeFormattingElements.insertMarker(),Z._insertElement(Q,P.HTML),Z.insertionMode=H.IN_CAPTION}function FQ(Z,Q){Z.openElements.clearBackToTableContext(),Z._insertElement(Q,P.HTML),Z.insertionMode=H.IN_COLUMN_GROUP}function LQ(Z,Q){Z.openElements.clearBackToTableContext(),Z._insertFakeElement(B.COLGROUP,K.COLGROUP),Z.insertionMode=H.IN_COLUMN_GROUP,x6(Z,Q)}function wQ(Z,Q){Z.openElements.clearBackToTableContext(),Z._insertElement(Q,P.HTML),Z.insertionMode=H.IN_TABLE_BODY}function PQ(Z,Q){Z.openElements.clearBackToTableContext(),Z._insertFakeElement(B.TBODY,K.TBODY),Z.insertionMode=H.IN_TABLE_BODY,V4(Z,Q)}function xQ(Z,Q){if(Z.openElements.hasInTableScope(K.TABLE))Z.openElements.popUntilTagNamePopped(K.TABLE),Z._resetInsertionMode(),Z._processStartTag(Q)}function OQ(Z,Q){if(j3(Q))Z._appendElement(Q,P.HTML);else L1(Z,Q);Q.ackSelfClosing=!0}function bQ(Z,Q){if(!Z.formElement&&Z.openElements.tmplCount===0)Z._insertElement(Q,P.HTML),Z.formElement=Z.openElements.current,Z.openElements.pop()}function d0(Z,Q){switch(Q.tagID){case K.TD:case K.TH:case K.TR:{PQ(Z,Q);break}case K.STYLE:case K.SCRIPT:case K.TEMPLATE:{q0(Z,Q);break}case K.COL:{LQ(Z,Q);break}case K.FORM:{bQ(Z,Q);break}case K.TABLE:{xQ(Z,Q);break}case K.TBODY:case K.TFOOT:case K.THEAD:{wQ(Z,Q);break}case K.INPUT:{OQ(Z,Q);break}case K.CAPTION:{BQ(Z,Q);break}case K.COLGROUP:{FQ(Z,Q);break}default:L1(Z,Q)}}function F1(Z,Q){switch(Q.tagID){case K.TABLE:{if(Z.openElements.hasInTableScope(K.TABLE))Z.openElements.popUntilTagNamePopped(K.TABLE),Z._resetInsertionMode();break}case K.TEMPLATE:{S0(Z,Q);break}case K.BODY:case K.CAPTION:case K.COL:case K.COLGROUP:case K.HTML:case K.TBODY:case K.TD:case K.TFOOT:case K.TH:case K.THEAD:case K.TR:break;default:L1(Z,Q)}}function L1(Z,Q){let X=Z.fosterParentingEnabled;Z.fosterParentingEnabled=!0,Y4(Z,Q),Z.fosterParentingEnabled=X}function q3(Z,Q){Z.pendingCharacterTokens.push(Q)}function U3(Z,Q){Z.pendingCharacterTokens.push(Q),Z.hasNonWhitespacePendingCharacterToken=!0}function j1(Z,Q){let X=0;if(Z.hasNonWhitespacePendingCharacterToken)for(;X<Z.pendingCharacterTokens.length;X++)L1(Z,Z.pendingCharacterTokens[X]);else for(;X<Z.pendingCharacterTokens.length;X++)Z._insertCharacters(Z.pendingCharacterTokens[X]);Z.insertionMode=Z.originalInsertionMode,Z._processToken(Q)}var B3=new Set([K.CAPTION,K.COL,K.COLGROUP,K.TBODY,K.TD,K.TFOOT,K.TH,K.THEAD,K.TR]);function CQ(Z,Q){let X=Q.tagID;if(B3.has(X)){if(Z.openElements.hasInTableScope(K.CAPTION))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(K.CAPTION),Z.activeFormattingElements.clearToLastMarker(),Z.insertionMode=H.IN_TABLE,d0(Z,Q)}else t(Z,Q)}function RQ(Z,Q){let X=Q.tagID;switch(X){case K.CAPTION:case K.TABLE:{if(Z.openElements.hasInTableScope(K.CAPTION)){if(Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(K.CAPTION),Z.activeFormattingElements.clearToLastMarker(),Z.insertionMode=H.IN_TABLE,X===K.TABLE)F1(Z,Q)}break}case K.BODY:case K.COL:case K.COLGROUP:case K.HTML:case K.TBODY:case K.TD:case K.TFOOT:case K.TH:case K.THEAD:case K.TR:break;default:W4(Z,Q)}}function x6(Z,Q){switch(Q.tagID){case K.HTML:{t(Z,Q);break}case K.COL:{Z._appendElement(Q,P.HTML),Q.ackSelfClosing=!0;break}case K.TEMPLATE:{q0(Z,Q);break}default:X4(Z,Q)}}function vQ(Z,Q){switch(Q.tagID){case K.COLGROUP:{if(Z.openElements.currentTagId===K.COLGROUP)Z.openElements.pop(),Z.insertionMode=H.IN_TABLE;break}case K.TEMPLATE:{S0(Z,Q);break}case K.COL:break;default:X4(Z,Q)}}function X4(Z,Q){if(Z.openElements.currentTagId===K.COLGROUP)Z.openElements.pop(),Z.insertionMode=H.IN_TABLE,Z._processToken(Q)}function V4(Z,Q){switch(Q.tagID){case K.TR:{Z.openElements.clearBackToTableBodyContext(),Z._insertElement(Q,P.HTML),Z.insertionMode=H.IN_ROW;break}case K.TH:case K.TD:{Z.openElements.clearBackToTableBodyContext(),Z._insertFakeElement(B.TR,K.TR),Z.insertionMode=H.IN_ROW,j4(Z,Q);break}case K.CAPTION:case K.COL:case K.COLGROUP:case K.TBODY:case K.TFOOT:case K.THEAD:{if(Z.openElements.hasTableBodyContextInTableScope())Z.openElements.clearBackToTableBodyContext(),Z.openElements.pop(),Z.insertionMode=H.IN_TABLE,d0(Z,Q);break}default:d0(Z,Q)}}function L6(Z,Q){let X=Q.tagID;switch(Q.tagID){case K.TBODY:case K.TFOOT:case K.THEAD:{if(Z.openElements.hasInTableScope(X))Z.openElements.clearBackToTableBodyContext(),Z.openElements.pop(),Z.insertionMode=H.IN_TABLE;break}case K.TABLE:{if(Z.openElements.hasTableBodyContextInTableScope())Z.openElements.clearBackToTableBodyContext(),Z.openElements.pop(),Z.insertionMode=H.IN_TABLE,F1(Z,Q);break}case K.BODY:case K.CAPTION:case K.COL:case K.COLGROUP:case K.HTML:case K.TD:case K.TH:case K.TR:break;default:F1(Z,Q)}}function j4(Z,Q){switch(Q.tagID){case K.TH:case K.TD:{Z.openElements.clearBackToTableRowContext(),Z._insertElement(Q,P.HTML),Z.insertionMode=H.IN_CELL,Z.activeFormattingElements.insertMarker();break}case K.CAPTION:case K.COL:case K.COLGROUP:case K.TBODY:case K.TFOOT:case K.THEAD:case K.TR:{if(Z.openElements.hasInTableScope(K.TR))Z.openElements.clearBackToTableRowContext(),Z.openElements.pop(),Z.insertionMode=H.IN_TABLE_BODY,V4(Z,Q);break}default:d0(Z,Q)}}function F3(Z,Q){switch(Q.tagID){case K.TR:{if(Z.openElements.hasInTableScope(K.TR))Z.openElements.clearBackToTableRowContext(),Z.openElements.pop(),Z.insertionMode=H.IN_TABLE_BODY;break}case K.TABLE:{if(Z.openElements.hasInTableScope(K.TR))Z.openElements.clearBackToTableRowContext(),Z.openElements.pop(),Z.insertionMode=H.IN_TABLE_BODY,L6(Z,Q);break}case K.TBODY:case K.TFOOT:case K.THEAD:{if(Z.openElements.hasInTableScope(Q.tagID)||Z.openElements.hasInTableScope(K.TR))Z.openElements.clearBackToTableRowContext(),Z.openElements.pop(),Z.insertionMode=H.IN_TABLE_BODY,L6(Z,Q);break}case K.BODY:case K.CAPTION:case K.COL:case K.COLGROUP:case K.HTML:case K.TD:case K.TH:break;default:F1(Z,Q)}}function yQ(Z,Q){let X=Q.tagID;if(B3.has(X)){if(Z.openElements.hasInTableScope(K.TD)||Z.openElements.hasInTableScope(K.TH))Z._closeTableCell(),j4(Z,Q)}else t(Z,Q)}function fQ(Z,Q){let X=Q.tagID;switch(X){case K.TD:case K.TH:{if(Z.openElements.hasInTableScope(X))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(X),Z.activeFormattingElements.clearToLastMarker(),Z.insertionMode=H.IN_ROW;break}case K.TABLE:case K.TBODY:case K.TFOOT:case K.THEAD:case K.TR:{if(Z.openElements.hasInTableScope(X))Z._closeTableCell(),F3(Z,Q);break}case K.BODY:case K.CAPTION:case K.COL:case K.COLGROUP:case K.HTML:break;default:W4(Z,Q)}}function L3(Z,Q){switch(Q.tagID){case K.HTML:{t(Z,Q);break}case K.OPTION:{if(Z.openElements.currentTagId===K.OPTION)Z.openElements.pop();Z._insertElement(Q,P.HTML);break}case K.OPTGROUP:{if(Z.openElements.currentTagId===K.OPTION)Z.openElements.pop();if(Z.openElements.currentTagId===K.OPTGROUP)Z.openElements.pop();Z._insertElement(Q,P.HTML);break}case K.HR:{if(Z.openElements.currentTagId===K.OPTION)Z.openElements.pop();if(Z.openElements.currentTagId===K.OPTGROUP)Z.openElements.pop();Z._appendElement(Q,P.HTML),Q.ackSelfClosing=!0;break}case K.INPUT:case K.KEYGEN:case K.TEXTAREA:case K.SELECT:{if(Z.openElements.hasInSelectScope(K.SELECT)){if(Z.openElements.popUntilTagNamePopped(K.SELECT),Z._resetInsertionMode(),Q.tagID!==K.SELECT)Z._processStartTag(Q)}break}case K.SCRIPT:case K.TEMPLATE:{q0(Z,Q);break}default:}}function w3(Z,Q){switch(Q.tagID){case K.OPTGROUP:{if(Z.openElements.stackTop>0&&Z.openElements.currentTagId===K.OPTION&&Z.openElements.tagIDs[Z.openElements.stackTop-1]===K.OPTGROUP)Z.openElements.pop();if(Z.openElements.currentTagId===K.OPTGROUP)Z.openElements.pop();break}case K.OPTION:{if(Z.openElements.currentTagId===K.OPTION)Z.openElements.pop();break}case K.SELECT:{if(Z.openElements.hasInSelectScope(K.SELECT))Z.openElements.popUntilTagNamePopped(K.SELECT),Z._resetInsertionMode();break}case K.TEMPLATE:{S0(Z,Q);break}default:}}function MQ(Z,Q){let X=Q.tagID;if(X===K.CAPTION||X===K.TABLE||X===K.TBODY||X===K.TFOOT||X===K.THEAD||X===K.TR||X===K.TD||X===K.TH)Z.openElements.popUntilTagNamePopped(K.SELECT),Z._resetInsertionMode(),Z._processStartTag(Q);else L3(Z,Q)}function NQ(Z,Q){let X=Q.tagID;if(X===K.CAPTION||X===K.TABLE||X===K.TBODY||X===K.TFOOT||X===K.THEAD||X===K.TR||X===K.TD||X===K.TH){if(Z.openElements.hasInTableScope(X))Z.openElements.popUntilTagNamePopped(K.SELECT),Z._resetInsertionMode(),Z.onEndTag(Q)}else w3(Z,Q)}function hQ(Z,Q){switch(Q.tagID){case K.BASE:case K.BASEFONT:case K.BGSOUND:case K.LINK:case K.META:case K.NOFRAMES:case K.SCRIPT:case K.STYLE:case K.TEMPLATE:case K.TITLE:{q0(Z,Q);break}case K.CAPTION:case K.COLGROUP:case K.TBODY:case K.TFOOT:case K.THEAD:{Z.tmplInsertionModeStack[0]=H.IN_TABLE,Z.insertionMode=H.IN_TABLE,d0(Z,Q);break}case K.COL:{Z.tmplInsertionModeStack[0]=H.IN_COLUMN_GROUP,Z.insertionMode=H.IN_COLUMN_GROUP,x6(Z,Q);break}case K.TR:{Z.tmplInsertionModeStack[0]=H.IN_TABLE_BODY,Z.insertionMode=H.IN_TABLE_BODY,V4(Z,Q);break}case K.TD:case K.TH:{Z.tmplInsertionModeStack[0]=H.IN_ROW,Z.insertionMode=H.IN_ROW,j4(Z,Q);break}default:Z.tmplInsertionModeStack[0]=H.IN_BODY,Z.insertionMode=H.IN_BODY,t(Z,Q)}}function DQ(Z,Q){if(Q.tagID===K.TEMPLATE)S0(Z,Q)}function P3(Z,Q){if(Z.openElements.tmplCount>0)Z.openElements.popUntilTagNamePopped(K.TEMPLATE),Z.activeFormattingElements.clearToLastMarker(),Z.tmplInsertionModeStack.shift(),Z._resetInsertionMode(),Z.onEof(Q);else P6(Z,Q)}function $Q(Z,Q){if(Q.tagID===K.HTML)t(Z,Q);else K4(Z,Q)}function x3(Z,Q){var X;if(Q.tagID===K.HTML){if(!Z.fragmentContext)Z.insertionMode=H.AFTER_AFTER_BODY;if(Z.options.sourceCodeLocationInfo&&Z.openElements.tagIDs[0]===K.HTML){Z._setEndLocation(Z.openElements.items[0],Q);let J=Z.openElements.items[1];if(J&&!((X=Z.treeAdapter.getNodeSourceCodeLocation(J))===null||X===void 0?void 0:X.endTag))Z._setEndLocation(J,Q)}}else K4(Z,Q)}function K4(Z,Q){Z.insertionMode=H.IN_BODY,Y4(Z,Q)}function GQ(Z,Q){switch(Q.tagID){case K.HTML:{t(Z,Q);break}case K.FRAMESET:{Z._insertElement(Q,P.HTML);break}case K.FRAME:{Z._appendElement(Q,P.HTML),Q.ackSelfClosing=!0;break}case K.NOFRAMES:{q0(Z,Q);break}default:}}function gQ(Z,Q){if(Q.tagID===K.FRAMESET&&!Z.openElements.isRootHtmlElementCurrent()){if(Z.openElements.pop(),!Z.fragmentContext&&Z.openElements.currentTagId!==K.FRAMESET)Z.insertionMode=H.AFTER_FRAMESET}}function EQ(Z,Q){switch(Q.tagID){case K.HTML:{t(Z,Q);break}case K.NOFRAMES:{q0(Z,Q);break}default:}}function mQ(Z,Q){if(Q.tagID===K.HTML)Z.insertionMode=H.AFTER_AFTER_FRAMESET}function kQ(Z,Q){if(Q.tagID===K.HTML)t(Z,Q);else Q4(Z,Q)}function Q4(Z,Q){Z.insertionMode=H.IN_BODY,Y4(Z,Q)}function _Q(Z,Q){switch(Q.tagID){case K.HTML:{t(Z,Q);break}case K.NOFRAMES:{q0(Z,Q);break}default:}}function SQ(Z,Q){Q.chars=u,Z._insertCharacters(Q)}function IQ(Z,Q){Z._insertCharacters(Q),Z.framesetOk=!1}function O3(Z){while(Z.treeAdapter.getNamespaceURI(Z.openElements.current)!==P.HTML&&Z.openElements.currentTagId!==void 0&&!Z._isIntegrationPoint(Z.openElements.currentTagId,Z.openElements.current))Z.openElements.pop()}function TQ(Z,Q){if(n8(Q))O3(Z),Z._startTagOutsideForeignContent(Q);else{let X=Z._getAdjustedCurrentElement(),J=Z.treeAdapter.getNamespaceURI(X);if(J===P.MATHML)q6(Q);else if(J===P.SVG)t8(Q),U6(Q);if(Z4(Q),Q.selfClosing)Z._appendElement(Q,J);else Z._insertElement(Q,J);Q.ackSelfClosing=!0}}function AQ(Z,Q){if(Q.tagID===K.P||Q.tagID===K.BR){O3(Z),Z._endTagOutsideForeignContent(Q);return}for(let X=Z.openElements.stackTop;X>0;X--){let J=Z.openElements.items[X];if(Z.treeAdapter.getNamespaceURI(J)===P.HTML){Z._endTagOutsideForeignContent(Q);break}let Y=Z.treeAdapter.getTagName(J);if(Y.toLowerCase()===Q.tagName){Q.tagName=Y,Z.openElements.shortenToLength(X);break}}}var oW=typeof String.prototype.codePointAt==="function"?(Z,Q)=>Z.codePointAt(Q):(Z,Q)=>(Z.charCodeAt(Q)&64512)===55296?(Z.charCodeAt(Q)-55296)*1024+Z.charCodeAt(Q+1)-56320+65536:Z.charCodeAt(Q);function b3(Z,Q){return function(J){let Y,W=0,z="";while(Y=Z.exec(J)){if(W!==Y.index)z+=J.substring(W,Y.index);z+=Q.get(Y[0].charCodeAt(0)),W=Y.index+1}return z+J.substring(W)}}var C3=b3(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]])),R3=b3(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]]));var uQ=new Set([B.AREA,B.BASE,B.BASEFONT,B.BGSOUND,B.BR,B.COL,B.EMBED,B.FRAME,B.HR,B.IMG,B.INPUT,B.KEYGEN,B.LINK,B.META,B.PARAM,B.SOURCE,B.TRACK,B.WBR]);function v3(Z,Q){return Q.treeAdapter.isElementNode(Z)&&Q.treeAdapter.getNamespaceURI(Z)===P.HTML&&uQ.has(Q.treeAdapter.getTagName(Z))}var cQ={treeAdapter:W0,scriptingEnabled:!0};function i0(Z,Q){let X={...cQ,...Q};if(v3(Z,X))return"";return y3(Z,X)}function y3(Z,Q){let X="",J=Q.treeAdapter.isElementNode(Z)&&Q.treeAdapter.getTagName(Z)===B.TEMPLATE&&Q.treeAdapter.getNamespaceURI(Z)===P.HTML?Q.treeAdapter.getTemplateContent(Z):Z,Y=Q.treeAdapter.getChildNodes(J);if(Y)for(let W of Y)X+=lQ(W,Q);return X}function lQ(Z,Q){if(Q.treeAdapter.isElementNode(Z))return dQ(Z,Q);if(Q.treeAdapter.isTextNode(Z))return aQ(Z,Q);if(Q.treeAdapter.isCommentNode(Z))return pQ(Z,Q);if(Q.treeAdapter.isDocumentTypeNode(Z))return sQ(Z,Q);return""}function dQ(Z,Q){let X=Q.treeAdapter.getTagName(Z);return`<${X}${iQ(Z,Q)}>${v3(Z,Q)?"":`${y3(Z,Q)}</${X}>`}`}function iQ(Z,{treeAdapter:Q}){let X="";for(let J of Q.getAttrList(Z)){if(X+=" ",J.namespace)switch(J.namespace){case P.XML:{X+=`xml:${J.name}`;break}case P.XMLNS:{if(J.name!=="xmlns")X+="xmlns:";X+=J.name;break}case P.XLINK:{X+=`xlink:${J.name}`;break}default:X+=`${J.prefix}:${J.name}`}else X+=J.name;X+=`="${C3(J.value)}"`}return X}function aQ(Z,Q){let{treeAdapter:X}=Q,J=X.getTextNodeContent(Z),Y=X.getParentNode(Z),W=Y&&X.isElementNode(Y)&&X.getTagName(Y);return W&&X.getNamespaceURI(Y)===P.HTML&&k8(W,Q.scriptingEnabled)?J:R3(J)}function pQ(Z,{treeAdapter:Q}){return`<!--${Q.getCommentNodeContent(Z)}-->`}function sQ(Z,{treeAdapter:Q}){return`<!DOCTYPE ${Q.getDocumentTypeNodeName(Z)}>`}function w1(Z,Q){return J4.parse(Z,Q)}import{z as v}from"zod";import*as a0 from"css-tree";var P1=20971520,rQ=new Set(["script","form","iframe","frame","frameset","object","embed","portal","base","audio","video","source","track","noscript","animate","animatemotion","animatetransform","discard","set"]),oQ=new Set(["action","cite","data","formaction","href","ping","poster","src","srcset","xlink:href"]),O6=/^data:(?:image\/(?:png|jpe?g|gif|webp|avif|bmp|x-icon)|font\/[a-z0-9.+-]+|application\/(?:font-[a-z0-9.+-]+|vnd\.ms-fontobject|x-font-[a-z0-9.+-]+));/i,nQ=new Set(["date","datetime-local","email","month","number","password","search","tel","text","time","url","week"]);function tQ(Z){return"tagName"in Z}function f3(Z,Q){return Z.attrs.find((X)=>X.name.toLowerCase()===Q.toLowerCase())?.value??null}function M0(Z,Q,X){let J=Z.attrs.find((Y)=>Y.name.toLowerCase()===Q.toLowerCase());if(J)J.value=X;else Z.attrs.push({name:Q,value:X})}function M3(Z){try{let Q=a0.parse(Z,{context:"stylesheet",parseCustomProperty:!0,positions:!1});return a0.walk(Q,{enter(X,J,Y){if(X.type==="Atrule"&&X.name.toLowerCase()==="import"){Y.remove(J);return}if(X.type==="Declaration"){let W=X.property.toLowerCase();if(W==="behavior"||W==="-moz-binding")Y.remove(J);return}if(X.type==="Url"&&!O6.test(X.value)){X.value="data:,";return}if(X.type==="String"&&this.function&&["image-set","-webkit-image-set","src"].includes(this.function.name.toLowerCase())&&!O6.test(X.value))X.value="data:,"}}),a0.generate(Q)}catch{return""}}function eQ(Z){return M3(`x{${Z}}`).replace(/^x\{/,"").replace(/\}$/,"")}function ZX(Z){Z.attrs=Z.attrs.flatMap((X)=>{let J=X.name.toLowerCase();if(J.startsWith("on")||J==="srcdoc"||J==="nonce")return[];if(J==="style"){let Y=eQ(X.value);return Y?[{...X,value:Y}]:[]}if(oQ.has(J)){if(J==="src"&&O6.test(X.value))return[X];if(J==="href"&&X.value.startsWith("#"))return[X];return[]}if(J==="target"||J==="download"||J==="http-equiv")return[];return[X]});let Q=Z.tagName.toLowerCase();if(Q==="textarea"||Q==="input"&&nQ.has((f3(Z,"type")??"text").toLowerCase()))M0(Z,"readonly",""),M0(Z,"aria-readonly","true"),M0(Z,"tabindex","-1");else if(Q==="button"||Q==="select"||Q==="input")M0(Z,"disabled",""),M0(Z,"aria-disabled","true"),M0(Z,"tabindex","-1");if(f3(Z,"contenteditable")!==null)M0(Z,"contenteditable","false"),M0(Z,"tabindex","-1");if(Z.tagName==="style"&&Z.childNodes){for(let X of Z.childNodes)if("value"in X&&typeof X.value==="string")X.value=M3(X.value)}}function N3(Z){let Q=[];for(let X of Z.childNodes){if(tQ(X)){let J=X.tagName.toLowerCase();if(rQ.has(J))continue;if(J==="meta"&&X.attrs.some((Y)=>Y.name.toLowerCase()==="http-equiv"&&Y.value.toLowerCase()!=="content-type"))continue;if(J==="link")continue;ZX(X),N3(X)}Q.push(X)}Z.childNodes=Q}function h3(Z){if(Buffer.byteLength(Z,"utf8")>P1)throw Error("Browser snapshot exceeds the 20 MiB limit");let Q=w1(Z);N3(Q);let X=i0(Q);if(Buffer.byteLength(X,"utf8")>P1)throw Error("Sanitized browser snapshot exceeds the 20 MiB limit");return X}import*as p0 from"css-tree";function QX(Z,Q){if(!Z||Z.startsWith("#"))return Z;try{let X=new URL(Z,Q);if(X.protocol!=="http:"&&X.protocol!=="https:")return null;if(X.username||X.password)return null;return X.href}catch{return null}}function D3(Z){try{let Q=p0.parse(Z.css,{context:"stylesheet",parseCustomProperty:!0,positions:!1});return p0.walk(Q,{enter(X,J,Y){if(X.type==="Atrule"&&X.name.toLowerCase()==="import"){if(J&&Y)Y.remove(J);return}if(X.type==="Declaration"){let z=X.property.toLowerCase();if(z==="behavior"||z==="-moz-binding"){if(J&&Y)Y.remove(J)}return}if(X.type!=="Url")return;let W=QX(X.value,Z.baseUrl);if(W&&!W.startsWith("#"))X.value=Z.resourceUrl(W);else if(!W)X.value="data:,"}}),p0.generate(Q)}catch{return""}}var KX=1200000,JX=200,$3=8,YX=65536,G3="ideawave-frame",WX=v.object({browserNodeId:v.string().uuid(),url:v.string().max(4000)}).strict(),VX=v.object({proxySessionId:v.string().uuid()}).strict(),jX=v.object({proxySessionId:v.string().uuid(),revision:v.string().min(1).max(200),html:v.string().max(P1).optional()}).strict(),HX=v.object({exact:v.string().min(1).max(2000),prefix:v.string().max(500).optional(),suffix:v.string().max(500).optional()}).strict(),b6=v.union([v.object({ref:v.string().min(1).max(200)}).strict(),v.object({selector:v.string().min(1).max(2000).nullable(),textQuote:HX.nullable().optional(),framePath:v.array(v.string().max(1000)).max(12).optional()}).strict().refine((Z)=>Boolean(Z.selector||Z.textQuote),{message:"A selector or text quote is required"})]),zX=v.discriminatedUnion("type",[v.object({type:v.literal("inspect")}).strict(),v.object({type:v.literal("locate"),target:b6}).strict(),v.object({type:v.literal("click"),target:b6}).strict(),v.object({type:v.literal("scroll"),deltaY:v.number().finite().min(-1e5).max(1e5).optional(),left:v.number().finite().min(0).max(1e7).optional(),top:v.number().finite().min(0).max(1e7).optional()}).strict(),v.object({type:v.literal("find"),query:v.string().max(500),direction:v.enum(["forward","backward"]).optional()}).strict(),v.object({type:v.literal("refresh")}).strict(),v.object({type:v.literal("back")}).strict(),v.object({type:v.literal("forward")}).strict(),v.object({type:v.literal("navigate"),url:v.string().max(4000)}).strict(),v.object({type:v.literal("highlight"),target:b6,color:v.string().regex(/^#[0-9a-fA-F]{6}$/)}).strict(),v.object({type:v.literal("selection")}).strict(),v.object({type:v.literal("snapshot")}).strict()]),qX=v.object({type:v.literal("pointer"),phase:v.enum(["move","down","up"]),x:v.number().finite().min(0).max(2048),y:v.number().finite().min(0).max(2048),button:v.enum(["left","middle","right"]).optional(),buttons:v.number().int().min(0).max(31).optional()}).strict(),UX=v.object({events:v.array(v.discriminatedUnion("type",[qX,v.object({type:v.literal("wheel"),deltaX:v.number().finite().min(-1e5).max(1e5),deltaY:v.number().finite().min(-1e5).max(1e5)}).strict(),v.object({type:v.literal("key"),phase:v.enum(["down","up"]),key:v.string().min(1).max(64)}).strict(),v.object({type:v.literal("text"),text:v.string().max(5000)}).strict()])).max(64)}).strict(),BX=v.object({width:v.number().finite().min(1).max(16384),height:v.number().finite().min(1).max(16384)}).strict();function FX(){return y6(18).toString("hex")}function LX(Z){if(!Z)return"";if(Z.startsWith("["))return Z.slice(1,Z.indexOf("]"));return Z.split(":")[0]?.toLowerCase()??""}function g3(Z){return typeof Z==="string"?Z:void 0}function wX(Z){let Q=new URL(Z);if(Q.protocol!=="http:"&&Q.protocol!=="https:"||Q.username||Q.password)throw Error("Browser proxy frontend origin is invalid");return Q.origin}function PX(Z){return Z.replace(/[&<>"']/g,(Q)=>{if(Q==="&")return"&";if(Q==="<")return"<";if(Q===">")return">";if(Q==='"')return""";return"'"})}function C6(Z){return JSON.stringify(Z).replace(/</g,"\\u003c")}function xX(Z){let Q=C6(Z.bridgeToken),X=C6(Z.frontendOrigin),Y=`session=${encodeURIComponent(Z.sessionId)}&token=${encodeURIComponent(Z.bridgeToken)}`,W=PX(Z.cspNonce);return`<!doctype html><html><head><meta charset="utf-8"><meta name="color-scheme" content="light"><style nonce="${W}">*{box-sizing:border-box}html,body,#surface,#view{border:0;margin:0;width:100%;height:100%;overflow:hidden}body{background:#fff}#surface{position:relative;outline:0;touch-action:none;user-select:none}#view{display:block;object-fit:fill;pointer-events:none}#status{position:absolute;inset:auto 12px 12px;padding:8px 10px;border:1px solid #fecaca;border-radius:8px;background:rgba(255,255,255,.96);color:#b91c1c;font:12px system-ui;box-shadow:0 8px 24px rgba(15,23,42,.12)}#status[hidden]{display:none}</style></head><body><div id="surface" tabindex="0" role="application" aria-label="Live browser page"><img id="view" draggable="false" alt="" src="/browser/stream?${Y}"><div id="status" hidden></div></div><script nonce="${W}">(()=>{"use strict";const TOKEN=${Q};const FRONTEND_ORIGIN=${X};const SESSION=${C6(Z.sessionId)};const surface=document.getElementById("surface");const view=document.getElementById("view");const status=document.getElementById("status");let metrics={viewportWidth:720,viewportHeight:442};let queue=[];let flushPending=false;let inputChain=Promise.resolve();const endpoint=(path)=>path+"?session="+encodeURIComponent(SESSION);const headers={"content-type":"application/json","x-ideawave-browser-token":TOKEN};const post=async(path,body)=>{const response=await fetch(endpoint(path),{method:"POST",headers,body:JSON.stringify(body),credentials:"omit",cache:"no-store"});if(!response.ok)throw new Error((await response.text())||"Browser command failed");const type=response.headers.get("content-type")||"";return type.includes("application/json")?response.json():null};const sendParent=(event,payload,requestId)=>window.parent.postMessage({type:"ideawave-browser-event",token:TOKEN,event,payload,...(requestId?{requestId}:{})},FRONTEND_ORIGIN);const showError=(message)=>{status.textContent=String(message);status.hidden=false};const flush=()=>{flushPending=false;const batch=queue.splice(0,64);if(batch.length)inputChain=inputChain.then(()=>post("/browser/input",{events:batch})).catch(showError);if(queue.length){flushPending=true;requestAnimationFrame(flush)}};const enqueue=(event)=>{queue.push(event);if(flushPending)return;flushPending=true;requestAnimationFrame(flush)};const point=(event)=>{const rect=surface.getBoundingClientRect();return{x:Math.max(0,Math.min(metrics.viewportWidth,(event.clientX-rect.left)*metrics.viewportWidth/Math.max(1,rect.width))),y:Math.max(0,Math.min(metrics.viewportHeight,(event.clientY-rect.top)*metrics.viewportHeight/Math.max(1,rect.height)))}};const button=(value)=>value===1?"middle":value===2?"right":"left";for(const name of ["pointermove","pointerdown","pointerup"]){surface.addEventListener(name,event=>{if(name==="pointerdown"){surface.focus({preventScroll:true});surface.setPointerCapture(event.pointerId)}const p=point(event);enqueue({type:"pointer",phase:name.slice(7),x:p.x,y:p.y,button:button(event.button),buttons:event.buttons});event.preventDefault()})}surface.addEventListener("wheel",event=>{enqueue({type:"wheel",deltaX:event.deltaX,deltaY:event.deltaY});event.preventDefault()},{passive:false});surface.addEventListener("keydown",event=>{if(event.isComposing)return;enqueue({type:"key",phase:"down",key:event.key});event.preventDefault()});surface.addEventListener("keyup",event=>{if(event.isComposing)return;enqueue({type:"key",phase:"up",key:event.key});event.preventDefault()});surface.addEventListener("compositionend",event=>{if(event.data)enqueue({type:"text",text:event.data})});surface.addEventListener("paste",event=>{const text=event.clipboardData&&event.clipboardData.getData("text/plain");if(text){enqueue({type:"text",text:text.slice(0,5000)});event.preventDefault()}});surface.addEventListener("contextmenu",event=>event.preventDefault());const resize=new ResizeObserver(entries=>{const rect=entries[0]&&entries[0].contentRect;if(rect)void post("/browser/viewport",{width:rect.width,height:rect.height}).catch(showError)});resize.observe(surface);const events=new EventSource("/browser/events?${Y}");events.onmessage=event=>{try{const message=JSON.parse(event.data);if(message.event==="state"&&message.payload&&message.payload.metrics)metrics=message.payload.metrics;if(message.event==="error")showError(message.payload&&message.payload.message||"Browser page error");else status.hidden=true;sendParent(message.event,message.payload)}catch(error){showError(error instanceof Error?error.message:String(error))}};events.onerror=()=>showError("Live browser stream disconnected");window.addEventListener("message",event=>{const message=event.data;if(event.source!==window.parent||event.origin!==FRONTEND_ORIGIN||!message||message.type!=="ideawave-browser-command"||message.token!==TOKEN)return;Promise.resolve(post("/browser/command",message.command||{})).then(result=>sendParent("response",{ok:true,result},message.requestId),error=>sendParent("response",{ok:false,error:error instanceof Error?error.message:String(error)},message.requestId))});window.addEventListener("beforeunload",()=>{events.close();resize.disconnect()})})();</script></body></html>`}function k3(Z){return(Z["content-type"]??"application/octet-stream").split(";")[0]?.trim().toLowerCase()??"application/octet-stream"}function OX(Z){return"tagName"in Z}function R6(Z,Q){return Z.attrs.find((X)=>X.name.toLowerCase()===Q)?.value??null}function E3(Z,Q,X){let J=Z.attrs.find((Y)=>Y.name.toLowerCase()===Q);if(J)J.value=X;else Z.attrs.push({name:Q,value:X})}function m3(Z){let Q=k3(Z.headers);if(!(/^image\/(?:png|jpeg|gif|webp|avif|bmp|x-icon)$/.test(Q)||/^(?:font\/|application\/(?:font-|vnd\.ms-fontobject|x-font-))/.test(Q)))return null;return`data:${Q};base64,${Buffer.from(Z.body).toString("base64")}`}async function v6(Z){let Q=[],X=0;for await(let J of Z){let Y=Buffer.isBuffer(J)?J:Buffer.from(J);if(X+=Y.byteLength,X>YX)throw Error("Browser request is too large");Q.push(Y)}return JSON.parse(Buffer.concat(Q).toString("utf8"))}class f6{sessions=new Map;port=null;sweepTimer;runtime;constructor(Z){this.runtime=Z??new J1,this.sweepTimer=setInterval(()=>this.sweep(),60000),this.sweepTimer.unref?.()}setPort(Z){this.port=Z}origin(Z){if(!this.port)throw Error("Browser proxy is not ready");return`http://${Z}.localhost:${this.port}`}wrapperOrigin(Z){return this.origin(Z.wrapperHost)}result(Z){let Q=this.wrapperOrigin(Z);return{proxySessionId:Z.id,wrapperUrl:`${Q}/browser/wrapper?session=${encodeURIComponent(Z.id)}`,bridgeToken:Z.bridgeToken,navigateUrlPrefix:`${Q}/browser/command?session=${encodeURIComponent(Z.id)}&url=`}}async handleRpc(Z,Q,X){switch(X.method){case"open_proxy_session":{let J=WX.parse(X.params),Y=v0(J.url).href,W=wX(Q),z=[...this.sessions.values()].find((U)=>U.frontendSessionId===Z&&U.browserNodeId===J.browserNodeId);if(z){if(z.frontendOrigin!==W)throw Error("Browser proxy session origin changed unexpectedly");if(z.lastUsedAt=Date.now(),z.remote.currentUrl!==Y)await z.remote.navigate(Y);return this.result(z)}let q=await this.runtime.createPage(Y),L={id:XX(),frontendSessionId:Z,frontendOrigin:W,browserNodeId:J.browserNodeId,wrapperHost:`iw-browser-${FX()}`,bridgeToken:y6(24).toString("base64url"),remote:q,lastUsedAt:Date.now()};return this.sessions.set(L.id,L),this.result(L)}case"close_proxy_session":{let J=VX.parse(X.params),Y=this.sessions.get(J.proxySessionId);if(Y&&Y.frontendSessionId!==Z)throw Error("Browser proxy session belongs to another frontend session");if(Y)await this.closeSession(Y);return{closed:!0}}case"build_snapshot":{let J=jX.parse(X.params),Y=this.ownedSession(Z,J.proxySessionId);if(Y.remote.currentRevision!==J.revision)throw Error("STALE_BROWSER_REF: inspect the browser again before freezing");return this.buildSnapshot(Y,J.revision)}}}async closeSession(Z){if(this.sessions.get(Z.id)===Z)this.sessions.delete(Z.id);await Z.remote.close()}closeFrontendSession(Z){for(let Q of[...this.sessions.values()])if(Q.frontendSessionId===Z)this.closeSession(Q)}async close(){clearInterval(this.sweepTimer);let Z=[...this.sessions.values()];this.sessions.clear(),await Promise.all(Z.map((Q)=>Q.remote.close())),await this.runtime.close()}ownedSession(Z,Q){let X=this.sessions.get(Q);if(!X||X.frontendSessionId!==Z)throw Error("Browser proxy session is unavailable");return X.lastUsedAt=Date.now(),X}sweep(){let Z=Date.now()-KX;for(let Q of[...this.sessions.values()])if(Q.lastUsedAt<Z)this.closeSession(Q)}requestAuthorized(Z,Q){return g3(Z.headers.origin)===this.wrapperOrigin(Q)&&g3(Z.headers["x-ideawave-browser-token"])===Q.bridgeToken}async handleHttpRequest(Z,Q){let X=new URL(Z.url??"/","http://localhost");if(!X.pathname.startsWith("/browser/"))return!1;let J=X.searchParams.get("session"),Y=J?this.sessions.get(J):null;if(!Y)return Q.writeHead(404),Q.end(),!0;if(Y.lastUsedAt=Date.now(),LX(Z.headers.host)!==`${Y.wrapperHost}.localhost`)return Q.writeHead(403),Q.end(),!0;try{if(X.pathname==="/browser/wrapper"){if(Z.method!=="GET"&&Z.method!=="HEAD")return Q.writeHead(405),Q.end(),!0;return this.sendViewer(Q,Y,Z.method==="HEAD"),!0}if(X.searchParams.get("token")===Y.bridgeToken){if(X.pathname==="/browser/stream")return this.sendFrameStream(Q,Y,Z.method==="HEAD"),!0;if(X.pathname==="/browser/events")return this.sendEventStream(Q,Y,Z.method==="HEAD"),!0}if(Z.method!=="POST"||!this.requestAuthorized(Z,Y))return Q.writeHead(403),Q.end(),!0;if(X.pathname==="/browser/input"){let W=UX.parse(await v6(Z));return await Y.remote.input(W.events),this.sendJson(Q,{ok:!0}),!0}if(X.pathname==="/browser/viewport"){let W=BX.parse(await v6(Z));return await Y.remote.setViewport(W.width,W.height),this.sendJson(Q,{ok:!0}),!0}if(X.pathname==="/browser/command"){let W=zX.parse(await v6(Z));return this.sendJson(Q,await Y.remote.command(W)),!0}return Q.writeHead(404),Q.end(),!0}catch(W){let z=W instanceof Error?W.message:"Browser operation failed";if(Q.headersSent)Q.destroy(W instanceof Error?W:void 0);else Q.writeHead(400,{"content-type":"text/plain; charset=utf-8"}),Q.end(z);return!0}}sendViewer(Z,Q,X){let J=y6(18).toString("base64url"),Y=xX({bridgeToken:Q.bridgeToken,cspNonce:J,frontendOrigin:Q.frontendOrigin,sessionId:Q.id}),W=Buffer.from(Y),z=["default-src 'none'","img-src 'self'",`style-src 'nonce-${J}'`,`script-src 'nonce-${J}'`,"connect-src 'self'","base-uri 'none'","form-action 'none'",`frame-ancestors ${Q.frontendOrigin}`].join("; ");Z.writeHead(200,{"access-control-allow-origin":Q.frontendOrigin,"cache-control":"no-store","content-length":String(W.byteLength),"content-security-policy":z,"content-type":"text/html; charset=utf-8","cross-origin-resource-policy":"cross-origin","referrer-policy":"no-referrer","x-content-type-options":"nosniff"}),Z.end(X?void 0:W)}sendFrameStream(Z,Q,X){if(Z.writeHead(200,{"cache-control":"no-store","content-type":`multipart/x-mixed-replace; boundary=${G3}`,"x-content-type-options":"nosniff"}),X){Z.end();return}let J=!1,Y=Q.remote.onFrame((W)=>{if(J||Z.destroyed)return;Q.lastUsedAt=Date.now(),J=!Z.write(Buffer.concat([Buffer.from(`--${G3}\r
|
|
36
36
|
Content-Type: image/jpeg\r
|
|
37
37
|
Content-Length: ${W.byteLength}\r
|
|
38
38
|
\r
|
|
39
39
|
`),W,Buffer.from(`\r
|
|
40
|
-
`)]))});Z.on("drain",()=>{
|
|
40
|
+
`)]))});Z.on("drain",()=>{J=!1}),Z.once("close",Y)}sendEventStream(Z,Q,X){if(Z.writeHead(200,{"cache-control":"no-cache, no-store",connection:"keep-alive","content-type":"text/event-stream; charset=utf-8","x-accel-buffering":"no"}),X){Z.end();return}let J=(z)=>{if(!Z.destroyed)Q.lastUsedAt=Date.now(),Z.write(`data: ${JSON.stringify(z)}
|
|
41
41
|
|
|
42
|
-
`)},Y=Q.remote.onEvent(
|
|
42
|
+
`)},Y=Q.remote.onEvent(J),W=setInterval(()=>{if(!Z.destroyed)Q.lastUsedAt=Date.now(),Z.write(`: ping
|
|
43
43
|
|
|
44
|
-
`)},15000);W.unref?.(),Z.once("close",()=>{clearInterval(W),Y()})}sendJson(Z,Q){let X=Buffer.from(JSON.stringify(Q));Z.writeHead(200,{"cache-control":"no-store","content-length":String(X.byteLength),"content-type":"application/json; charset=utf-8","x-content-type-options":"nosniff"}),Z.end(X)}async snapshotUpstream(Z,Q,X){if(X.remaining<=0)return null;return X.remaining-=1,X.resourceCount+=1,Z.remote.fetchResource(Q,d2)}async inlineCss(Z,Q,X,K){let Y=new Set;try{let B=Z4.parse(Q,{context:"stylesheet",parseCustomProperty:!0});Z4.walk(B,(w)=>{if(w.type!=="Url")return;try{Y.add(new URL(w.value,X).href)}catch{}})}catch{return""}let W=new Map,z=[...Y].slice(0,K.remaining);for(let B=0;B<z.length;B+=j3)await Promise.all(z.slice(B,B+j3).map(async(w)=>{try{let q=await this.snapshotUpstream(Z,w,K),b=q?B3(q):null;if(b)W.set(w,b)}catch{}}));return H3({css:Q,baseUrl:X,resourceUrl:(B)=>W.get(B)??"data:"})}async inlineSnapshotTree(Z,Q,X,K){let Y=[];for(let W of Q.childNodes){if(lQ(W)){let z=W.tagName.toLowerCase();if(z==="link"&&(H6(W,"rel")??"").toLowerCase().includes("stylesheet")){let B=H6(W,"href");if(B)try{let w=new URL(B,K).href,q=await this.snapshotUpstream(Z,w,X);if(!q)continue;if(F3(q.headers)==="text/css")W.tagName="style",W.nodeName="style",W.attrs=[],W.childNodes=[{nodeName:"#text",value:await this.inlineCss(Z,Buffer.from(q.body).toString("utf8"),q.url,X),parentNode:W}]}catch{continue}}if(z==="style"){for(let B of W.childNodes)if("value"in B&&typeof B.value==="string")B.value=await this.inlineCss(Z,B.value,K,X)}if(z==="img"){let B=H6(W,"src");if(B&&!B.startsWith("data:"))try{let w=new URL(B,K).href,q=await this.snapshotUpstream(Z,w,X);U3(W,"src",q&&B3(q)||"data:")}catch{U3(W,"src","data:")}}await this.inlineSnapshotTree(Z,W,X,K)}Y.push(W)}Q.childNodes=Y}async buildSnapshot(Z,Q){let X=await Z.remote.snapshotHtml();if(Buffer.byteLength(X,"utf8")>q1)throw Error("Browser snapshot exceeds the 20 MiB limit");let K=Z.remote.currentUrl,Y=z1(X),W={remaining:MQ,resourceCount:0};await this.inlineSnapshotTree(Z,Y,W,K);let z=l0(Y),B=V3(z),w=z.match(/<title[^>]*>([^<]*)<\/title>/i)?.[1]?.trim()??"";return{html:B,sourceUrl:K,title:w,revision:Q,byteLength:Buffer.byteLength(B,"utf8"),resourceCount:W.resourceCount,createdAt:new Date().toISOString()}}}import{randomUUID as dQ}from"node:crypto";import{createServer as aQ}from"node:http";import{WebSocket as C3,WebSocketServer as iQ}from"ws";var U6="/cli-bridge",w3="/ping";function B6(Z=43275,Q=43277){let X=[];for(let K=Z;K<=Q;K+=1)X.push(K);return X}function L3(Z=B6(),Q="127.0.0.1",X="/cli-bridge"){return Z.map((K)=>`ws://${Q}:${K}${X}`)}var cQ=800;function P3({candidates:Z,createWebSocket:Q,timeoutMs:X=cQ,maxConcurrent:K=1,staggerMs:Y=0,setTimeoutFn:W=setTimeout,clearTimeoutFn:z=clearTimeout}){return new Promise((B,w)=>{let q=0,b=!1,M=null,x=new Map,y=Math.max(1,Math.floor(K)),v=()=>{if(M===null)return;z(M),M=null},$=(D)=>{let{socket:L,listeners:g,timer:l}=D;L.removeEventListener("open",g.open),L.removeEventListener("message",g.message),L.removeEventListener("error",g.error),L.removeEventListener("close",g.close),z(l),x.delete(L)},C=(D)=>{v();for(let L of Array.from(x.values()))if($(L),L.socket!==D)try{L.socket.close()}catch{}},N=()=>{if(b)return;if(q<Z.length)return;if(x.size>0)return;if(M!==null)return;b=!0,w(Error("No IdeaWave CLI bridge is reachable"))},f=(D)=>{if(b)return;if(q>=Z.length){N();return}if(x.size>=y)return;if(D<=0){v(),I();return}if(M!==null)return;M=W(()=>{M=null,I()},D)},E=()=>{if(b)return;if(x.size>=y)return;if(x.size===0||Y<=0||y===1){f(0);return}f(Y)},G=(D)=>{if(b)return;let L=x.get(D);if(!L)return;$(L);try{D.close()}catch{}E(),N()};function I(){if(b)return;if(x.size>=y)return;let D=Z[q];if(q+=1,!D){N();return}let L;try{L=Q(D)}catch{E(),N();return}let g={open:()=>{if(b||!x.has(L))return;L.send(O1({type:"bridge_probe",protocolVersion:1}))},message:(a)=>{if(b||!x.has(L))return;if(b1(String(a?.data??""))?.type!=="bridge_probe_ack")return;b=!0,C(L),B({url:D,socket:L})},error:()=>G(L),close:()=>G(L)};L.addEventListener("open",g.open),L.addEventListener("message",g.message),L.addEventListener("error",g.error),L.addEventListener("close",g.close);let l=W(()=>G(L),X);x.set(L,{url:D,socket:L,listeners:g,timer:l}),E()}I()})}var pQ=0,sQ=30000,rQ=15000,v3="http://127.0.0.1",w6="IDEAWAVE_CLI_ALLOW_RAILWAY_PR_PREVIEWS";async function R3(Z=L3(),Q=(X)=>new C3(X,{headers:{origin:v3}})){try{let{url:X,socket:K}=await P3({candidates:Z,createWebSocket:Q});try{K.close()}catch{}return X}catch{return null}}var oQ=new Set(["https://ideawave-app-production.up.railway.app"]);function nQ(Z){return Z==="ideawave.app"||Z.endsWith(".ideawave.app")}function tQ(Z){return Z==="1"||Z?.toLowerCase()==="true"}function eQ(Z){return/^ideawave-app-ideawave-app-pr-\d+\.up\.railway\.app$/i.test(Z)}function ZX(){let Z=process.env.IDEAWAVE_CLI_ALLOWED_ORIGINS;if(!Z)return QX;let Q=new Set;for(let X of Z.split(",")){let K=X.trim();if(!K)continue;try{Q.add(new URL(K).origin)}catch{}}return Q}var QX=new Set;function x3(Z){if(!Z)return!1;let Q;try{Q=new URL(Z)}catch{return!1}if(oQ.has(Q.origin))return!0;if(ZX().has(Q.origin))return!0;if(Q.protocol==="https:"&&tQ(process.env[w6])&&eQ(Q.hostname))return!0;if(Q.protocol==="https:"&&nQ(Q.hostname))return!0;if(Q.protocol!=="http:"&&Q.protocol!=="https:")return!1;return Q.hostname==="localhost"||Q.hostname==="127.0.0.1"||Q.hostname==="::1"}function a0(Z,Q){if(Z.readyState!==C3.OPEN)return;try{Z.send(O1(Q))}catch{}}function XX(Z){if(typeof Z==="string")return Z;if(Buffer.isBuffer(Z))return Z.toString("utf8");if(Array.isArray(Z))return Buffer.concat(Z).toString("utf8");return Buffer.from(Z).toString("utf8")}function F6(Z){if(typeof Z==="string")return Z;if(Array.isArray(Z))return Z[0]??null;return null}function b3(Z,Q,X){Z.write(`HTTP/1.1 ${Q} ${X}\r
|
|
44
|
+
`)},15000);W.unref?.(),Z.once("close",()=>{clearInterval(W),Y()})}sendJson(Z,Q){let X=Buffer.from(JSON.stringify(Q));Z.writeHead(200,{"cache-control":"no-store","content-length":String(X.byteLength),"content-type":"application/json; charset=utf-8","x-content-type-options":"nosniff"}),Z.end(X)}async snapshotUpstream(Z,Q,X){if(X.remaining<=0)return null;return X.remaining-=1,X.resourceCount+=1,Z.remote.fetchResource(Q,q8)}async inlineCss(Z,Q,X,J){let Y=new Set;try{let q=H4.parse(Q,{context:"stylesheet",parseCustomProperty:!0});H4.walk(q,(L)=>{if(L.type!=="Url")return;try{Y.add(new URL(L.value,X).href)}catch{}})}catch{return""}let W=new Map,z=[...Y].slice(0,J.remaining);for(let q=0;q<z.length;q+=$3)await Promise.all(z.slice(q,q+$3).map(async(L)=>{try{let U=await this.snapshotUpstream(Z,L,J),x=U?m3(U):null;if(x)W.set(L,x)}catch{}}));return D3({css:Q,baseUrl:X,resourceUrl:(q)=>W.get(q)??"data:"})}async inlineSnapshotTree(Z,Q,X,J){let Y=[];for(let W of Q.childNodes){if(OX(W)){let z=W.tagName.toLowerCase();if(z==="link"&&(R6(W,"rel")??"").toLowerCase().includes("stylesheet")){let q=R6(W,"href");if(q)try{let L=new URL(q,J).href,U=await this.snapshotUpstream(Z,L,X);if(!U)continue;if(k3(U.headers)==="text/css")W.tagName="style",W.nodeName="style",W.attrs=[],W.childNodes=[{nodeName:"#text",value:await this.inlineCss(Z,Buffer.from(U.body).toString("utf8"),U.url,X),parentNode:W}]}catch{continue}}if(z==="style"){for(let q of W.childNodes)if("value"in q&&typeof q.value==="string")q.value=await this.inlineCss(Z,q.value,J,X)}if(z==="img"){let q=R6(W,"src");if(q&&!q.startsWith("data:"))try{let L=new URL(q,J).href,U=await this.snapshotUpstream(Z,L,X);E3(W,"src",U&&m3(U)||"data:")}catch{E3(W,"src","data:")}}await this.inlineSnapshotTree(Z,W,X,J)}Y.push(W)}Q.childNodes=Y}async buildSnapshot(Z,Q){let X=await Z.remote.snapshotHtml();if(Buffer.byteLength(X,"utf8")>P1)throw Error("Browser snapshot exceeds the 20 MiB limit");let J=Z.remote.currentUrl,Y=w1(X),W={remaining:JX,resourceCount:0};await this.inlineSnapshotTree(Z,Y,W,J);let z=i0(Y),q=h3(z),L=z.match(/<title[^>]*>([^<]*)<\/title>/i)?.[1]?.trim()??"";return{html:q,sourceUrl:J,title:L,revision:Q,byteLength:Buffer.byteLength(q,"utf8"),resourceCount:W.resourceCount,createdAt:new Date().toISOString()}}}import{chromium as EX}from"playwright-core";import{spawn as bX}from"node:child_process";import{existsSync as x1,readFileSync as CX}from"node:fs";import{createRequire as _3}from"node:module";import z4 from"node:os";import a from"node:path";var N0={phase:"checking"},s0=null,M6=0,RX=60000,vX=["install","--only-shell","chromium"];class O1 extends Error{constructor(){super("The lightweight screenshot engine is being installed in the background. Live browsing remains available; retry the screenshot shortly.");this.name="CaptureEngineInstallingError"}}class S3 extends Error{constructor(Z){super(Z?`The screenshot engine could not be installed: ${Z}`:"The screenshot engine is unavailable. Retry after checking network access and disk space.");this.name="CaptureEngineUnavailableError"}}function yX(Z){return Z.phase==="failed"?new S3(Z.error):new O1}function r0(){return{...N0}}function fX(Z){let Q=Z.exists??x1;for(let[X,J]of[[Z.override,"explicit"],[Z.managedShell,"headless-shell"],[Z.system,"system-chromium"]])if(X&&Q(X))return{path:X,engine:J};return null}function I3(Z,Q){let X=[],J=Q.IDEAWAVE_CAPTURE_EXECUTABLE_PATH??Q.IDEAWAVE_CHROMIUM_PATH;if(J)X.push(J);if(Z==="win32"){let Y=Q.ProgramFiles??"C:\\Program Files",W=Q["ProgramFiles(x86)"]??"C:\\Program Files (x86)";if(X.push(a.win32.join(Y,"Google\\Chrome\\Application\\chrome.exe"),a.win32.join(W,"Google\\Chrome\\Application\\chrome.exe")),Q.LOCALAPPDATA)X.push(a.win32.join(Q.LOCALAPPDATA,"Google\\Chrome\\Application\\chrome.exe"));X.push(a.win32.join(W,"Microsoft\\Edge\\Application\\msedge.exe"),a.win32.join(Y,"Microsoft\\Edge\\Application\\msedge.exe"))}else if(Z==="darwin")X.push("/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge","/Applications/Chromium.app/Contents/MacOS/Chromium","google-chrome","chromium");else X.push("google-chrome","google-chrome-stable","chromium","chromium-browser","msedge");return X}function MX(Z){let Q=(process.env.PATH??"").split(a.delimiter),X=process.platform==="win32"?[".exe",".cmd",".bat",""]:[""];for(let J of Q){if(!J)continue;for(let Y of X){let W=a.join(J,`${Z}${Y}`);if(x1(W))return W}}return null}function NX(){let Z=new Set([process.env.IDEAWAVE_CAPTURE_EXECUTABLE_PATH,process.env.IDEAWAVE_CHROMIUM_PATH]);for(let Q of I3(process.platform,process.env)){if(Z.has(Q))continue;if(a.isAbsolute(Q)){if(x1(Q))return Q}else{let X=MX(Q);if(X)return X}}return null}function hX(){try{let Z=_3(import.meta.url);return a.dirname(Z.resolve("playwright-core/package.json"))}catch{return null}}function DX(Z){let Q=process.env.PLAYWRIGHT_BROWSERS_PATH?.trim();if(Q==="0")return a.join(Z,".local-browsers");if(Q)return Q.startsWith("~")?a.join(z4.homedir(),Q.slice(1)):a.resolve(Q);if(process.platform==="win32")return a.join(process.env.LOCALAPPDATA??a.join(z4.homedir(),"AppData","Local"),"ms-playwright");if(process.platform==="darwin")return a.join(z4.homedir(),"Library","Caches","ms-playwright");return a.join(z4.homedir(),".cache","ms-playwright")}function $X(){if(process.platform==="win32")return"win64";if(process.platform==="darwin")return process.arch==="arm64"?"mac-arm64":"mac-x64";return process.arch==="arm64"?"linux-arm64":"linux64"}function N6(){let Z=hX();if(!Z)return null;try{let X=JSON.parse(CX(a.join(Z,"browsers.json"),"utf8")).browsers?.find((q)=>q.name==="chromium-headless-shell");if(!X?.revision)return null;let J=$X(),Y=X.revisionOverrides?.[J]??X.revision,W=a.join(DX(Z),`chromium_headless_shell-${Y}`),z=process.platform==="win32"?["chrome-headless-shell-win64/chrome-headless-shell.exe","chrome-headless-shell-win32/chrome-headless-shell.exe"]:process.platform==="darwin"?[`chrome-headless-shell-${J}/chrome-headless-shell`,"chrome-headless-shell-mac-x64/chrome-headless-shell","chrome-headless-shell-mac-arm64/chrome-headless-shell"]:[`chrome-headless-shell-${J}/chrome-headless-shell`,"chrome-headless-shell-linux64/chrome-headless-shell"];for(let q of z){let L=a.join(W,...q.split("/"));if(x1(L))return L}}catch{return null}return null}function GX(){let Z=process.env.IDEAWAVE_CAPTURE_EXECUTABLE_PATH??process.env.IDEAWAVE_CHROMIUM_PATH;return Z&&x1(Z)?Z:null}function T3(){return fX({override:GX(),managedShell:N6(),system:NX()})}function gX(){let Q=_3(import.meta.url).resolve("playwright-core/package.json"),X=a.join(a.dirname(Q),"cli.js");return new Promise((J,Y)=>{let W=bX(process.execPath,[X,...vX],{stdio:"ignore",windowsHide:!0});W.once("error",Y),W.once("exit",(z)=>{if(z===0)J();else Y(Error(`Playwright headless-shell installer exited with code ${z}`))})})}function h6(Z){let Q=N6();if(Q)return N0={phase:"ready",engine:"headless-shell",executablePath:Q},Promise.resolve(r0());if(s0)return s0;if(M6>0&&Date.now()-M6<RX)return Promise.resolve(r0());return N0=Z?{phase:"ready",engine:Z.engine,executablePath:Z.path,installingManagedShell:!0}:{phase:"installing",installingManagedShell:!0},s0=(async()=>{try{await gX();let X=N6();if(!X)throw Error("Headless Shell finished installing but its executable was not found");N0={phase:"ready",engine:"headless-shell",executablePath:X}}catch(X){M6=Date.now(),N0=Z?{phase:"ready",engine:Z.engine,executablePath:Z.path,error:X instanceof Error?X.message:String(X)}:{phase:"failed",error:X instanceof Error?X.message:String(X)}}finally{s0=null}return r0()})(),s0}function A3(){let Z=T3();if(Z?.engine==="explicit"||Z?.engine==="headless-shell")return N0={phase:"ready",engine:Z.engine,executablePath:Z.path},Promise.resolve(r0());return h6(Z)}async function u3(){let Z=T3();if(Z){if(N0={phase:"ready",engine:Z.engine,executablePath:Z.path,...Z.engine==="system-chromium"&&s0?{installingManagedShell:!0}:{}},Z.engine==="system-chromium")h6(Z);return Z.path}throw h6(null),yX(N0)}var mX=60000,kX=16,I0=null,q4=null,o0=null,D6=Promise.resolve(),U4=0,$6=0,_X=0;class B4 extends Error{constructor(){super("The capture queue is busy; retry shortly.");this.name="CaptureQueueFullError"}}function G6(){if(o0)clearTimeout(o0);o0=null}async function g6(){G6();let Z=I0;if(I0=null,q4=null,Z)await Z.close().catch(()=>{return})}function SX(Z=mX){G6(),o0=setTimeout(()=>{if(o0=null,$6===0&&U4===0)g6()},Z),o0.unref?.()}async function IX(){let Z=await u3();if(I0?.isConnected()&&q4===Z)return I0;await g6();let Q=await EX.launch({headless:!0,executablePath:Z,handleSIGHUP:!1,handleSIGINT:!1,handleSIGTERM:!1});return _X+=1,I0=Q,q4=Z,Q.on("disconnected",()=>{if(I0===Q)I0=null,q4=null}),Q}function c3(Z,Q){if(U4>=kX)return Promise.reject(new B4);U4+=1;let X,J,Y=new Promise((W,z)=>{X=W,J=z});return D6=D6.then(async()=>{U4-=1,$6+=1,G6();let W=null,z;try{W=await(await IX()).newContext(Z.context);let L=await W.newPage();z={ok:!0,value:await Q(L)}}catch(q){z={ok:!1,error:q}}finally{if(W)await W.close().catch(()=>{return});$6-=1,SX()}if(z.ok)X(z.value);else J(z.error)}),Y}async function l3(){await D6.catch(()=>{return}),await g6()}import{randomUUID as pX}from"node:crypto";import{createServer as sX}from"node:http";import{WebSocket as t3,WebSocketServer as rX}from"ws";var E6="/cli-bridge",d3="/ping";function m6(Z=43275,Q=43277){let X=[];for(let J=Z;J<=Q;J+=1)X.push(J);return X}function i3(Z=m6(),Q="127.0.0.1",X="/cli-bridge"){return Z.map((J)=>`ws://${Q}:${J}${X}`)}var TX=800;function a3({candidates:Z,createWebSocket:Q,timeoutMs:X=TX,maxConcurrent:J=1,staggerMs:Y=0,setTimeoutFn:W=setTimeout,clearTimeoutFn:z=clearTimeout}){return new Promise((q,L)=>{let U=0,x=!1,G=null,h=new Map,C=Math.max(1,Math.floor(J)),b=()=>{if(G===null)return;z(G),G=null},f=(M)=>{let{socket:w,listeners:E,timer:k}=M;w.removeEventListener("open",E.open),w.removeEventListener("message",E.message),w.removeEventListener("error",E.error),w.removeEventListener("close",E.close),z(k),h.delete(w)},N=(M)=>{b();for(let w of Array.from(h.values()))if(f(w),w.socket!==M)try{w.socket.close()}catch{}},R=()=>{if(x)return;if(U<Z.length)return;if(h.size>0)return;if(G!==null)return;x=!0,L(Error("No IdeaWave CLI bridge is reachable"))},D=(M)=>{if(x)return;if(U>=Z.length){R();return}if(h.size>=C)return;if(M<=0){b(),T();return}if(G!==null)return;G=W(()=>{G=null,T()},M)},y=()=>{if(x)return;if(h.size>=C)return;if(h.size===0||Y<=0||C===1){D(0);return}D(Y)},g=(M)=>{if(x)return;let w=h.get(M);if(!w)return;f(w);try{M.close()}catch{}y(),R()};function T(){if(x)return;if(h.size>=C)return;let M=Z[U];if(U+=1,!M){R();return}let w;try{w=Q(M)}catch{y(),R();return}let E={open:()=>{if(x||!h.has(w))return;w.send(D1({type:"bridge_probe",protocolVersion:1}))},message:(l)=>{if(x||!h.has(w))return;if(h1(String(l?.data??""))?.type!=="bridge_probe_ack")return;x=!0,N(w),q({url:M,socket:w})},error:()=>g(w),close:()=>g(w)};w.addEventListener("open",E.open),w.addEventListener("message",E.message),w.addEventListener("error",E.error),w.addEventListener("close",E.close);let k=W(()=>g(w),X);h.set(w,{url:M,socket:w,listeners:E,timer:k}),y()}T()})}import{randomBytes as AX}from"node:crypto";import{mkdir as uX,writeFile as cX}from"node:fs/promises";import lX from"node:os";import p3 from"node:path";var dX=30000,iX=1024;function s3(Z){let Q;try{Q=new URL(Z)}catch{return!1}if(Q.protocol!=="http:"&&Q.protocol!=="https:")return!1;let X=Q.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(X==="localhost"||X==="127.0.0.1"||X==="::1")return!0;let Y=X==="ideawave.app"||X.endsWith(".ideawave.app");return Q.protocol==="https:"&&Y&&Q.pathname.startsWith("/static_boards/")}async function aX(Z,Q){let X=p3.join(lX.tmpdir(),"ideawave-screenshots");await uX(X,{recursive:!0});let J=p3.join(X,`board-${Date.now()}-${AX(4).toString("hex")}.png`);return await cX(J,Z),{path:J,engine:Q}}async function r3(Z){let Q=Z.timeoutMs??dX;return c3({context:{viewport:{width:Z.width,height:Z.height},deviceScaleFactor:1}},async(X)=>{X.setDefaultTimeout(Q),X.setDefaultNavigationTimeout(Q);let J=await X.goto(Z.url,{waitUntil:"networkidle",timeout:Q});if(!J?.ok())throw Error(`Static board responded with HTTP ${J?.status()??"unknown"}; request a fresh one-time token before retrying`);await X.locator('[data-ideawave-static-board-ready="true"]').waitFor({state:"attached",timeout:Q}),await X.evaluate(async()=>{if(document.fonts?.ready)await document.fonts.ready});let Y=await X.screenshot({type:"png",animations:"disabled",caret:"hide",scale:"css"});if(Y.byteLength<iX)throw Error("Headless Shell returned an empty screenshot");return aX(Buffer.from(Y),r0().engine??"system-chromium")})}var oX=0,nX=30000,tX=15000,eX="/screenshot",ZK=65536,e3="http://127.0.0.1",_6="IDEAWAVE_CLI_ALLOW_RAILWAY_PR_PREVIEWS";async function Z7(Z=i3(),Q=(X)=>new t3(X,{headers:{origin:e3}})){try{let{url:X,socket:J}=await a3({candidates:Z,createWebSocket:Q});try{J.close()}catch{}return X}catch{return null}}var QK=new Set(["https://ideawave-app-production.up.railway.app"]);function XK(Z){return Z==="ideawave.app"||Z.endsWith(".ideawave.app")}function KK(Z){return Z==="1"||Z?.toLowerCase()==="true"}function JK(Z){return/^ideawave-app-ideawave-app-pr-\d+\.up\.railway\.app$/i.test(Z)}function YK(){let Z=process.env.IDEAWAVE_CLI_ALLOWED_ORIGINS;if(!Z)return WK;let Q=new Set;for(let X of Z.split(",")){let J=X.trim();if(!J)continue;try{Q.add(new URL(J).origin)}catch{}}return Q}var WK=new Set;function k6(Z){if(!Z)return!1;let Q;try{Q=new URL(Z)}catch{return!1}if(QK.has(Q.origin))return!0;if(YK().has(Q.origin))return!0;if(Q.protocol==="https:"&&KK(process.env[_6])&&JK(Q.hostname))return!0;if(Q.protocol==="https:"&&XK(Q.hostname))return!0;if(Q.protocol!=="http:"&&Q.protocol!=="https:")return!1;return Q.hostname==="localhost"||Q.hostname==="127.0.0.1"||Q.hostname==="::1"}function n0(Z,Q){if(Z.readyState!==t3.OPEN)return;try{Z.send(D1(Q))}catch{}}function VK(Z){if(typeof Z==="string")return Z;if(Buffer.isBuffer(Z))return Z.toString("utf8");if(Array.isArray(Z))return Buffer.concat(Z).toString("utf8");return Buffer.from(Z).toString("utf8")}function F4(Z){if(typeof Z==="string")return Z;if(Array.isArray(Z))return Z[0]??null;return null}function o3(Z,Q,X){Z.write(`HTTP/1.1 ${Q} ${X}\r
|
|
45
45
|
Connection: close\r
|
|
46
46
|
Content-Length: ${Buffer.byteLength(X)}\r
|
|
47
47
|
\r
|
|
48
|
-
${X}`),Z.destroy()}function JX(Z,Q){return new Promise((X,K)=>{let Y=(z)=>{Z.off("listening",W),K(z)},W=()=>{Z.off("error",Y);let z=Z.address();if(!z||typeof z==="string"){K(Error("Failed to read CLI bridge server address"));return}X(z.port)};Z.once("error",Y),Z.once("listening",W),Z.listen(Q,"127.0.0.1")})}function O3(Z){return new Promise((Q,X)=>{Z.close((K)=>{if(K)X(K);else Q()})})}async function y3(Z,Q=B6()){let X=new Map,K=new Map,Y=Z.maxMessageSize??pQ,W=!1,z=(x)=>{let y=K.get(x);if(y)clearTimeout(y);K.delete(x)},B=(x)=>{K.delete(x);let{activeRunIds:y}=Z.registry.disconnect(x);Z.onDisconnect(x,y)},w=(x,y)=>{let v={type:"cli_status",connected:!0,runtime:Z.runtime,mcpReady:Z.mcpReady(),error:y,capabilities:Z.capabilities??[],cliVersion:Z.cliVersion,browserRuntime:Z.browserRuntimeStatus?.()};if(x){let $=X.get(x);if($)a0($,v);return}for(let $ of X.values())a0($,v)},q=(x,y)=>{let v=y.sessionId.trim(),$=y.userId.trim();if(!v||!$){a0(x,{type:"cli_status",connected:!1,runtime:Z.runtime,mcpReady:Z.mcpReady(),error:"Missing frontend session or user id"}),x.close();return}z(v);let C=X.get(v);if(C&&C!==x)C.close();x.data.frontendSessionId=v,X.set(v,x),Z.registry.register({frontendSessionId:v,userId:$,tools:y.tools,send:(N)=>a0(x,N)}),w(v),Z.onToolMetadata?.(v)},b=(x,y)=>{let v=Z.registry.getUserId(x);if(!v)return;switch(y.type){case"bridge_ping":{let $=X.get(x);if($)a0($,{type:"bridge_pong"});break}case"tool_metadata":Z.registry.setMetadata(x,y.tools),Z.onToolMetadata?.(x);break;case"tool_result":Z.registry.handleToolResult(x,y);break;case"run_turn":m("bridge.run_received",{runId:y.run.runId,cardId:y.run.cardId,frontendSessionId:x}),Z.registry.markRunActive(x,y.run.runId,y.run.cardId),Z.onRunTurn(x,{...y.run,frontendSessionId:x,userId:v});break;case"cancel_run":if(Z.registry.ownsRun(x,y.runId))Z.onCancelRun(x,y.runId);break;case"runtime_rpc":Z.onRuntimeRpc(x,y);break;case"browser_rpc":Z.onBrowserRpc?.(x,X.get(x)?.data.frontendOrigin??"",y);break;case"warmup_run":Z.onWarmupRun(x,{...y,frontendSessionId:x},v);break;default:break}},M=(x,y)=>{let v=F6(x.headers.origin),$=x3(v),C={Vary:"Origin"};if($&&v)C["Access-Control-Allow-Origin"]=v,C["Access-Control-Allow-Private-Network"]="true";if(x.method==="OPTIONS"){y.writeHead(204,{...C,"Access-Control-Allow-Methods":"GET, OPTIONS","Access-Control-Allow-Headers":"*","Access-Control-Max-Age":"600"}),y.end();return}if(x.method!=="GET"){y.writeHead(405,C),y.end();return}y.writeHead(200,{...C,"content-type":"application/json","cache-control":"no-store"}),y.end(JSON.stringify({ideawave:!0,runtime:Z.runtime,mcpReady:Z.mcpReady(),capabilities:Z.capabilities??[],cliVersion:Z.cliVersion,browserRuntime:Z.browserRuntimeStatus?.()}))};for(let x of Q){let y=aQ((C,N)=>{(async()=>{if(new URL(C.url??"/","http://127.0.0.1").pathname===w3){M(C,N);return}if(await Z.onHttpRequest?.(C,N))return;N.writeHead(404,{"content-type":"text/plain"}),N.end("IdeaWave CLI bridge")})().catch((f)=>{if(N.headersSent){N.destroy(f instanceof Error?f:void 0);return}N.writeHead(500,{"content-type":"text/plain"}),N.end("IdeaWave CLI bridge request failed")})}),v=new iQ({noServer:!0,maxPayload:Y}),$=(C)=>{if(C.idleTimer)clearTimeout(C.idleTimer);C.idleTimer=setTimeout(()=>{C.close()},sQ),C.idleTimer.unref?.()};v.on("connection",(C,N)=>{let f=C;f.data={id:dQ(),frontendSessionId:null,frontendOrigin:new URL(F6(N.headers.origin)??v3).origin},f.idleTimer=null,$(f),f.on("ping",()=>$(f)),f.on("pong",()=>$(f)),f.on("error",()=>{if(f.idleTimer)clearTimeout(f.idleTimer);f.close()}),f.on("message",(E)=>{$(f);let G=XX(E);if(Y>0&&G.length>Y)return;let I=b1(G);if(!I)return;let D=f.data.frontendSessionId;if(!D){if(I.type==="bridge_probe")a0(f,{type:"bridge_probe_ack",protocolVersion:I.protocolVersion});else if(I.type==="frontend_hello")q(f,I);return}b(D,I)}),f.on("close",()=>{if(f.idleTimer)clearTimeout(f.idleTimer);let E=f.data.frontendSessionId;if(!E)return;if(X.get(E)!==f)return;if(X.delete(E),z(E),W)return;K.set(E,setTimeout(()=>B(E),rQ))})}),y.on("upgrade",(C,N,f)=>{if(new URL(C.url??"/","http://127.0.0.1").pathname!==U6){b3(N,404,"Not Found");return}if(!x3(F6(C.headers.origin))){b3(N,403,"Forbidden");return}v.handleUpgrade(C,N,f,(G)=>{v.emit("connection",G,C)})});try{let C=await JX(y,x);return{url:`ws://127.0.0.1:${C}${U6}`,port:C,sendStatus:w,close:async()=>{W=!0;for(let N of K.values())clearTimeout(N);K.clear();for(let N of v.clients){let f=N;if(f.idleTimer)clearTimeout(f.idleTimer);f.close()}v.close(),await O3(y).catch(()=>{return})}}}catch(C){if(v.close(),await O3(y).catch(()=>{return}),C?.code==="EADDRINUSE")continue;throw C}}throw Error(`No free IdeaWave CLI bridge port found in ${Q[0]}-${Q.at(-1)}`)}import{Server as PX}from"@modelcontextprotocol/sdk/server/index.js";import{CallToolRequestSchema as xX,ListToolsRequestSchema as bX}from"@modelcontextprotocol/sdk/types.js";import{randomUUID as YX}from"node:crypto";import{createServer as WX}from"node:http";import{StreamableHTTPServerTransport as VX}from"@modelcontextprotocol/sdk/server/streamableHttp.js";import{isInitializeRequest as N3}from"@modelcontextprotocol/sdk/types.js";var f3=new Set(["127.0.0.1","localhost","[::1]","::1"]);function KX(Z){let Q=Z.trim();if(Q.length===0)return null;if(Q.startsWith("[")){let W=Q.indexOf("]");if(W===-1)return null;let z=Q.slice(0,W+1),B=Q.slice(W+1);if(B.length===0)return{host:z,port:null};if(!B.startsWith(":"))return null;let w=Number(B.slice(1));if(!Number.isInteger(w)||w<=0||w>65535)return null;return{host:z,port:w}}let X=Q.lastIndexOf(":");if(X===-1)return{host:Q,port:null};let K=Q.slice(X+1),Y=Number(K);if(!Number.isInteger(Y)||Y<=0||Y>65535)return{host:Q,port:null};return{host:Q.slice(0,X),port:Y}}function h3(Z){return f3.has(Z)||f3.has(Z.toLowerCase())}function M3(Z,Q){let X=Z.headers.host;if(typeof X!=="string")return{ok:!1,status:403,reason:"missing-host"};let K=KX(X);if(!K)return{ok:!1,status:403,reason:"bad-host"};if(!h3(K.host))return{ok:!1,status:403,reason:"non-loopback-host"};if(K.port!==null&&K.port!==Q)return{ok:!1,status:403,reason:"host-port-mismatch"};let Y=Z.headers.origin;if(typeof Y==="string"&&Y.length>0){if(Y!=="null"){let W;try{W=new URL(Y)}catch{return{ok:!1,status:403,reason:"bad-origin"}}if(!h3(W.hostname))return{ok:!1,status:403,reason:"non-loopback-origin"}}}return{ok:!0}}var D3="/mcp",HX=43274,G3=16777216,jX=1800000,zX=300000,$3=200,qX=-32700,f0=-32600,L6=-32603;function W0(Z,Q,X,K,Y){Z.statusCode=Q,Z.setHeader("content-type","application/json"),Z.end(JSON.stringify({jsonrpc:"2.0",error:{code:X,message:K,...Y?{data:Y}:{}},id:null}))}class P6 extends Error{constructor(){super("expected application/json");this.name="BadContentTypeError"}}class x6 extends Error{constructor(){super(`body exceeds ${G3} bytes`);this.name="BodyTooLargeError"}}async function UX(Z){if(Z.method&&Z.method!=="POST")return;let Q=Z.headers["content-type"];if(typeof Q==="string"&&Q.trim().length>0){if(!Q.toLowerCase().includes("application/json"))throw new P6}let X=0,K=[];for await(let W of Z){let z=typeof W==="string"?Buffer.from(W):W;if(X+=z.byteLength,X>G3)throw new x6;K.push(z)}if(K.length===0)return;let Y=Buffer.concat(K).toString("utf8");if(Y.length===0)return;return JSON.parse(Y)}function BX(Z){if(Array.isArray(Z))return Z.some(N3);return N3(Z)}function FX(Z){if(typeof Z==="number")return Z;let Q=process.env.IDEAWAVE_MCP_PORT;if(Q&&Q.trim().length>0){let X=Number(Q);if(Number.isInteger(X)&&X>=0&&X<65536)return X}return HX}async function wX(Z,Q){let X=(Y)=>new Promise((W,z)=>{let B=(q)=>{Z.off("listening",w),z(q)},w=()=>{Z.off("error",B),W()};Z.once("error",B),Z.once("listening",w),Z.listen(Y,"127.0.0.1")});try{await X(Q)}catch(Y){if(Y.code!=="EADDRINUSE"||Q===0)throw Y;console.warn(`[mcp] port ${Q} in use, falling back to an OS-assigned port; external CLIs will need to re-paste the install command from Settings → External agents`),await X(0)}let K=Z.address();if(K==null||typeof K==="string")throw Error("[mcp] failed to read bound address");return K.port}function LX(Z,Q){if(Q&&typeof Q==="object"&&!Array.isArray(Q)){let K=Q.params;if(K&&typeof K==="object"&&!Array.isArray(K)){let Y=K.clientInfo;if(Y&&typeof Y==="object"&&!Array.isArray(Y)){let W=Y.name;if(typeof W==="string"&&W.trim().length>0)return W.trim()}}}let X=Z.headers["user-agent"];if(typeof X==="string"&&X.trim().length>0)return X.trim();return null}async function g3(Z){let Q=new Map,X=0;function K(q){let b=Q.get(q);if(b)b.lastActivity=Date.now()}async function Y(q,b){Q.delete(q),await b.transport.close().catch(()=>{return})}async function W(){let q=null,b=1/0;for(let[M,x]of Q)if(x.lastActivity<b)b=x.lastActivity,q=M;if(q!==null){let M=Q.get(q);if(M)console.warn(`[mcp] session cap of ${$3} reached; evicting ${q}`),await Y(q,M)}}let z=setInterval(()=>{let q=Date.now()-jX;for(let[b,M]of Q)if(M.lastActivity<q)console.log(`[mcp] sweeping idle session ${b}`),Y(b,M)},zX);z.unref?.();let B=WX((q,b)=>{(async()=>{let M;try{M=new URL(q.url??"/","http://127.0.0.1").pathname}catch{W0(b,400,f0,"bad-url");return}if(M!==D3){W0(b,404,f0,"not-found");return}let x=q.method??"POST";if(x!=="POST"&&x!=="GET"&&x!=="DELETE"){b.setHeader("Allow","GET, POST, DELETE"),W0(b,405,f0,"method-not-allowed");return}let y=M3(q,X);if(!y.ok){W0(b,y.status,f0,"forbidden",{reason:y.reason});return}let v=q.headers["mcp-session-id"],$=typeof v==="string"?v:void 0;if(x==="GET"||x==="DELETE"){if(!$||!Q.has($)){W0(b,400,f0,"no-session",{hint:"Open a POST initialize first to receive an Mcp-Session-Id."});return}let f=Q.get($).transport;K($);try{await f.handleRequest(q,b)}catch(E){if(console.error("[mcp] transport.handleRequest (GET/DELETE) threw",E),!b.headersSent)W0(b,500,L6,"internal")}return}let C;try{C=await UX(q)}catch(f){if(f instanceof P6){W0(b,415,f0,"expected-application-json");return}if(f instanceof x6){W0(b,413,f0,"body-too-large");return}W0(b,400,qX,"invalid-json");return}let N;if($&&Q.has($))N=Q.get($).transport,K($);else if(!$&&C!==void 0&&BX(C)){let f=q.headers["x-ideawave-user-id"],E=typeof f==="string"&&f.trim().length>0?f.trim():null,G=q.headers["x-ideawave-frontend-session-id"],I=typeof G==="string"&&G.trim().length>0?G.trim():null,D=q.headers["x-ideawave-tool-surface"],L=typeof D==="string"&&D.trim()==="read"?"read":"full",g=q.headers["x-ideawave-images-supported"],l=typeof g==="string"&&g.trim()==="1",a=q.headers["x-ideawave-card-id"],_0=typeof a==="string"&&a.trim().length>0?a.trim():null,P0=q.headers["x-ideawave-board-id"],_=typeof P0==="string"&&P0.trim().length>0?P0.trim():null,i=q.headers["x-ideawave-run-folder"],A=typeof i==="string"&&i.trim().length>0?i.trim():null,Z0=LX(q,C);if(Q.size>=$3)await W();let s=null,N0=new VX({sessionIdGenerator:()=>YX(),onsessioninitialized:(S0)=>{s=S0,Q.set(S0,{transport:N0,lastActivity:Date.now()})},onsessionclosed:(S0)=>{Q.delete(S0)}});N0.onclose=()=>{if(N0.sessionId)Q.delete(N0.sessionId)};try{await Z.buildServer({userId:E,frontendSessionId:I,boardId:_,toolSurface:L,imagesSupported:l,cardId:_0,runFolder:A,clientHint:Z0}).connect(N0)}catch(S0){if(console.error("[mcp] buildServer/connect failed",S0),s)Q.delete(s);await N0.close().catch(()=>{return}),W0(b,500,L6,"server-init-failed");return}N=N0}else{W0(b,400,f0,"no-session",{hint:"Non-initialize requests must include a valid Mcp-Session-Id header obtained from a prior initialize."});return}try{await N.handleRequest(q,b,C)}catch(f){if(console.error("[mcp] transport.handleRequest threw",f),!b.headersSent)W0(b,500,L6,"internal")}})().catch((M)=>{console.error("[mcp] unhandled request handler error:",M)})});return X=await wX(B,FX(Z.port)),{url:`http://127.0.0.1:${X}${D3}`,port:X,close:async()=>{clearInterval(z);for(let q of Q.values())await q.transport.close().catch(()=>{return});Q.clear(),await new Promise((q)=>B.close(()=>q()))}}}var OX={name:"ideawave-board",version:"1.0.0"},Q4="list_run_folder",X4="read_run_folder_file",k3=new Set(["list_boards","get_board","list_nodes","list_edges","inspect_node","list_context_sources","read_context_card","read_context_file","read_context_image","list_context_folder","get_board_wiki","search_board","get_card_messages","list_agent_cards","inspect_neighbors",Q4,X4]),_3=new Set(["inspect_diagram"]),CX=[{name:Q4,description:"List visible files and folders under the selected runtime run folder. Hidden/config folders are omitted.",inputSchema:{type:"object",properties:{path:{type:"string",description:"Optional relative path inside the selected run folder. Defaults to the run-folder root."}},additionalProperties:!1}},{name:X4,description:"Read a text file inside the selected runtime run folder. Hidden/config paths and outside-folder paths are denied.",inputSchema:{type:"object",properties:{path:{type:"string",description:"Relative path to a text file inside the selected run folder."}},required:["path"],additionalProperties:!1}}];function b6(Z){return{content:[{type:"text",text:Z}]}}function vX(Z){return b6(JSON.stringify(Z,null,2))}function E3(Z){return{...b6(Z),isError:!0}}function RX(Z,Q,X="full",K=!1){return Z.getMetadata(Q).filter((Y)=>{let W=E1(Y.name);if(X==="read"&&!k3.has(W))return!1;if(!K&&_3.has(W))return!1;return!0}).map((Y)=>({name:Y.name,description:Y.description,inputSchema:Y.inputSchema}))}function yX(Z,Q,X={}){let K=RX(Z,Q,X.toolSurface??"full",X.imagesSupported??!1);return X.includeRunFolderTools?[...K,...CX]:K}function m3(Z,Q){if(!Z||typeof Z!=="object"||Array.isArray(Z))return null;let X=Z[Q];return typeof X==="string"?X:null}async function fX(Z,Q,X){if(X&&X.trim().length>0)return X.trim();if(!Z||!Q)throw Error("Run-folder tools require an active IdeaWave board and card.");return(await O0({boardId:Z,cardId:Q})).runFolder}async function hX(Z){let Q=await fX(Z.boardId,Z.cardId,Z.runFolder);if(Z.name===Q4){let X=m3(Z.args,"path")??"",K=await P2(Q,X);return vX(K)}if(Z.name===X4){let X=m3(Z.args,"path");if(!X)return E3("read_run_folder_file requires a path.");return b6(await g1(Q,X))}return E3(`Unknown local tool "${Z.name}"`)}function MX(Z,Q,X,K,Y,W="full",z=!1){let B=new PX(OX,{capabilities:{tools:{}}}),w=async()=>{if(z)return!0;if(S2(K))return!0;if(X&&K)try{return(await O0({boardId:X,cardId:K})).adapter.supportsImages===!0}catch{return!1}return!1};return B.setRequestHandler(bX,async()=>({tools:yX(Z,Q,{includeRunFolderTools:Boolean(Y||X&&K),toolSurface:W,imagesSupported:await w()})})),B.setRequestHandler(xX,async(q)=>{let{name:b,arguments:M}=q.params,x=E1(b),y=Date.now();m("mcp.tool_call_received",{frontendSessionId:Q,cardId:K,toolName:x});try{if(x===Q4||x===X4)return await hX({name:x,args:M,boardId:X,cardId:K,runFolder:Y});if(W==="read"&&!k3.has(x))throw Error(`Tool "${b}" is not available in read-only mode`);if(_3.has(x)&&!await w())throw Error(`Tool "${b}" requires a runtime that supports image input`);let v=await Z.callTool(Q,x,M??{},void 0,K??void 0);if(m("mcp.tool_result_returned",{frontendSessionId:Q,cardId:K,toolName:x,elapsedMs:Date.now()-y}),v&&typeof v==="object"&&Array.isArray(v.content))return v;return{content:[{type:"text",text:typeof v==="string"?v:JSON.stringify(v)}]}}catch(v){return m("mcp.tool_result_returned",{frontendSessionId:Q,cardId:K,toolName:x,elapsedMs:Date.now()-y,hasError:!0}),{content:[{type:"text",text:v instanceof Error?v.message:"Tool call failed"}],isError:!0}}}),B}function S3(Z,Q){return g3({buildServer:(X)=>MX(Z,X.frontendSessionId,X.boardId,X.cardId,X.runFolder,X.toolSurface,X.imagesSupported),port:Q})}import J4 from"node:fs/promises";import O6 from"node:os";import K4 from"node:path";function I3(){return`cfg_${crypto.randomUUID().replace(/-/g,"").slice(0,16)}`}async function NX(){let[Z,Q]=await Promise.all([J0(),U2()]),X=Z.globalDefaultConfigId?Z.runtimes.find((K)=>K.id===Z.globalDefaultConfigId)??null:null;return{runtimes:Z.runtimes,globalDefaultConfigId:Z.globalDefaultConfigId,globalDefaultEffective:X?{runFolder:X.runFolder??O6.homedir(),modelId:X.defaultModelId??null,configValues:X.defaultConfigValues??{}}:null,knownAdapters:T0().map((K)=>({id:K.id,displayName:K.displayName})),readiness:Q}}async function DX(Z){try{let Q=await O0({boardId:Z.boardId,cardId:Z.cardId});return{resolved:{configId:Q.entry.id,adapterId:Q.entry.kind==="registered"?Q.entry.adapterId:null,displayName:Q.entry.displayName,runFolder:Q.runFolder,modelId:Q.modelId,configValues:Q.configValues}}}catch(Q){if(Q instanceof D0)return{resolved:null};throw Q}}async function $X(Z){return V0((Q)=>{let X=Q.runtimes.find((W)=>W.kind==="registered"&&W.adapterId===Z.adapterId);if(X)return X;let K=T0().find((W)=>W.id===Z.adapterId);if(!K)throw Error(`Unknown adapterId: ${Z.adapterId}`);let Y={id:I3(),kind:"registered",adapterId:Z.adapterId,displayName:K.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null};return Q.runtimes.push(Y),Y})}async function GX(Z){return V0((Q)=>{let X={id:I3(),kind:"custom",displayName:Z.displayName,command:Z.command,args:Z.args,env:Z.env,runFolder:Z.runFolder,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null};return Q.runtimes.push(X),X})}async function gX(Z){await V0((Q)=>{if(Q.runtimes=Q.runtimes.filter((X)=>X.id!==Z.runtimeConfigId),Q.globalDefaultConfigId===Z.runtimeConfigId)Q.globalDefaultConfigId=null;for(let X of Object.keys(Q.boardOverrides))if(Q.boardOverrides[X].runtimeConfigId===Z.runtimeConfigId)delete Q.boardOverrides[X];for(let X of Object.keys(Q.cardOverrides))if(Q.cardOverrides[X].runtimeConfigId===Z.runtimeConfigId)delete Q.cardOverrides[X]})}async function EX(Z){await V0((Q)=>{let X=Q.runtimes.find((K)=>K.id===Z.runtimeConfigId);if(!X)throw Error(`Runtime config not found: ${Z.runtimeConfigId}`);if(Q.globalDefaultConfigId=Z.runtimeConfigId,Z.runFolder!==void 0)X.runFolder=Z.runFolder;if(Z.modelId!==void 0)X.defaultModelId=Z.modelId;if(Z.configValues!==void 0)X.defaultConfigValues=Z.configValues})}async function mX(Z){Z.boardId,await V0((Q)=>{if(Z.runtimeConfigId===null){delete Q.cardOverrides[Z.cardId];return}if(!Q.runtimes.some((Y)=>Y.id===Z.runtimeConfigId))throw Error(`Runtime config not found: ${Z.runtimeConfigId}`);let K=Q.cardOverrides[Z.cardId];Q.cardOverrides[Z.cardId]={runtimeConfigId:Z.runtimeConfigId,runFolder:Z.runFolder!==void 0?Z.runFolder:K?.runFolder??null,modelId:Z.modelId!==void 0?Z.modelId:K?.modelId??null,configValues:Z.configValues!==void 0?Z.configValues:K?.configValues??{}}})}async function kX(Z){let X=(await J0()).runtimes.find((z)=>z.id===Z.runtimeConfigId);if(!X)throw Error(`Runtime config not found: ${Z.runtimeConfigId}`);let K=U0(X),Y=await K.resolveSpawnConfig(X),W=X.runFolder??O6.homedir();try{let z=await E2({spawn:{...Y,cwd:W},modelId:Z.modelId??X.defaultModelId??null,configValues:Z.configValues??X.defaultConfigValues??{}}),B=$1({adapterId:K.id,models:z.models,currentModelId:z.currentModelId}),w=new Date().toISOString();return await V0((q)=>{let b=q.runtimes.find((M)=>M.id===Z.runtimeConfigId);if(b)b.discoveredModels=B,b.discoveredConfigOptions=z.configOptions,b.discoveredAt=w}),{ok:!0,models:B,configOptions:z.configOptions,currentModelId:z.currentModelId}}catch(z){if(z instanceof I0)throw Error(`${z.message}${K.authHint?` ${K.authHint}`:""}`);if(z instanceof S||z instanceof q0)throw Error(z.message);throw z}}async function _X(Z){let Q=O6.homedir(),X=Z.path?.trim()?Z.path.trim():Q,K=K4.resolve(X),Y=!0;try{if(!(await J4.stat(K)).isDirectory())K=K4.dirname(K)}catch{Y=!1,K=Q}let W=[];try{W=(await J4.readdir(K,{withFileTypes:!0})).filter((w)=>w.isDirectory()&&!w.name.startsWith(".")).map((w)=>({name:w.name,path:K4.join(K,w.name)})).sort((w,q)=>w.name.localeCompare(q.name))}catch{W=[]}let z=K4.dirname(K);return{path:K,parent:z===K?null:z,home:Q,exists:Y,entries:W}}var u3={list:NX,getEffectiveForCard:DX,registerRegistered:$X,registerCustom:GX,unregister:gX,setUserDefault:EX,setCardOverride:mX,refreshModels:kX,browseFolder:_X};var SX=[{id:"claude-code",displayName:"Claude Code"},{id:"codex",displayName:"Codex"},{id:"copilot",displayName:"Copilot"},{id:"opencode",displayName:"OpenCode"}];function IX(){return`cfg_${crypto.randomUUID().replace(/-/g,"").slice(0,16)}`}async function T3(){try{let Z=await J0();if(Z.globalDefaultConfigId){if(Z.runtimes.some((X)=>X.id===Z.globalDefaultConfigId))return Z.globalDefaultConfigId}for(let Q of SX){if((await B2(Q.id))?.status!=="ready")continue;let K=null;if(await V0((Y)=>{if(Y.globalDefaultConfigId){if(Y.runtimes.some((B)=>B.id===Y.globalDefaultConfigId)){K=Y.globalDefaultConfigId;return}}let W=Y.runtimes.find((z)=>z.kind==="registered"&&z.adapterId===Q.id);if(!W){let z={id:IX(),kind:"registered",adapterId:Q.id,displayName:Q.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null};Y.runtimes.push(z),W=z}Y.globalDefaultConfigId=W.id,K=W.id}),K)return console.log(`[ideawave-cli] using agent runtime: ${Q.displayName}`),K}return console.warn("[ideawave-cli] no agent runtime detected on PATH (tried claude, codex, gh copilot, opencode). Install one to run agents."),null}catch(Z){return console.warn("[ideawave-cli] runtime auto-seed failed",Z),null}}var uX=120000;function TX(){if(typeof crypto<"u"&&"randomUUID"in crypto)return`call_${crypto.randomUUID()}`;return`call_${Date.now()}_${Math.random().toString(16).slice(2)}`}class C6{sessions=new Map;createCallId;toolCallTimeoutMs;constructor(Z={}){this.createCallId=Z.createCallId??TX,this.toolCallTimeoutMs=Z.toolCallTimeoutMs??uX}register(Z){let Q=this.sessions.get(Z.frontendSessionId);if(Q){if(Q.userId!==Z.userId)this.rejectPending(Q,"frontend session user changed"),Q.activeRunIds.clear();this.sessions.set(Z.frontendSessionId,{frontendSessionId:Z.frontendSessionId,userId:Z.userId,tools:Z.tools,send:Z.send,pendingToolCalls:Q.pendingToolCalls,activeRunIds:Q.activeRunIds,activeRunCardIds:Q.activeRunCardIds});return}this.sessions.set(Z.frontendSessionId,{frontendSessionId:Z.frontendSessionId,userId:Z.userId,tools:Z.tools,send:Z.send,pendingToolCalls:new Map,activeRunIds:new Set,activeRunCardIds:new Map})}disconnect(Z,Q="frontend session disconnected"){let X=this.sessions.get(Z);if(!X)return{activeRunIds:[]};return this.sessions.delete(Z),this.rejectPending(X,Q),{activeRunIds:Array.from(X.activeRunIds)}}sessionCount(){return this.sessions.size}has(Z){return this.sessions.has(Z)}getUserId(Z){return this.sessions.get(Z)?.userId??null}setMetadata(Z,Q){let X=this.sessions.get(Z);if(X)X.tools=Q}getMetadata(Z){if(!Z)return[];return this.sessions.get(Z)?.tools??[]}sendToSession(Z,Q){let X=this.sessions.get(Z);if(!X)return!1;return X.send(Q),!0}callTool(Z,Q,X,K,Y){if(!Z)return Promise.reject(Error("MCP tool call is missing a frontend session id"));let W=this.sessions.get(Z);if(!W)return Promise.reject(Error(`Frontend session ${Z} is not connected`));let z=this.createCallId();return new Promise((B,w)=>{let q=K??(Y?this.getActiveRunIdForCard(W,Y):this.getSoleActiveRunId(W)),b=Y??(q?W.activeRunCardIds.get(q):void 0),M=Date.now(),x=setTimeout(()=>{W.pendingToolCalls.delete(z),m("tool_queue.timeout",{frontendSessionId:Z,runId:q,cardId:b,callId:z,toolName:Q,elapsedMs:Date.now()-M,queueDepth:W.pendingToolCalls.size}),w(Error(`Tool "${Q}" timed out waiting for the frontend`))},this.toolCallTimeoutMs);W.pendingToolCalls.set(z,{resolve:B,reject:w,timer:x,name:Q,runId:q??null,cardId:b??null,startedAt:M}),m("tool_queue.forwarded_to_browser",{frontendSessionId:Z,runId:q,cardId:b,callId:z,toolName:Q,queueDepth:W.pendingToolCalls.size}),W.send({type:"tool_call",callId:z,name:Q,args:X,...q?{runId:q}:{},...b?{cardId:b}:{}})})}handleToolResult(Z,Q){let X=this.sessions.get(Z);if(!X)return;let K=X.pendingToolCalls.get(Q.callId);if(!K)return;if(X.pendingToolCalls.delete(Q.callId),clearTimeout(K.timer),m("tool_queue.result_received",{frontendSessionId:Z,runId:K.runId,cardId:K.cardId,callId:Q.callId,toolName:K.name,elapsedMs:Date.now()-K.startedAt,queueDepth:X.pendingToolCalls.size,ok:Q.ok}),Q.ok){K.resolve(Q.result);return}let Y=Q.result;if(Y&&typeof Y==="object"&&Array.isArray(Y.content)){K.resolve({...Y,isError:!0});return}K.reject(Error(Q.error??"Tool execution failed"))}markRunActive(Z,Q,X){let K=this.sessions.get(Z);if(!K)return;if(K.activeRunIds.add(Q),X)K.activeRunCardIds.set(Q,X)}markRunSettled(Z,Q){let X=this.sessions.get(Z);if(!X)return;X.activeRunIds.delete(Q),X.activeRunCardIds.delete(Q)}ownsRun(Z,Q){return this.sessions.get(Z)?.activeRunIds.has(Q)??!1}rejectPending(Z,Q){for(let X of Z.pendingToolCalls.values())clearTimeout(X.timer),m("tool_queue.rejected",{frontendSessionId:Z.frontendSessionId,runId:X.runId,cardId:X.cardId,toolName:X.name,elapsedMs:Date.now()-X.startedAt}),X.reject(Error(Q));Z.pendingToolCalls.clear()}getSoleActiveRunId(Z){return Z.activeRunIds.size===1?Z.activeRunIds.values().next().value:void 0}getActiveRunIdForCard(Z,Q){let X=[...Z.activeRunCardIds.entries()].filter(([K,Y])=>Z.activeRunIds.has(K)&&Y===Q).map(([K])=>K);return X.length===1?X[0]:void 0}}function l3(){return"0.0.62".trim()?"0.0.62":"dev"}var AX=process.argv.slice(2),c3=[];for(let Z of AX){if(Z==="--dev"){process.env[w6]="1";continue}c3.push(Z)}var h0=c3[0];if(h0==="--help"||h0==="-h"||h0==="help")console.log("ideawave — host the local bridge for a running ideawave.app session."),console.log(""),console.log("Usage:"),console.log(" ideawave Serve the browser bridge and MCP forwarder."),console.log(" ideawave --version Print the CLI version."),process.exit(0);if(h0==="--version"||h0==="-v"||h0==="version")console.log(l3()),process.exit(0);if(h0)console.error(`Unknown command: ${h0}`),console.error("Run `ideawave --help` for usage."),process.exit(1);var B1=new C6,M0=null,d3={phase:"idle"},F1=new q6(new t0((Z)=>{d3=Z,M0?.sendStatus()}));function k0(Z,Q){B1.sendToSession(Z,Q)}async function lX(Z,Q){try{let X=u3[Q.method],K=await X(Q.params);k0(Z,{type:"runtime_rpc_result",requestId:Q.requestId,ok:!0,result:K})}catch(X){k0(Z,{type:"runtime_rpc_result",requestId:Q.requestId,ok:!1,error:X instanceof Error?X.message:String(X)})}}var w1=!1,U1=null;async function v6(){if(w1)return;if(U1)return U1;return U1=(async()=>{try{let Z=await S3(B1);D6({...Z,requestedPort:Z.port}),console.log(`[ideawave-cli] MCP endpoint for the agent: ${Z.url}`);try{await p6({onStatusChange:(Q)=>{if(F2(),M0?.sendStatus(),Q.status==="failed")console.warn(`[ideawave-cli] ACP bridge setup failed for ${Q.packageName}: ${Q.error??"unknown error"}`)}})}catch(Q){console.warn("[ideawave-cli] ACP bridge setup skipped:",Q instanceof Error?Q.message:String(Q))}await T3(),w1=!0,console.log("[ideawave-cli] ready — agent runs will drive the board."),M0?.sendStatus()}catch(Z){console.error("[ideawave-cli] failed to start agent host:",Z),M0?.sendStatus(void 0,Z instanceof Error?Z.message:String(Z))}finally{U1=null}})(),U1}if(process.env.APP_ENV!=="development"){let Z=await R3();if(Z)console.error(`[ideawave-cli] An IdeaWave CLI is already running at ${Z}.`),console.error("[ideawave-cli] Only one CLI per machine is supported — it already serves every browser tab. Exiting."),process.exit(0)}M0=await y3({registry:B1,runtime:null,mcpReady:()=>w1,capabilities:["browser-proxy-v1",$6,G6],cliVersion:l3(),browserRuntimeStatus:()=>d3,onToolMetadata:(Z)=>{console.log(`[ideawave-cli] session ${Z} advertised ${B1.getMetadata(Z).length} tools`),v6()},onRunTurn:(Z,Q)=>{console.log(`[ideawave-cli] running agent turn for card ${Q.cardId} (session ${Z})`),(async()=>{if(await v6(),!w1){k0(Z,{type:"run_settled",runId:Q.runId,cardId:Q.cardId,result:{assistantContent:"",model:null,latencyMs:0,errorText:"IdeaWave CLI agent host is not ready",partialText:null}});return}await A2(Q,(X)=>k0(Z,X))})().catch(()=>{return}).finally(()=>B1.markRunSettled(Z,Q.runId))},onCancelRun:(Z,Q)=>{T4(Q)},onRuntimeRpc:(Z,Q)=>{lX(Z,Q)},onBrowserRpc:(Z,Q,X)=>{F1.handleRpc(Z,Q,X).then((K)=>{k0(Z,{type:"browser_rpc_result",requestId:X.requestId,ok:!0,result:K})},(K)=>{k0(Z,{type:"browser_rpc_result",requestId:X.requestId,ok:!1,error:K instanceof Error?K.message:String(K)})})},onHttpRequest:(Z,Q)=>F1.handleHttpRequest(Z,Q),onWarmupRun:(Z,Q,X)=>{(async()=>{if(await v6(),!w1)return{status:"retryable",error:"agent host is not ready"};return l2({cardId:Q.cardId,boardId:Q.boardId,userId:X,frontendSessionId:Z})})().then((K)=>{if(!Q.warmupId)return;k0(Z,{type:"warmup_result",warmupId:Q.warmupId,cardId:Q.cardId,...K})})},onDisconnect:(Z,Q)=>{F1.closeFrontendSession(Z),I2(Z);for(let X of Q)T4(X);m("bridge.frontend_disconnected",{frontendSessionId:Z,activeRuns:Q.length}),f6(Z).catch((X)=>{console.warn(`[ideawave-cli] failed to evict sessions for ${Z}:`,X instanceof Error?X.message:String(X))}),console.log(`[ideawave-cli] browser session ${Z} disconnected`)}});F1.setPort(M0.port);console.log(`[ideawave-cli] browser bridge listening on ${M0.url}`);console.log("[ideawave-cli] waiting for ideawave.app browser sessions…");var A3=!1;for(let Z of["SIGINT","SIGTERM"])process.once(Z,()=>{if(A3)return;A3=!0,u2(),(async()=>{await F1.close(),await M0?.close().catch(()=>{return}),process.exit(0)})()});
|
|
48
|
+
${X}`),Z.destroy()}function jK(Z,Q){return new Promise((X,J)=>{let Y=(z)=>{Z.off("listening",W),J(z)},W=()=>{Z.off("error",Y);let z=Z.address();if(!z||typeof z==="string"){J(Error("Failed to read CLI bridge server address"));return}X(z.port)};Z.once("error",Y),Z.once("listening",W),Z.listen(Q,"127.0.0.1")})}function n3(Z){return new Promise((Q,X)=>{Z.close((J)=>{if(J)X(J);else Q()})})}async function Q7(Z,Q=m6()){let X=new Map,J=new Map,Y=Z.maxMessageSize??oX,W=!1,z=(C)=>{let b=J.get(C);if(b)clearTimeout(b);J.delete(C)},q=(C)=>{J.delete(C);let{activeRunIds:b}=Z.registry.disconnect(C);Z.onDisconnect(C,b)},L=(C,b)=>{let f={type:"cli_status",connected:!0,runtime:Z.runtime,mcpReady:Z.mcpReady(),error:b,capabilities:Z.capabilities??[],cliVersion:Z.cliVersion,browserRuntime:Z.browserRuntimeStatus?.()};if(C){let N=X.get(C);if(N)n0(N,f);return}for(let N of X.values())n0(N,f)},U=(C,b)=>{let f=b.sessionId.trim(),N=b.userId.trim();if(!f||!N){n0(C,{type:"cli_status",connected:!1,runtime:Z.runtime,mcpReady:Z.mcpReady(),error:"Missing frontend session or user id"}),C.close();return}z(f);let R=X.get(f);if(R&&R!==C)R.close();C.data.frontendSessionId=f,X.set(f,C),Z.registry.register({frontendSessionId:f,userId:N,tools:b.tools,send:(D)=>n0(C,D)}),L(f),Z.onToolMetadata?.(f)},x=(C,b)=>{let f=Z.registry.getUserId(C);if(!f)return;switch(b.type){case"bridge_ping":{let N=X.get(C);if(N)n0(N,{type:"bridge_pong"});break}case"tool_metadata":Z.registry.setMetadata(C,b.tools),Z.onToolMetadata?.(C);break;case"tool_result":Z.registry.handleToolResult(C,b);break;case"run_turn":m("bridge.run_received",{runId:b.run.runId,cardId:b.run.cardId,frontendSessionId:C}),Z.registry.markRunActive(C,b.run.runId,b.run.cardId),Z.onRunTurn(C,{...b.run,frontendSessionId:C,userId:f});break;case"cancel_run":if(Z.registry.ownsRun(C,b.runId))Z.onCancelRun(C,b.runId);break;case"runtime_rpc":Z.onRuntimeRpc(C,b);break;case"browser_rpc":Z.onBrowserRpc?.(C,X.get(C)?.data.frontendOrigin??"",b);break;case"warmup_run":Z.onWarmupRun(C,{...b,frontendSessionId:C},f);break;default:break}},G=(C,b)=>{let f=F4(C.headers.origin),N=k6(f),R={Vary:"Origin"};if(N&&f)R["Access-Control-Allow-Origin"]=f,R["Access-Control-Allow-Private-Network"]="true";if(C.method==="OPTIONS"){b.writeHead(204,{...R,"Access-Control-Allow-Methods":"GET, OPTIONS","Access-Control-Allow-Headers":"*","Access-Control-Max-Age":"600"}),b.end();return}if(C.method!=="GET"){b.writeHead(405,R),b.end();return}b.writeHead(200,{...R,"content-type":"application/json","cache-control":"no-store"}),b.end(JSON.stringify({ideawave:!0,runtime:Z.runtime,mcpReady:Z.mcpReady(),capabilities:Z.capabilities??[],cliVersion:Z.cliVersion,browserRuntime:Z.browserRuntimeStatus?.()}))},h=(C,b)=>{let f=F4(C.headers.origin),N=k6(f),R={Vary:"Origin"};if(N&&f)R["Access-Control-Allow-Origin"]=f,R["Access-Control-Allow-Private-Network"]="true";if(C.method==="OPTIONS"){b.writeHead(204,{...R,"Access-Control-Allow-Methods":"POST, OPTIONS","Access-Control-Allow-Headers":"content-type","Access-Control-Max-Age":"600"}),b.end();return}if(!N){b.writeHead(403,R),b.end();return}if(C.method!=="POST"){b.writeHead(405,R),b.end();return}let D={...R,"content-type":"application/json"},y=(M,w)=>{b.writeHead(M,D),b.end(JSON.stringify(w))},g="",T=!1;C.on("data",(M)=>{if(g+=M.toString("utf8"),g.length>ZK)T=!0,C.destroy()}),C.on("end",()=>{if(T){y(400,{ok:!1,error:"Request body too large"});return}let M;try{M=JSON.parse(g)}catch{y(400,{ok:!1,error:"Invalid JSON body"});return}let w=typeof M.url==="string"?M.url:"";if(!s3(w)){y(400,{ok:!1,error:"url must be an http(s) loopback or /static_boards/ page URL"});return}let E=(k,l)=>{let L0=typeof k==="number"?k:Number.NaN;if(!Number.isFinite(L0))return l;return Math.min(4000,Math.max(200,Math.round(L0)))};r3({url:w,width:E(M.width,1440),height:E(M.height,900)}).then((k)=>y(200,{ok:!0,path:k.path,engine:k.engine})).catch((k)=>{let l=k instanceof O1?503:k instanceof B4?429:500;y(l,{ok:!1,...k instanceof O1?{installing:!0}:{},error:k instanceof Error?k.message:String(k)})})})};for(let C of Q){let b=sX((R,D)=>{(async()=>{let y=new URL(R.url??"/","http://127.0.0.1").pathname;if(y===d3){G(R,D);return}if(y===eX){h(R,D);return}if(await Z.onHttpRequest?.(R,D))return;D.writeHead(404,{"content-type":"text/plain"}),D.end("IdeaWave CLI bridge")})().catch((y)=>{if(D.headersSent){D.destroy(y instanceof Error?y:void 0);return}D.writeHead(500,{"content-type":"text/plain"}),D.end("IdeaWave CLI bridge request failed")})}),f=new rX({noServer:!0,maxPayload:Y}),N=(R)=>{if(R.idleTimer)clearTimeout(R.idleTimer);R.idleTimer=setTimeout(()=>{R.close()},nX),R.idleTimer.unref?.()};f.on("connection",(R,D)=>{let y=R;y.data={id:pX(),frontendSessionId:null,frontendOrigin:new URL(F4(D.headers.origin)??e3).origin},y.idleTimer=null,N(y),y.on("ping",()=>N(y)),y.on("pong",()=>N(y)),y.on("error",()=>{if(y.idleTimer)clearTimeout(y.idleTimer);y.close()}),y.on("message",(g)=>{N(y);let T=VK(g);if(Y>0&&T.length>Y)return;let M=h1(T);if(!M)return;let w=y.data.frontendSessionId;if(!w){if(M.type==="bridge_probe")n0(y,{type:"bridge_probe_ack",protocolVersion:M.protocolVersion});else if(M.type==="frontend_hello")U(y,M);return}x(w,M)}),y.on("close",()=>{if(y.idleTimer)clearTimeout(y.idleTimer);let g=y.data.frontendSessionId;if(!g)return;if(X.get(g)!==y)return;if(X.delete(g),z(g),W)return;J.set(g,setTimeout(()=>q(g),tX))})}),b.on("upgrade",(R,D,y)=>{if(new URL(R.url??"/","http://127.0.0.1").pathname!==E6){o3(D,404,"Not Found");return}if(!k6(F4(R.headers.origin))){o3(D,403,"Forbidden");return}f.handleUpgrade(R,D,y,(T)=>{f.emit("connection",T,R)})});try{let R=await jK(b,C);return{url:`ws://127.0.0.1:${R}${E6}`,port:R,sendStatus:L,close:async()=>{W=!0;for(let D of J.values())clearTimeout(D);J.clear();for(let D of f.clients){let y=D;if(y.idleTimer)clearTimeout(y.idleTimer);y.close()}f.close(),await n3(b).catch(()=>{return})}}}catch(R){if(f.close(),await n3(b).catch(()=>{return}),R?.code==="EADDRINUSE")continue;throw R}}throw Error(`No free IdeaWave CLI bridge port found in ${Q[0]}-${Q.at(-1)}`)}import{lstat as RK,readFile as vK}from"node:fs/promises";import yK from"node:os";import b1 from"node:path";import{Server as fK}from"@modelcontextprotocol/sdk/server/index.js";import{CallToolRequestSchema as MK,ListToolsRequestSchema as NK}from"@modelcontextprotocol/sdk/types.js";import{randomUUID as zK}from"node:crypto";import{createServer as qK}from"node:http";import{StreamableHTTPServerTransport as UK}from"@modelcontextprotocol/sdk/server/streamableHttp.js";import{isInitializeRequest as Y7}from"@modelcontextprotocol/sdk/types.js";var X7=new Set(["127.0.0.1","localhost","[::1]","::1"]);function HK(Z){let Q=Z.trim();if(Q.length===0)return null;if(Q.startsWith("[")){let W=Q.indexOf("]");if(W===-1)return null;let z=Q.slice(0,W+1),q=Q.slice(W+1);if(q.length===0)return{host:z,port:null};if(!q.startsWith(":"))return null;let L=Number(q.slice(1));if(!Number.isInteger(L)||L<=0||L>65535)return null;return{host:z,port:L}}let X=Q.lastIndexOf(":");if(X===-1)return{host:Q,port:null};let J=Q.slice(X+1),Y=Number(J);if(!Number.isInteger(Y)||Y<=0||Y>65535)return{host:Q,port:null};return{host:Q.slice(0,X),port:Y}}function K7(Z){return X7.has(Z)||X7.has(Z.toLowerCase())}function J7(Z,Q){let X=Z.headers.host;if(typeof X!=="string")return{ok:!1,status:403,reason:"missing-host"};let J=HK(X);if(!J)return{ok:!1,status:403,reason:"bad-host"};if(!K7(J.host))return{ok:!1,status:403,reason:"non-loopback-host"};if(J.port!==null&&J.port!==Q)return{ok:!1,status:403,reason:"host-port-mismatch"};let Y=Z.headers.origin;if(typeof Y==="string"&&Y.length>0){if(Y!=="null"){let W;try{W=new URL(Y)}catch{return{ok:!1,status:403,reason:"bad-origin"}}if(!K7(W.hostname))return{ok:!1,status:403,reason:"non-loopback-origin"}}}return{ok:!0}}var W7="/mcp",BK=43274,j7=16777216,FK=1800000,LK=300000,V7=200,wK=-32700,h0=-32600,S6=-32603;function V0(Z,Q,X,J,Y){Z.statusCode=Q,Z.setHeader("content-type","application/json"),Z.end(JSON.stringify({jsonrpc:"2.0",error:{code:X,message:J,...Y?{data:Y}:{}},id:null}))}class I6 extends Error{constructor(){super("expected application/json");this.name="BadContentTypeError"}}class T6 extends Error{constructor(){super(`body exceeds ${j7} bytes`);this.name="BodyTooLargeError"}}async function PK(Z){if(Z.method&&Z.method!=="POST")return;let Q=Z.headers["content-type"];if(typeof Q==="string"&&Q.trim().length>0){if(!Q.toLowerCase().includes("application/json"))throw new I6}let X=0,J=[];for await(let W of Z){let z=typeof W==="string"?Buffer.from(W):W;if(X+=z.byteLength,X>j7)throw new T6;J.push(z)}if(J.length===0)return;let Y=Buffer.concat(J).toString("utf8");if(Y.length===0)return;return JSON.parse(Y)}function xK(Z){if(Array.isArray(Z))return Z.some(Y7);return Y7(Z)}function OK(Z){if(typeof Z==="number")return Z;let Q=process.env.IDEAWAVE_MCP_PORT;if(Q&&Q.trim().length>0){let X=Number(Q);if(Number.isInteger(X)&&X>=0&&X<65536)return X}return BK}async function bK(Z,Q){let X=(Y)=>new Promise((W,z)=>{let q=(U)=>{Z.off("listening",L),z(U)},L=()=>{Z.off("error",q),W()};Z.once("error",q),Z.once("listening",L),Z.listen(Y,"127.0.0.1")});try{await X(Q)}catch(Y){if(Y.code!=="EADDRINUSE"||Q===0)throw Y;console.warn(`[mcp] port ${Q} in use, falling back to an OS-assigned port; external CLIs will need to re-paste the install command from Settings → External agents`),await X(0)}let J=Z.address();if(J==null||typeof J==="string")throw Error("[mcp] failed to read bound address");return J.port}function CK(Z,Q){if(Q&&typeof Q==="object"&&!Array.isArray(Q)){let J=Q.params;if(J&&typeof J==="object"&&!Array.isArray(J)){let Y=J.clientInfo;if(Y&&typeof Y==="object"&&!Array.isArray(Y)){let W=Y.name;if(typeof W==="string"&&W.trim().length>0)return W.trim()}}}let X=Z.headers["user-agent"];if(typeof X==="string"&&X.trim().length>0)return X.trim();return null}async function H7(Z){let Q=new Map,X=0;function J(U){let x=Q.get(U);if(x)x.lastActivity=Date.now()}async function Y(U,x){Q.delete(U),await x.transport.close().catch(()=>{return})}async function W(){let U=null,x=1/0;for(let[G,h]of Q)if(h.lastActivity<x)x=h.lastActivity,U=G;if(U!==null){let G=Q.get(U);if(G)console.warn(`[mcp] session cap of ${V7} reached; evicting ${U}`),await Y(U,G)}}let z=setInterval(()=>{let U=Date.now()-FK;for(let[x,G]of Q)if(G.lastActivity<U)console.log(`[mcp] sweeping idle session ${x}`),Y(x,G)},LK);z.unref?.();let q=qK((U,x)=>{(async()=>{let G;try{G=new URL(U.url??"/","http://127.0.0.1").pathname}catch{V0(x,400,h0,"bad-url");return}if(G!==W7){V0(x,404,h0,"not-found");return}let h=U.method??"POST";if(h!=="POST"&&h!=="GET"&&h!=="DELETE"){x.setHeader("Allow","GET, POST, DELETE"),V0(x,405,h0,"method-not-allowed");return}let C=J7(U,X);if(!C.ok){V0(x,C.status,h0,"forbidden",{reason:C.reason});return}let b=U.headers["mcp-session-id"],f=typeof b==="string"?b:void 0;if(h==="GET"||h==="DELETE"){if(!f||!Q.has(f)){V0(x,400,h0,"no-session",{hint:"Open a POST initialize first to receive an Mcp-Session-Id."});return}let D=Q.get(f).transport;J(f);try{await D.handleRequest(U,x)}catch(y){if(console.error("[mcp] transport.handleRequest (GET/DELETE) threw",y),!x.headersSent)V0(x,500,S6,"internal")}return}let N;try{N=await PK(U)}catch(D){if(D instanceof I6){V0(x,415,h0,"expected-application-json");return}if(D instanceof T6){V0(x,413,h0,"body-too-large");return}V0(x,400,wK,"invalid-json");return}let R;if(f&&Q.has(f))R=Q.get(f).transport,J(f);else if(!f&&N!==void 0&&xK(N)){let D=U.headers["x-ideawave-user-id"],y=typeof D==="string"&&D.trim().length>0?D.trim():null,g=U.headers["x-ideawave-frontend-session-id"],T=typeof g==="string"&&g.trim().length>0?g.trim():null,M=U.headers["x-ideawave-tool-surface"],w=typeof M==="string"&&M.trim()==="read"?"read":"full",E=U.headers["x-ideawave-images-supported"],k=typeof E==="string"&&E.trim()==="1",l=U.headers["x-ideawave-card-id"],L0=typeof l==="string"&&l.trim().length>0?l.trim():null,O0=U.headers["x-ideawave-board-id"],S=typeof O0==="string"&&O0.trim().length>0?O0.trim():null,p=U.headers["x-ideawave-run-folder"],c=typeof p==="string"&&p.trim().length>0?p.trim():null,Q0=CK(U,N);if(Q.size>=V7)await W();let r=null,G0=new UK({sessionIdGenerator:()=>zK(),onsessioninitialized:(A0)=>{r=A0,Q.set(A0,{transport:G0,lastActivity:Date.now()})},onsessionclosed:(A0)=>{Q.delete(A0)}});G0.onclose=()=>{if(G0.sessionId)Q.delete(G0.sessionId)};try{await Z.buildServer({userId:y,frontendSessionId:T,boardId:S,toolSurface:w,imagesSupported:k,cardId:L0,runFolder:c,clientHint:Q0}).connect(G0)}catch(A0){if(console.error("[mcp] buildServer/connect failed",A0),r)Q.delete(r);await G0.close().catch(()=>{return}),V0(x,500,S6,"server-init-failed");return}R=G0}else{V0(x,400,h0,"no-session",{hint:"Non-initialize requests must include a valid Mcp-Session-Id header obtained from a prior initialize."});return}try{await R.handleRequest(U,x,N)}catch(D){if(console.error("[mcp] transport.handleRequest threw",D),!x.headersSent)V0(x,500,S6,"internal")}})().catch((G)=>{console.error("[mcp] unhandled request handler error:",G)})});return X=await bK(q,OK(Z.port)),{url:`http://127.0.0.1:${X}${W7}`,port:X,close:async()=>{clearInterval(z);for(let U of Q.values())await U.transport.close().catch(()=>{return});Q.clear(),await new Promise((U)=>q.close(()=>U()))}}}var hK={name:"ideawave-board",version:"1.0.0"},L4="list_run_folder",w4="read_run_folder_file",U7=new Set(["list_boards","get_board","screenshot_board","list_nodes","list_edges","inspect_node","list_context_sources","read_context_card","read_context_file","read_context_image","list_context_folder","get_board_wiki","search_board","get_card_messages","list_agent_cards","inspect_neighbors",L4,w4]),B7=new Set(["inspect_diagram"]),DK=[{name:L4,description:"List visible files and folders under the selected runtime run folder. Hidden/config folders are omitted.",inputSchema:{type:"object",properties:{path:{type:"string",description:"Optional relative path inside the selected run folder. Defaults to the run-folder root."}},additionalProperties:!1}},{name:w4,description:"Read a text file inside the selected runtime run folder. Hidden/config paths and outside-folder paths are denied.",inputSchema:{type:"object",properties:{path:{type:"string",description:"Relative path to a text file inside the selected run folder."}},required:["path"],additionalProperties:!1}}];function A6(Z){return{content:[{type:"text",text:Z}]}}function $K(Z){return A6(JSON.stringify(Z,null,2))}function z7(Z){return{...A6(Z),isError:!0}}async function GK(Z,Q){if(!Q||Z.isError)return Z;let X=Z.content.find((W)=>W.type==="text");if(!X)return Z;let J;try{let W=JSON.parse(X.text);if(typeof W.path!=="string")return Z;J=b1.resolve(W.path)}catch{return Z}let Y=b1.resolve(b1.join(yK.tmpdir(),"ideawave-screenshots"));if(b1.dirname(J)!==Y||!/^board-[a-z0-9-]+\.png$/i.test(b1.basename(J)))return Z;try{if(!(await RK(J)).isFile())return Z;let z=await vK(J);if(z.byteLength<1024||z.byteLength>26214400||!z.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])))return Z;return{...Z,content:[...Z.content,{type:"image",data:z.toString("base64"),mimeType:"image/png"}]}}catch{return Z}}function gK(Z,Q,X="full",J=!1){return Z.getMetadata(Q).filter((Y)=>{let W=c1(Y.name);if(X==="read"&&!U7.has(W))return!1;if(!J&&B7.has(W))return!1;return!0}).map((Y)=>({name:Y.name,description:Y.description,inputSchema:Y.inputSchema}))}function EK(Z,Q,X={}){let J=gK(Z,Q,X.toolSurface??"full",X.imagesSupported??!1);return X.includeRunFolderTools?[...J,...DK]:J}function q7(Z,Q){if(!Z||typeof Z!=="object"||Array.isArray(Z))return null;let X=Z[Q];return typeof X==="string"?X:null}async function mK(Z,Q,X){if(X&&X.trim().length>0)return X.trim();if(!Z||!Q)throw Error("Run-folder tools require an active IdeaWave board and card.");return(await R0({boardId:Z,cardId:Q})).runFolder}async function kK(Z){let Q=await mK(Z.boardId,Z.cardId,Z.runFolder);if(Z.name===L4){let X=q7(Z.args,"path")??"",J=await I2(Q,X);return $K(J)}if(Z.name===w4){let X=q7(Z.args,"path");if(!X)return z7("read_run_folder_file requires a path.");return A6(await u1(Q,X))}return z7(`Unknown local tool "${Z.name}"`)}function _K(Z,Q,X,J,Y,W="full",z=!1){let q=new fK(hK,{capabilities:{tools:{}}}),L=async()=>{if(z)return!0;if(J8(J))return!0;if(X&&J)try{return(await R0({boardId:X,cardId:J})).adapter.supportsImages===!0}catch{return!1}return!1};return q.setRequestHandler(NK,async()=>({tools:EK(Z,Q,{includeRunFolderTools:Boolean(Y||X&&J),toolSurface:W,imagesSupported:await L()})})),q.setRequestHandler(MK,async(U)=>{let{name:x,arguments:G}=U.params,h=c1(x),C=Date.now();m("mcp.tool_call_received",{frontendSessionId:Q,cardId:J,toolName:h});try{if(h===L4||h===w4)return await kK({name:h,args:G,boardId:X,cardId:J,runFolder:Y});if(W==="read"&&!U7.has(h))throw Error(`Tool "${x}" is not available in read-only mode`);if(B7.has(h)&&!await L())throw Error(`Tool "${x}" requires a runtime that supports image input`);let b=await Z.callTool(Q,h,G??{},void 0,J??void 0);if(m("mcp.tool_result_returned",{frontendSessionId:Q,cardId:J,toolName:h,elapsedMs:Date.now()-C}),b&&typeof b==="object"&&Array.isArray(b.content)){let f=b;return h==="screenshot_board"?await GK(f,await L()):f}return{content:[{type:"text",text:typeof b==="string"?b:JSON.stringify(b)}]}}catch(b){return m("mcp.tool_result_returned",{frontendSessionId:Q,cardId:J,toolName:h,elapsedMs:Date.now()-C,hasError:!0}),{content:[{type:"text",text:b instanceof Error?b.message:"Tool call failed"}],isError:!0}}}),q}function F7(Z,Q){return H7({buildServer:(X)=>_K(Z,X.frontendSessionId,X.boardId,X.cardId,X.runFolder,X.toolSurface,X.imagesSupported),port:Q})}import P4 from"node:fs/promises";import u6 from"node:os";import x4 from"node:path";function L7(){return`cfg_${crypto.randomUUID().replace(/-/g,"").slice(0,16)}`}async function SK(){let[Z,Q]=await Promise.all([J0(),E2()]),X=Z.globalDefaultConfigId?Z.runtimes.find((J)=>J.id===Z.globalDefaultConfigId)??null:null;return{runtimes:Z.runtimes,globalDefaultConfigId:Z.globalDefaultConfigId,globalDefaultEffective:X?{runFolder:X.runFolder??u6.homedir(),modelId:X.defaultModelId??null,configValues:X.defaultConfigValues??{}}:null,knownAdapters:l0().map((J)=>({id:J.id,displayName:J.displayName})),readiness:Q}}async function IK(Z){try{let Q=await R0({boardId:Z.boardId,cardId:Z.cardId});return{resolved:{configId:Q.entry.id,adapterId:Q.entry.kind==="registered"?Q.entry.adapterId:null,displayName:Q.entry.displayName,runFolder:Q.runFolder,modelId:Q.modelId,configValues:Q.configValues}}}catch(Q){if(Q instanceof g0)return{resolved:null};throw Q}}async function TK(Z){return j0((Q)=>{let X=Q.runtimes.find((W)=>W.kind==="registered"&&W.adapterId===Z.adapterId);if(X)return X;let J=l0().find((W)=>W.id===Z.adapterId);if(!J)throw Error(`Unknown adapterId: ${Z.adapterId}`);let Y={id:L7(),kind:"registered",adapterId:Z.adapterId,displayName:J.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null};return Q.runtimes.push(Y),Y})}async function AK(Z){return j0((Q)=>{let X={id:L7(),kind:"custom",displayName:Z.displayName,command:Z.command,args:Z.args,env:Z.env,runFolder:Z.runFolder,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null};return Q.runtimes.push(X),X})}async function uK(Z){await j0((Q)=>{if(Q.runtimes=Q.runtimes.filter((X)=>X.id!==Z.runtimeConfigId),Q.globalDefaultConfigId===Z.runtimeConfigId)Q.globalDefaultConfigId=null;for(let X of Object.keys(Q.boardOverrides))if(Q.boardOverrides[X].runtimeConfigId===Z.runtimeConfigId)delete Q.boardOverrides[X];for(let X of Object.keys(Q.cardOverrides))if(Q.cardOverrides[X].runtimeConfigId===Z.runtimeConfigId)delete Q.cardOverrides[X]})}async function cK(Z){await j0((Q)=>{let X=Q.runtimes.find((J)=>J.id===Z.runtimeConfigId);if(!X)throw Error(`Runtime config not found: ${Z.runtimeConfigId}`);if(Q.globalDefaultConfigId=Z.runtimeConfigId,Z.runFolder!==void 0)X.runFolder=Z.runFolder;if(Z.modelId!==void 0)X.defaultModelId=Z.modelId;if(Z.configValues!==void 0)X.defaultConfigValues=Z.configValues})}async function lK(Z){Z.boardId,await j0((Q)=>{if(Z.runtimeConfigId===null){delete Q.cardOverrides[Z.cardId];return}if(!Q.runtimes.some((Y)=>Y.id===Z.runtimeConfigId))throw Error(`Runtime config not found: ${Z.runtimeConfigId}`);let J=Q.cardOverrides[Z.cardId];Q.cardOverrides[Z.cardId]={runtimeConfigId:Z.runtimeConfigId,runFolder:Z.runFolder!==void 0?Z.runFolder:J?.runFolder??null,modelId:Z.modelId!==void 0?Z.modelId:J?.modelId??null,configValues:Z.configValues!==void 0?Z.configValues:J?.configValues??{}}})}async function dK(Z){let X=(await J0()).runtimes.find((z)=>z.id===Z.runtimeConfigId);if(!X)throw Error(`Runtime config not found: ${Z.runtimeConfigId}`);let J=B0(X),Y=await J.resolveSpawnConfig(X),W=X.runFolder??u6.homedir();try{let z=await Z8({spawn:{...Y,cwd:W},modelId:Z.modelId??X.defaultModelId??null,configValues:Z.configValues??X.defaultConfigValues??{}}),q=T1({adapterId:J.id,models:z.models,currentModelId:z.currentModelId}),L=new Date().toISOString();return await j0((U)=>{let x=U.runtimes.find((G)=>G.id===Z.runtimeConfigId);if(x)x.discoveredModels=q,x.discoveredConfigOptions=z.configOptions,x.discoveredAt=L}),{ok:!0,models:q,configOptions:z.configOptions,currentModelId:z.currentModelId}}catch(z){if(z instanceof u0)throw Error(`${z.message}${J.authHint?` ${J.authHint}`:""}`);if(z instanceof I||z instanceof U0)throw Error(z.message);throw z}}async function iK(Z){let Q=u6.homedir(),X=Z.path?.trim()?Z.path.trim():Q,J=x4.resolve(X),Y=!0;try{if(!(await P4.stat(J)).isDirectory())J=x4.dirname(J)}catch{Y=!1,J=Q}let W=[];try{W=(await P4.readdir(J,{withFileTypes:!0})).filter((L)=>L.isDirectory()&&!L.name.startsWith(".")).map((L)=>({name:L.name,path:x4.join(J,L.name)})).sort((L,U)=>L.name.localeCompare(U.name))}catch{W=[]}let z=x4.dirname(J);return{path:J,parent:z===J?null:z,home:Q,exists:Y,entries:W}}var w7={list:SK,getEffectiveForCard:IK,registerRegistered:TK,registerCustom:AK,unregister:uK,setUserDefault:cK,setCardOverride:lK,refreshModels:dK,browseFolder:iK};var aK=[{id:"claude-code",displayName:"Claude Code"},{id:"codex",displayName:"Codex"},{id:"copilot",displayName:"Copilot"},{id:"opencode",displayName:"OpenCode"}];function pK(){return`cfg_${crypto.randomUUID().replace(/-/g,"").slice(0,16)}`}async function P7(){try{let Z=await J0();if(Z.globalDefaultConfigId){if(Z.runtimes.some((X)=>X.id===Z.globalDefaultConfigId))return Z.globalDefaultConfigId}for(let Q of aK){if((await m2(Q.id))?.status!=="ready")continue;let J=null;if(await j0((Y)=>{if(Y.globalDefaultConfigId){if(Y.runtimes.some((q)=>q.id===Y.globalDefaultConfigId)){J=Y.globalDefaultConfigId;return}}let W=Y.runtimes.find((z)=>z.kind==="registered"&&z.adapterId===Q.id);if(!W){let z={id:pK(),kind:"registered",adapterId:Q.id,displayName:Q.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null};Y.runtimes.push(z),W=z}Y.globalDefaultConfigId=W.id,J=W.id}),J)return console.log(`[ideawave-cli] using agent runtime: ${Q.displayName}`),J}return console.warn("[ideawave-cli] no agent runtime detected on PATH (tried claude, codex, gh copilot, opencode). Install one to run agents."),null}catch(Z){return console.warn("[ideawave-cli] runtime auto-seed failed",Z),null}}var sK=120000;function rK(){if(typeof crypto<"u"&&"randomUUID"in crypto)return`call_${crypto.randomUUID()}`;return`call_${Date.now()}_${Math.random().toString(16).slice(2)}`}class c6{sessions=new Map;createCallId;toolCallTimeoutMs;constructor(Z={}){this.createCallId=Z.createCallId??rK,this.toolCallTimeoutMs=Z.toolCallTimeoutMs??sK}register(Z){let Q=this.sessions.get(Z.frontendSessionId);if(Q){if(Q.userId!==Z.userId)this.rejectPending(Q,"frontend session user changed"),Q.activeRunIds.clear();this.sessions.set(Z.frontendSessionId,{frontendSessionId:Z.frontendSessionId,userId:Z.userId,tools:Z.tools,send:Z.send,pendingToolCalls:Q.pendingToolCalls,activeRunIds:Q.activeRunIds,activeRunCardIds:Q.activeRunCardIds});return}this.sessions.set(Z.frontendSessionId,{frontendSessionId:Z.frontendSessionId,userId:Z.userId,tools:Z.tools,send:Z.send,pendingToolCalls:new Map,activeRunIds:new Set,activeRunCardIds:new Map})}disconnect(Z,Q="frontend session disconnected"){let X=this.sessions.get(Z);if(!X)return{activeRunIds:[]};return this.sessions.delete(Z),this.rejectPending(X,Q),{activeRunIds:Array.from(X.activeRunIds)}}sessionCount(){return this.sessions.size}has(Z){return this.sessions.has(Z)}getUserId(Z){return this.sessions.get(Z)?.userId??null}setMetadata(Z,Q){let X=this.sessions.get(Z);if(X)X.tools=Q}getMetadata(Z){if(!Z)return[];return this.sessions.get(Z)?.tools??[]}sendToSession(Z,Q){let X=this.sessions.get(Z);if(!X)return!1;return X.send(Q),!0}callTool(Z,Q,X,J,Y){if(!Z)return Promise.reject(Error("MCP tool call is missing a frontend session id"));let W=this.sessions.get(Z);if(!W)return Promise.reject(Error(`Frontend session ${Z} is not connected`));let z=this.createCallId();return new Promise((q,L)=>{let U=J??(Y?this.getActiveRunIdForCard(W,Y):this.getSoleActiveRunId(W)),x=Y??(U?W.activeRunCardIds.get(U):void 0),G=Date.now(),h=setTimeout(()=>{W.pendingToolCalls.delete(z),m("tool_queue.timeout",{frontendSessionId:Z,runId:U,cardId:x,callId:z,toolName:Q,elapsedMs:Date.now()-G,queueDepth:W.pendingToolCalls.size}),L(Error(`Tool "${Q}" timed out waiting for the frontend`))},this.toolCallTimeoutMs);W.pendingToolCalls.set(z,{resolve:q,reject:L,timer:h,name:Q,runId:U??null,cardId:x??null,startedAt:G}),m("tool_queue.forwarded_to_browser",{frontendSessionId:Z,runId:U,cardId:x,callId:z,toolName:Q,queueDepth:W.pendingToolCalls.size}),W.send({type:"tool_call",callId:z,name:Q,args:X,...U?{runId:U}:{},...x?{cardId:x}:{}})})}handleToolResult(Z,Q){let X=this.sessions.get(Z);if(!X)return;let J=X.pendingToolCalls.get(Q.callId);if(!J)return;if(X.pendingToolCalls.delete(Q.callId),clearTimeout(J.timer),m("tool_queue.result_received",{frontendSessionId:Z,runId:J.runId,cardId:J.cardId,callId:Q.callId,toolName:J.name,elapsedMs:Date.now()-J.startedAt,queueDepth:X.pendingToolCalls.size,ok:Q.ok}),Q.ok){J.resolve(Q.result);return}let Y=Q.result;if(Y&&typeof Y==="object"&&Array.isArray(Y.content)){J.resolve({...Y,isError:!0});return}J.reject(Error(Q.error??"Tool execution failed"))}markRunActive(Z,Q,X){let J=this.sessions.get(Z);if(!J)return;if(J.activeRunIds.add(Q),X)J.activeRunCardIds.set(Q,X)}markRunSettled(Z,Q){let X=this.sessions.get(Z);if(!X)return;X.activeRunIds.delete(Q),X.activeRunCardIds.delete(Q)}ownsRun(Z,Q){return this.sessions.get(Z)?.activeRunIds.has(Q)??!1}rejectPending(Z,Q){for(let X of Z.pendingToolCalls.values())clearTimeout(X.timer),m("tool_queue.rejected",{frontendSessionId:Z.frontendSessionId,runId:X.runId,cardId:X.cardId,toolName:X.name,elapsedMs:Date.now()-X.startedAt}),X.reject(Error(Q));Z.pendingToolCalls.clear()}getSoleActiveRunId(Z){return Z.activeRunIds.size===1?Z.activeRunIds.values().next().value:void 0}getActiveRunIdForCard(Z,Q){let X=[...Z.activeRunCardIds.entries()].filter(([J,Y])=>Z.activeRunIds.has(J)&&Y===Q).map(([J])=>J);return X.length===1?X[0]:void 0}}function O7(){return"0.0.64".trim()?"0.0.64":"dev"}var oK=process.argv.slice(2),b7=[];for(let Z of oK){if(Z==="--dev"){process.env[_6]="1";continue}b7.push(Z)}var D0=b7[0];if(D0==="--help"||D0==="-h"||D0==="help")console.log("ideawave — host the local bridge for a running ideawave.app session."),console.log(""),console.log("Usage:"),console.log(" ideawave Serve the browser bridge and MCP forwarder."),console.log(" ideawave --version Print the CLI version."),process.exit(0);if(D0==="--version"||D0==="-v"||D0==="version")console.log(O7()),process.exit(0);if(D0)console.error(`Unknown command: ${D0}`),console.error("Run `ideawave --help` for usage."),process.exit(1);var R1=new c6,$0=null,C7={phase:"idle"},v1=new f6(new J1((Z)=>{C7=Z,$0?.sendStatus()}));function T0(Z,Q){R1.sendToSession(Z,Q)}async function nK(Z,Q){try{let X=w7[Q.method],J=await X(Q.params);T0(Z,{type:"runtime_rpc_result",requestId:Q.requestId,ok:!0,result:J})}catch(X){T0(Z,{type:"runtime_rpc_result",requestId:Q.requestId,ok:!1,error:X instanceof Error?X.message:String(X)})}}var y1=!1,C1=null;async function l6(){if(y1)return;if(C1)return C1;return C1=(async()=>{try{let Z=await F7(R1);o6({...Z,requestedPort:Z.port}),console.log(`[ideawave-cli] MCP endpoint for the agent: ${Z.url}`);try{await F2({onStatusChange:(Q)=>{if(k2(),$0?.sendStatus(),Q.status==="failed")console.warn(`[ideawave-cli] ACP bridge setup failed for ${Q.packageName}: ${Q.error??"unknown error"}`)}})}catch(Q){console.warn("[ideawave-cli] ACP bridge setup skipped:",Q instanceof Error?Q.message:String(Q))}await P7(),y1=!0,console.log("[ideawave-cli] ready — agent runs will drive the board."),$0?.sendStatus()}catch(Z){console.error("[ideawave-cli] failed to start agent host:",Z),$0?.sendStatus(void 0,Z instanceof Error?Z.message:String(Z))}finally{C1=null}})(),C1}if(process.env.APP_ENV!=="development"){let Z=await Z7();if(Z)console.error(`[ideawave-cli] An IdeaWave CLI is already running at ${Z}.`),console.error("[ideawave-cli] Only one CLI per machine is supported — it already serves every browser tab. Exiting."),process.exit(0)}A3().then((Z)=>{if(Z.phase==="ready")console.log("[ideawave-cli] screenshot engine ready");else if(Z.phase==="failed")console.warn(`[ideawave-cli] screenshot engine setup failed: ${Z.error??"unknown error"}`)});$0=await Q7({registry:R1,runtime:null,mcpReady:()=>y1,capabilities:["browser-proxy-v1",n6,t6],cliVersion:O7(),browserRuntimeStatus:()=>C7,onToolMetadata:(Z)=>{console.log(`[ideawave-cli] session ${Z} advertised ${R1.getMetadata(Z).length} tools`),l6()},onRunTurn:(Z,Q)=>{console.log(`[ideawave-cli] running agent turn for card ${Q.cardId} (session ${Z})`),(async()=>{if(await l6(),!y1){T0(Z,{type:"run_settled",runId:Q.runId,cardId:Q.cardId,result:{assistantContent:"",model:null,latencyMs:0,errorText:"IdeaWave CLI agent host is not ready",partialText:null}});return}await j8(Q,(X)=>T0(Z,X))})().catch(()=>{return}).finally(()=>R1.markRunSettled(Z,Q.runId))},onCancelRun:(Z,Q)=>{Z6(Q)},onRuntimeRpc:(Z,Q)=>{nK(Z,Q)},onBrowserRpc:(Z,Q,X)=>{v1.handleRpc(Z,Q,X).then((J)=>{T0(Z,{type:"browser_rpc_result",requestId:X.requestId,ok:!0,result:J})},(J)=>{T0(Z,{type:"browser_rpc_result",requestId:X.requestId,ok:!1,error:J instanceof Error?J.message:String(J)})})},onHttpRequest:(Z,Q)=>v1.handleHttpRequest(Z,Q),onWarmupRun:(Z,Q,X)=>{(async()=>{if(await l6(),!y1)return{status:"retryable",error:"agent host is not ready"};return H8({cardId:Q.cardId,boardId:Q.boardId,userId:X,frontendSessionId:Z})})().then((J)=>{if(!Q.warmupId)return;T0(Z,{type:"warmup_result",warmupId:Q.warmupId,cardId:Q.cardId,...J})})},onDisconnect:(Z,Q)=>{v1.closeFrontendSession(Z),Y8(Z);for(let X of Q)Z6(X);m("bridge.frontend_disconnected",{frontendSessionId:Z,activeRuns:Q.length}),a6(Z).catch((X)=>{console.warn(`[ideawave-cli] failed to evict sessions for ${Z}:`,X instanceof Error?X.message:String(X))}),console.log(`[ideawave-cli] browser session ${Z} disconnected`)}});v1.setPort($0.port);console.log(`[ideawave-cli] browser bridge listening on ${$0.url}`);console.log("[ideawave-cli] waiting for ideawave.app browser sessions…");var x7=!1;for(let Z of["SIGINT","SIGTERM"])process.once(Z,()=>{if(x7)return;x7=!0,W8(),(async()=>{await v1.close(),await l3(),await $0?.close().catch(()=>{return}),process.exit(0)})()});
|