@wcstack/devtools 3.3.0 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auto.min.js +1 -1
- package/dist/auto.min.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.esm.js +16 -0
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/protocol/types.ts","../src/protocol/registry.ts","../src/core/formatValue.ts","../src/core/DevtoolsCore.ts","../src/core/declaredScan.ts","../src/shell/WcsDevtools.ts","../src/bootstrapDevtools.ts"],"sourcesContent":["/**\n * protocol/types.ts\n *\n * DevTools Hook Protocol (docs/devtools-hook-protocol.md) の devtools 側型定義。\n *\n * ランタイム(@wcstack/state)側の内部型は import しない — プロトコルは\n * 「文書化された構造」への構造的型付けで両側が独立に実装する(protocol §2)。\n * そのためランタイム内部オブジェクトは *Like インターフェースとして、\n * devtools が実際に触るプロパティだけを宣言する。\n */\n\n/** グローバル registry のプロパティ名 */\nexport const DEVTOOLS_HOOK_GLOBAL = \"__WCSTACK_DEVTOOLS_HOOK__\";\n\n/** プロトコル版。additive change では上げない(protocol §2) */\nexport const DEVTOOLS_PROTOCOL_VERSION = 2;\n\nexport interface IPathInfoLike {\n readonly path: string;\n}\n\nexport interface IAbsolutePathInfoLike {\n readonly stateElement: unknown;\n readonly pathInfo: IPathInfoLike;\n}\n\nexport interface IListIndexLike {\n readonly index: number;\n readonly indexes: number[];\n}\n\nexport interface IAbsoluteAddressLike {\n readonly absolutePathInfo: IAbsolutePathInfoLike;\n readonly listIndex: IListIndexLike | null;\n}\n\nexport interface IBindingLike {\n readonly propName: string;\n readonly statePathName: string;\n readonly bindingType: string;\n readonly node: Node;\n readonly replaceNode: Node;\n}\n\nexport interface IStateElementSummaryLike {\n readonly rootNode: Node;\n readonly element: unknown;\n readonly paths: {\n readonly list: ReadonlySet<string>;\n readonly element: ReadonlySet<string>;\n readonly getter: ReadonlySet<string>;\n readonly setter: ReadonlySet<string>;\n };\n readonly commandTokenNames: ReadonlySet<string>;\n readonly eventTokenNames: ReadonlySet<string>;\n readonly staticDependency: ReadonlyMap<string, readonly string[]>;\n readonly dynamicDependency: ReadonlyMap<string, readonly string[]>;\n /**\n * `$watch` の宣言パス集合(protocol v1 追補・配線カバレッジの宣言面)。\n * 旧ランタイムにはフィールド自体が無いため optional。宣言なしは null。\n */\n readonly watchPaths?: ReadonlySet<string> | null;\n /**\n * `$listKeys` で宣言されたリストパス集合(protocol v1 追補)。ワイルドカード行\n * watch に**リスト書き込み**が届く前提は「for バインド(paths.list)or\n * $listKeys 宣言」なので、前提判定の正確化に paths.list と対で使う\n *(明示 index 書き込みは前提に依らず発火し得る)。旧ランタイムにはフィールド自体が\n * 無いため optional(undefined = $listKeys 側が観測不能)。宣言なしは null。\n */\n readonly keyedListPaths?: ReadonlySet<string> | null;\n}\n\n/**\n * マウント記録 1 件の要約(overlays の要素 — protocol v2・D20 の可視化)。\n * マウントの私有キー・getter はオーバーレイ専用アドレス空間(マーカー `#m<id>`)に\n * 住み、状態ツリーの keys/read には現れないため、これが唯一の可視面になる。\n */\nexport interface IMountOverlaySummaryLike {\n /** D20 の予約セグメント(`#m<id>`) */\n readonly marker: string;\n /** マウントされたコンポーネントのタグ名(小文字) */\n readonly componentTag: string;\n readonly stateProp: string;\n /** マウント表: 内側接頭辞(空 = ルートエントリ)→ 外側パス */\n readonly mountTable: readonly { readonly inner: string; readonly outer: string }[];\n /** `$n` 補正の Δ(ルート接頭辞のワイルドカード数) */\n readonly delta: number;\n /** 私有キー(オーバーレイ空間に住む own data key) */\n readonly privateKeys: readonly string[];\n /**\n * 公開 getter の公開パス(親スコープから読める — docs/state-overlay-export-design.md)。\n * オーバーレイ export より前の v2 ランタイムにはフィールド自体が無いため optional\n * (protocol §3 の `summary.exports ?? []`)。\n */\n readonly exports?: readonly string[];\n /** マーカーパスに載る getter のキー */\n readonly getterKeys: readonly string[];\n}\n\n/**\n * 鍵付き購読(`$eq` / `$eqPath` / `$eqIndex`)の path 1 つ分の要約(keyedSubscriptions の要素 —\n * protocol v2 追補・要件 D17)。取り出した時点の数え。\n */\nexport interface IKeyedSubscriptionSummaryLike {\n /** `$eq` 系の第 1 引数(選択を持つパス) */\n readonly path: string;\n /** path が getter 由来で鍵付きで購読できず、追跡付きの読みに落ちた(変わるたびに読む getter が全部再評価される) */\n readonly tracked: boolean;\n /** 行ごとの購読の数 */\n readonly rows: number;\n /** 行ごとの購読が使っている鍵の数 */\n readonly keys: number;\n /** `$eqIndex` の最内段のリスト単位の監視の数 */\n readonly lists: number;\n /** path の最後に見た値(見ていなければ undefined)。生値 */\n readonly lastValue: unknown;\n}\n\n/**\n * 宣言されたフィルタ 1 件(ランタイム `IFilterInfo` の構造的サブセット)。\n * `literals`(引数の型付きの値・要件 B9)は原文 `args` と別物で、フィルタの鍵\n * (`filterKey.ts` の `filter.literals ?? filter.args`)と `eq` / `ne` / `defaults` の\n * 比較が読む。宣言が無いと、独自 source を TS で書く採用者が `{ filterName, args }`\n * だけのオブジェクトを渡し、型は通るのに鍵が縮退する(`\"1\"` と `1` が同じ鍵になる)。\n */\nexport interface IDeclaredFilterLike {\n readonly filterName: string;\n readonly args: readonly string[];\n readonly literals?: readonly unknown[];\n}\n\n/**\n * 宣言レベルのバインディング 1 件(getDeclaredBindings の要素・protocol v1 追補)。\n * ランタイム正本パーサの結果が構造的に流れる。宣言タプルで dedupe 済みの\n * 「宣言の集合」であり、レンダリング行数に比例したインスタンス列ではない。\n */\nexport interface IDeclaredBindingLike {\n /** 代表ノード(fragment 由来 = 構造テンプレート内部は null)。 */\n readonly node: Node | null;\n readonly propName: string;\n readonly statePathName: string;\n readonly bindingType: string;\n readonly inFilters: readonly IDeclaredFilterLike[];\n readonly outFilters: readonly IDeclaredFilterLike[];\n readonly origin: \"attribute\" | \"comment\" | \"fragment\";\n readonly raw: string;\n}\n\nexport type DevtoolsEventLike =\n | {\n readonly type: \"state:element-registered\";\n readonly rootNode: Node;\n readonly element: unknown;\n }\n | {\n readonly type: \"state:element-unregistered\";\n readonly rootNode: Node;\n readonly element: unknown;\n }\n | {\n readonly type: \"state:write\";\n readonly absoluteAddress: IAbsoluteAddressLike;\n readonly value: unknown;\n readonly oldValue: unknown;\n readonly hasOldValue: boolean;\n }\n | {\n readonly type: \"state:update-batch\";\n readonly addresses: ReadonlySet<IAbsoluteAddressLike>;\n }\n | {\n readonly type: \"state:binding-added\";\n readonly absoluteAddress: IAbsoluteAddressLike;\n readonly binding: IBindingLike;\n }\n | {\n readonly type: \"state:binding-removed\";\n readonly absoluteAddress: IAbsoluteAddressLike;\n readonly binding: IBindingLike;\n }\n | {\n readonly type: \"state:binding-cleared\";\n readonly absoluteAddress: IAbsoluteAddressLike;\n }\n | {\n readonly type: \"state:token-emit\";\n readonly kind: \"command\" | \"event\";\n readonly tokenName: string;\n readonly args: readonly unknown[];\n readonly subscriberCount: number;\n /**\n * 発火元ツリーの state 要素(protocol v2 追補 2026-09-05・additive)。\n * 旧ランタイム・registry 非経由の token の payload には無い(optional)—\n * 無い emit の実測はツリー別に分けられないため、全ツリーの照会へ合算で残す。\n */\n readonly stateElement?: unknown;\n }\n | {\n // `$watch` の実行中の throw。watch は例外を自分で閉じる(drain と他機能を\n // 巻き添えにしないため)ので、これが無いと失敗が devtools から見えない。\n readonly type: \"state:watch-error\";\n // `$scan`(state の scan/scanReport.ts。path は \"$scan.<output>\")は \"evaluate\"(source /\n // 出力の読み)・\"fold\"(fold の throw・Promise の戻り値・接ぎ木で getter になった from)・\n // \"write\"(出力の書き込み)を使う。\n readonly phase: \"prime\" | \"evaluate\" | \"handler\" | \"fold\" | \"write\";\n readonly path: string;\n readonly error: unknown;\n }\n | {\n // watch 起点の書き込み連鎖が深さ上限で打ち切られた。\n readonly type: \"state:watch-chain-limit\";\n readonly maxDepth: number;\n readonly paths: readonly string[];\n }\n | {\n // `$watch` ハンドラの正常発火(protocol v1 追補・配線カバレッジの実測面)。\n // 値は載せない — 「宣言したのに一度も発火しない」の検出には発火の事実で足りる。\n readonly type: \"state:watch-fired\";\n readonly path: string;\n /**\n * 発火元ツリーの state 要素(protocol v2 追補 2026-09-05・additive)。\n * 複数ツリーが同名 watch パスを宣言するページで実測台帳をツリー別に分ける。\n * 旧ランタイムの payload には無い(optional)— 無い発火は全ツリーの照会へ\n * 合算で残す。\n */\n readonly stateElement?: unknown;\n }\n | {\n // バインド / `$watch` の対象パスが state 上で解決しないと確定した。\n // ランタイムは console.warn で続行するので、これが無いと「配線したのに\n // 黙って死んでいる」が devtools から見えない。\n readonly type: \"state:path-unresolved\";\n readonly source: \"binding\" | \"watch\" | \"scan\";\n readonly path: string;\n readonly missingSegment: string;\n }\n | {\n // binding 適用の throw。バッチの残りを守るためランタイムが隔離するので、\n // watch-error と同じくこれが無いと失敗がどこにも現れない。\n readonly type: \"state:binding-apply-error\";\n readonly path: string;\n readonly bindingType: string;\n readonly error: unknown;\n }\n | {\n // two-way エコーの辺単位抑止(enablePropagationContext 時のみ流れる)。\n readonly type: \"propagation:suppressed\";\n readonly reason: \"confirmation\" | \"visited-edge\";\n readonly transactionId: number;\n readonly edgeId: number;\n readonly node: Node;\n readonly member: string;\n }\n | {\n readonly type: \"propagation:coalesced\";\n readonly absoluteAddress: IAbsoluteAddressLike;\n readonly droppedTransactionId: number;\n readonly winnerTransactionId: number;\n }\n | {\n readonly type: \"propagation:hop-limit\";\n readonly absoluteAddress: IAbsoluteAddressLike;\n readonly transactionId: number;\n readonly hop: number;\n }\n | {\n // sidecar manifest から 1 コンポーネント契約を読んだ(opt-in contract analyzer)。\n readonly type: \"contract:manifest-read\";\n readonly tag: string;\n readonly loaded: boolean;\n }\n | {\n readonly type: \"contract:unsupported-extension\";\n readonly namespace: string;\n }\n | {\n // sidecar と live wcBindable 宣言の drift。live 宣言が正本。\n readonly type: \"contract:drift\";\n readonly reason: \"component-not-loaded\" | \"missing-member\" | \"event-mismatch\";\n readonly tag: string;\n readonly member?: string;\n readonly sidecarEvent?: string;\n readonly liveEvent?: string;\n };\n\nexport type DevtoolsSinkLike = (event: DevtoolsEventLike) => void;\n\nexport interface IDevtoolsSourceLike {\n readonly id: string;\n readonly kind: string;\n readonly packageVersion: string;\n getStateElements(): IStateElementSummaryLike[];\n /** protocol v1 追補 API。古いランタイムには無い可能性があるため optional 扱いで呼ぶ */\n keys?(rootNode: Node): string[];\n /**\n * protocol v2 API(optional 扱いで呼ぶ)。rootNode のツリーに載っている\n * マウント記録の列挙(D20 の可視化)。マウントが無ければ空配列。\n * v2 より前のランタイムには無いため、無ければ UI はセクションごと出さない。\n */\n overlays?(rootNode: Node): IMountOverlaySummaryLike[];\n /**\n * protocol v2 追補 API(optional 扱いで呼ぶ・要件 D17)。rootNode のツリーの鍵付き購読の\n * path ごとの要約。`$eq` 系が一度も評価されていなければ空配列。3.0 より前の state には無いため、\n * 無ければ UI はセクションごと出さない。\n */\n keyedSubscriptions?(rootNode: Node): IKeyedSubscriptionSummaryLike[];\n read(rootNode: Node, path: string, indexes?: number[]): unknown;\n write(rootNode: Node, path: string, value: unknown, indexes?: number[]): void;\n /**\n * protocol v1 追補 API(optional 扱いで呼ぶ)。ランタイム正本パーサによる\n * 宣言レベルバインディングの集合(declaredScan の簡易パーサを置き換える正本)。\n */\n getDeclaredBindings?(rootNode: Node): IDeclaredBindingLike[];\n _setSink(sink: DevtoolsSinkLike | null): void;\n}\n\nexport interface IDevtoolsListenerLike {\n onSourceRegistered?(source: IDevtoolsSourceLike): void;\n onSourceUnregistered?(sourceId: string): void;\n onEvent?(sourceId: string, event: DevtoolsEventLike): void;\n}\n\nexport interface IDevtoolsHookRegistryLike {\n readonly version: number;\n readonly sources: Map<string, IDevtoolsSourceLike>;\n register(source: IDevtoolsSourceLike): void;\n unregister(sourceId: string): void;\n addListener(listener: IDevtoolsListenerLike): () => void;\n}\n","/**\n * protocol/registry.ts\n *\n * registry 最小実装の devtools 側コピー(protocol §2)。\n * ロード順非依存にするため、ランタイム側(@wcstack/state の bridge)と\n * devtools 側の両方が同一仕様の最小実装を持ち、先にロードされた方が\n * globalThis に置く(先勝ち・振る舞い差し替えなし)。\n */\n\nimport {\n DEVTOOLS_HOOK_GLOBAL,\n DEVTOOLS_PROTOCOL_VERSION,\n IDevtoolsHookRegistryLike,\n IDevtoolsListenerLike,\n IDevtoolsSourceLike,\n} from \"./types\";\n\nfunction createMinimalRegistry(): IDevtoolsHookRegistryLike {\n const sources = new Map<string, IDevtoolsSourceLike>();\n const listeners = new Set<IDevtoolsListenerLike>();\n const applySink = (source: IDevtoolsSourceLike): void => {\n if (listeners.size === 0) {\n source._setSink(null);\n return;\n }\n const sourceId = source.id;\n source._setSink((event) => {\n for (const listener of listeners) {\n listener.onEvent?.(sourceId, event);\n }\n });\n };\n return {\n version: DEVTOOLS_PROTOCOL_VERSION,\n sources,\n register(source: IDevtoolsSourceLike): void {\n if (sources.has(source.id)) {\n return;\n }\n sources.set(source.id, source);\n applySink(source);\n for (const listener of listeners) {\n listener.onSourceRegistered?.(source);\n }\n },\n unregister(sourceId: string): void {\n const source = sources.get(sourceId);\n if (source === undefined) {\n return;\n }\n source._setSink(null);\n sources.delete(sourceId);\n for (const listener of listeners) {\n listener.onSourceUnregistered?.(sourceId);\n }\n },\n addListener(listener: IDevtoolsListenerLike): () => void {\n listeners.add(listener);\n for (const source of sources.values()) {\n applySink(source);\n listener.onSourceRegistered?.(source);\n }\n return () => {\n if (!listeners.delete(listener)) {\n return;\n }\n for (const source of sources.values()) {\n applySink(source);\n }\n };\n },\n };\n}\n\nexport function getOrCreateHookRegistry(): IDevtoolsHookRegistryLike {\n const globals = globalThis as unknown as Record<string, unknown>;\n const existing = globals[DEVTOOLS_HOOK_GLOBAL] as IDevtoolsHookRegistryLike | undefined;\n if (existing !== undefined) {\n if (existing.version !== DEVTOOLS_PROTOCOL_VERSION) {\n // 先勝ち固定。振る舞いは差し替えない(protocol §2)\n console.warn(\n `[wcstack/devtools] hook registry version mismatch: found ${existing.version}, expected ${DEVTOOLS_PROTOCOL_VERSION}. Keeping the existing registry (first-wins).`\n );\n }\n return existing;\n }\n const registry = createMinimalRegistry();\n globals[DEVTOOLS_HOOK_GLOBAL] = registry;\n return registry;\n}\n","/**\n * core/formatValue.ts\n *\n * 値フォーマッタ(devtools-tag-design.md §6)。\n *\n * 規範:\n * - primitive はそのまま(文字列は引用 + 80 文字上限)\n * - 配列 / plain object は深さ制限 + 要素数制限つきの要約\n * - それ以外(MediaStream, Blob, Element, class インスタンス等)は\n * `[[ClassName]]` タグ表示のみ\n * - structuredClone / JSON.stringify を全値に無差別適用しない\n * (生ハンドル・循環・巨大値対策。camera G1 との共存)\n */\n\nconst MAX_STRING = 80;\nconst MAX_ITEMS = 3;\n\nfunction isPlainObject(value: object): boolean {\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nfunction className(value: object): string {\n const ctor = (value as { constructor?: { name?: string } }).constructor;\n const name = ctor?.name;\n return typeof name === \"string\" && name.length > 0 ? name : \"Object\";\n}\n\n/**\n * 任意の値を表示用の短い文字列へ変換する。\n * @param value 対象値\n * @param depth 再帰許容深さ(既定 2。0 で複合値は要約タグのみ)\n */\nexport function formatValue(value: unknown, depth: number = 2): string {\n switch (typeof value) {\n case \"string\": {\n const body = value.length > MAX_STRING ? value.slice(0, MAX_STRING) + \"…\" : value;\n return `\"${body}\"`;\n }\n case \"number\":\n case \"boolean\":\n case \"bigint\":\n return String(value);\n case \"symbol\":\n return value.toString();\n case \"undefined\":\n return \"undefined\";\n case \"function\":\n return \"[[Function]]\";\n default:\n break;\n }\n if (value === null) {\n return \"null\";\n }\n const objectValue = value as object;\n if (Array.isArray(objectValue)) {\n if (depth <= 0) {\n return `[[Array(${objectValue.length})]]`;\n }\n const shown = objectValue.slice(0, MAX_ITEMS).map((item) => formatValue(item, depth - 1));\n const rest = objectValue.length > MAX_ITEMS ? `, …(${objectValue.length})` : \"\";\n return `[${shown.join(\", \")}${rest}]`;\n }\n if (isPlainObject(objectValue)) {\n if (depth <= 0) {\n return \"[[Object]]\";\n }\n const keys = Object.keys(objectValue);\n const shown = keys.slice(0, MAX_ITEMS).map(\n (key) => `${key}: ${formatValue((objectValue as Record<string, unknown>)[key], depth - 1)}`\n );\n const rest = keys.length > MAX_ITEMS ? `, …(${keys.length})` : \"\";\n return `{${shown.join(\", \")}${rest}}`;\n }\n // DOM ノード・生ハンドル・class インスタンス等はタグ表示のみ\n return `[[${className(objectValue)}]]`;\n}\n\n/**\n * throw された値の要約。\n *\n * `formatValue` は class インスタンスを `[[ClassName]]` に畳むため、Error に\n * そのまま使うと **最も知りたい message が消える**(`[[Error]]` だけになる)。\n * Error 形(name / message を持つ)だけは `Name: message` に開く。\n * 非 Error の throw(文字列・オブジェクト等)は通常の要約へ倒す。\n */\nexport function formatError(error: unknown): string {\n if (error !== null && typeof error === \"object\") {\n const { name, message } = error as { name?: unknown; message?: unknown };\n if (typeof message === \"string\") {\n const label = typeof name === \"string\" && name.length > 0 ? name : className(error as object);\n const body = message.length > MAX_STRING ? message.slice(0, MAX_STRING) + \"…\" : message;\n return body.length > 0 ? `${label}: ${body}` : label;\n }\n }\n return formatValue(error, 1);\n}\n\n/**\n * token 引数の要約(先頭 3 引数 × 各 80 文字上限、devtools-tag-design.md §6)。\n */\nexport function formatArgs(args: readonly unknown[]): string {\n if (args.length === 0) {\n return \"\";\n }\n const shown = args.slice(0, MAX_ITEMS).map((arg) => {\n const text = formatValue(arg, 1);\n return text.length > MAX_STRING ? text.slice(0, MAX_STRING) + \"…\" : text;\n });\n const rest = args.length > MAX_ITEMS ? `, …(${args.length})` : \"\";\n return `${shown.join(\", \")}${rest}`;\n}\n","/**\n * core/DevtoolsCore.ts\n *\n * hook client(devtools-tag-design.md §1)。DOM 非依存の純ロジック層。\n *\n * - registry への addListener / 解除(connect / disconnect)\n * - source 管理と roster(state 要素一覧)の維持\n * - 配線台帳(binding-added/removed イベントから構築。binding は WeakRef 保持)\n * - タイムライン ring buffer(既定 500 件 FIFO)\n * - 予約 prefix `wcs-devtools` の自己除外(protocol §5)\n *\n * 台帳はすべて devtools 側に置く(protocol 原則 2)。disconnect で\n * sources / roster / wiring をクリアし、残留参照を持たない。\n */\n\nimport { getOrCreateHookRegistry } from \"../protocol/registry\";\nimport {\n DevtoolsEventLike,\n IAbsoluteAddressLike,\n IBindingLike,\n IDeclaredBindingLike,\n IDevtoolsSourceLike,\n IKeyedSubscriptionSummaryLike,\n IMountOverlaySummaryLike,\n IStateElementSummaryLike,\n} from \"../protocol/types\";\nimport { formatArgs, formatError, formatValue } from \"./formatValue\";\n\nconst DEFAULT_TIMELINE_CAPACITY = 500;\n\nexport type TimelineKind =\n | \"write\"\n | \"batch\"\n | \"command\"\n | \"event\"\n | \"element-registered\"\n | \"element-unregistered\"\n | \"watch-error\"\n | \"watch-chain-limit\"\n | \"path-unresolved\"\n | \"binding-apply-error\"\n | \"propagation-suppressed\"\n | \"propagation-coalesced\"\n | \"propagation-hop-limit\"\n | \"contract-drift\";\n\nexport interface ITimelineEntry {\n readonly seq: number;\n readonly time: number;\n readonly sourceId: string;\n readonly kind: TimelineKind;\n readonly label: string;\n readonly detail: string;\n readonly subscriberCount: number | null;\n}\n\nexport interface IRosterEntry {\n readonly sourceId: string;\n /** 表示・選択用のルート由来ラベル(document / ホストタグ、重複は #n を付ける) */\n readonly label: string;\n readonly rootNode: Node;\n readonly summary: IStateElementSummaryLike;\n}\n\nexport interface IWiringEntry {\n readonly sourceId: string;\n readonly path: string;\n readonly propName: string;\n readonly bindingType: string;\n readonly bindingRef: WeakRef<IBindingLike>;\n /**\n * 属する state 要素(absoluteAddress.absolutePathInfo.stateElement)。v2 は名前次元が\n * 無いため、複数ツリーの同名パスは要素同一性で区別する(getWiringForPath のスコープ)。\n * WeakRef なのはこの台帳が要素の寿命を延ばさないため。payload に無ければ null。\n */\n readonly stateElementRef: WeakRef<object> | null;\n}\n\nexport type CoreChangeKind = \"sources\" | \"roster\" | \"wiring\" | \"timeline\" | \"coverage\";\nexport type CoreChangeListener = (kind: CoreChangeKind) => void;\n\n/**\n * 配線カバレッジ 1 行(static-wiring-dx-design.md §4 — 宣言 × 実測の突合)。\n * - watch: `fired`(count 回)/ `never` / `prerequisite-missing`\n * (ワイルドカード行 watch は「for バインド or $listKeys 宣言」が無いと\n * リスト書き込みが行へ届かない — 「未発火」と区別しないと誤警告になる)\n * - command / eventToken: `emitted`(count 回)/ `never` /\n * `emitted-unheard`(全 emit が subscriberCount 0 = 空撃ち。§4 の突合対象)\n * - binding: canonical declared がある場合のみ。`attached` / `never-attached`\n * (attached は「観測開始以降に一度でも attach された」— live 台帳は WeakRef\n * pruning で縮むため、瞬間値で判定すると attached が never-attached へ戻る)\n */\nexport type CoverageStatus =\n | \"fired\" | \"emitted\" | \"emitted-unheard\" | \"attached\"\n | \"never\" | \"prerequisite-missing\" | \"never-attached\";\n\nexport interface ICoverageEntry {\n readonly kind: \"watch\" | \"command\" | \"eventToken\" | \"binding\";\n readonly name: string;\n readonly status: CoverageStatus;\n readonly count: number;\n readonly note: string | null;\n}\n\nexport interface IDevtoolsCoreOptions {\n /** タイムライン ring buffer 件数(既定 500) */\n timelineCapacity?: number;\n}\n\n/** 台帳キーの区切り文字(state 名・パスに現れ得ない NUL)。\n * エスケープ表記でなく生成式にしているのは、ツーリングがソース中の\n * `エスケープ列` リテラルを生バイトへ壊す事故が実際に起きたため。 */\nconst NUL = String.fromCharCode(0);\n\nfunction pathKeyOf(path: string): string {\n return path;\n}\n\nfunction tokenKeyOf(kind: string, name: string): string {\n return kind + NUL + name;\n}\n\n/** 宣言(path+propName)単位の attach キー。NUL 区切りは tokenKeyOf と同じ理由 */\nfunction attachKeyOf(path: string, propName: string): string {\n return path + NUL + propName;\n}\n\n/** roster 表示用のルート由来ラベル(v2: name 次元が無いのでルートで識別する) */\nfunction rootLabelOf(rootNode: Node): string {\n if (typeof ShadowRoot !== \"undefined\" && rootNode instanceof ShadowRoot) {\n return `<${rootNode.host.tagName.toLowerCase()}>`;\n }\n if (rootNode.nodeType === 9 /* DOCUMENT_NODE */) {\n return \"document\";\n }\n return rootNode.nodeName.toLowerCase();\n}\n\n/** token emit の実測(カバレッジ台帳の集計値)。zeroSubscriberCount = 空撃ち回数 */\ninterface ITokenEmitStat {\n count: number;\n zeroSubscriberCount: number;\n}\n\n/**\n * watch / token 実測台帳の 1 区分(ツリー別 — protocol v2 追補)。\n * `stateElementRef === null` は「payload にツリー識別が無かった」旧 payload の\n * 合算区分で、どのツリーの照会にも常に合算で残す(欠測を欠落にしない — wiring\n * 台帳の stateElementRef と同じ流儀)。WeakRef なのはこの台帳が state 要素の\n * 寿命を延ばさないため。watch は count のみ使い、zeroSubscriberCount は token 用。\n */\ninterface IMeasuredStat {\n readonly stateElementRef: WeakRef<object> | null;\n count: number;\n zeroSubscriberCount: number;\n}\n\n/** token カバレッジ 1 行の判定(§4: 空撃ちのみ / 一部空撃ち / 正常 / 未発火) */\nfunction tokenCoverageOf(\n kind: \"command\" | \"eventToken\",\n name: string,\n stat: ITokenEmitStat | undefined,\n): ICoverageEntry {\n if (stat === undefined) {\n return { kind, name, status: \"never\", count: 0, note: null };\n }\n if (stat.zeroSubscriberCount === stat.count) {\n return {\n kind, name, status: \"emitted-unheard\", count: stat.count,\n note: `all ${stat.count} emit(s) had 0 subscribers`,\n };\n }\n return {\n kind, name, status: \"emitted\", count: stat.count,\n note: stat.zeroSubscriberCount > 0\n ? `${stat.zeroSubscriberCount}/${stat.count} emit(s) had 0 subscribers`\n : null,\n };\n}\n\nexport class DevtoolsCore {\n private _timelineCapacity: number;\n private _removeListener: (() => void) | null = null;\n private _sources: Map<string, IDevtoolsSourceLike> = new Map();\n private _roster: Map<string, IRosterEntry[]> = new Map();\n private _wiringByPathKey: Map<string, Set<IWiringEntry>> = new Map();\n private _wiringEntryByBinding: WeakMap<IBindingLike, IWiringEntry> = new WeakMap();\n private _timeline: ITimelineEntry[] = [];\n private _seq: number = 0;\n private _paused: boolean = false;\n private _changeListeners: Set<CoreChangeListener> = new Set();\n /** 観測開始時刻(connect 時の performance.now。未接続は null)。 */\n private _observingSince: number | null = null;\n /** watch 発火実測(path → ツリー別区分列)。カバレッジの実測面。\n * protocol v2 追補で payload がツリー識別(stateElement)を持つようになり、\n * 複数ツリーが同名 watch パスを宣言するページでもツリー別に数えられる。\n * 識別の無い旧 payload は null 区分に積み、どのツリーの照会にも合算で残す\n * (slice 29 non-blocking 記録の解消)。 */\n private _watchFiredStats: Map<string, IMeasuredStat[]> = new Map();\n /** token emit 実測(kind + NUL + name → ツリー別区分列)。上の追補注記と同じ。 */\n private _tokenEmitStats: Map<string, IMeasuredStat[]> = new Map();\n /** 観測開始以降に一度でも attach を観測した宣言キー(attachKeyOf)。\n * live 配線台帳は WeakRef pruning / binding-removed で縮むため、binding\n * カバレッジの attached 判定はこちらで行う(瞬間値で判定すると行の\n * 破棄・GC のたびに attached が never-attached へ逆戻りする)。 */\n private _everAttachedKeys: Set<string> = new Set();\n\n constructor(options?: IDevtoolsCoreOptions) {\n this._timelineCapacity = options?.timelineCapacity ?? DEFAULT_TIMELINE_CAPACITY;\n }\n\n get connected(): boolean {\n return this._removeListener !== null;\n }\n\n get paused(): boolean {\n return this._paused;\n }\n\n set paused(value: boolean) {\n this._paused = value;\n }\n\n connect(): void {\n if (this._removeListener !== null) {\n return;\n }\n // カバレッジは「観測開始以降」の実測。台帳の過去は再構成できない(protocol §6)\n // ため、UI はこの時刻を常時表示して非対称を明示する。\n this._observingSince = performance.now();\n const registry = getOrCreateHookRegistry();\n this._removeListener = registry.addListener({\n onSourceRegistered: (source) => {\n this._sources.set(source.id, source);\n this._refreshRosterOf(source);\n this._notify(\"sources\");\n },\n onSourceUnregistered: (sourceId) => {\n this._sources.delete(sourceId);\n this._roster.delete(sourceId);\n this._notify(\"sources\");\n this._notify(\"roster\");\n },\n onEvent: (sourceId, event) => {\n this._ingest(sourceId, event);\n },\n });\n }\n\n /** 購読解除 + 台帳クリア(タイムラインは保持。protocol §7-2 の残留ゼロ) */\n disconnect(): void {\n if (this._removeListener === null) {\n return;\n }\n this._removeListener();\n this._removeListener = null;\n this._sources.clear();\n this._roster.clear();\n this._wiringByPathKey.clear();\n this._wiringEntryByBinding = new WeakMap();\n this._observingSince = null;\n this._watchFiredStats.clear();\n this._tokenEmitStats.clear();\n this._everAttachedKeys.clear();\n this._notify(\"sources\");\n this._notify(\"roster\");\n this._notify(\"wiring\");\n this._notify(\"coverage\");\n }\n\n /** 観測開始時刻(performance.now 基準。未接続は null)。 */\n get observingSince(): number | null {\n return this._observingSince;\n }\n\n onChange(listener: CoreChangeListener): () => void {\n this._changeListeners.add(listener);\n return () => {\n this._changeListeners.delete(listener);\n };\n }\n\n getSources(): IDevtoolsSourceLike[] {\n return [...this._sources.values()];\n }\n\n getRoster(): IRosterEntry[] {\n const entries: IRosterEntry[] = [];\n for (const list of this._roster.values()) {\n entries.push(...list);\n }\n return entries;\n }\n\n /** 全 source の state 要素一覧を pull で取り直す */\n refreshRoster(): void {\n for (const source of this._sources.values()) {\n this._refreshRosterOf(source);\n }\n this._notify(\"roster\");\n }\n\n getTimeline(): readonly ITimelineEntry[] {\n return this._timeline;\n }\n\n clearTimeline(): void {\n this._timeline = [];\n this._notify(\"timeline\");\n }\n\n /**\n * 指定パスに束縛された配線(生存している binding のみ)。\n * stateElement を渡すとそのツリーの配線だけに絞る(v2 は名前次元が無いため、\n * 複数ツリーの同名パスは要素同一性で区別する)。stateElement を持たない\n * 旧 payload 由来の entry は絞り込みでも残す(欠測を欠落にしない)。\n */\n getWiringForPath(path: string, stateElement?: unknown): IWiringEntry[] {\n const set = this._wiringByPathKey.get(pathKeyOf(path));\n if (set === undefined) {\n return [];\n }\n const alive = this._collectAlive(set);\n if (stateElement === undefined) {\n return alive;\n }\n return alive.filter((entry) =>\n entry.stateElementRef === null || entry.stateElementRef.deref() === stateElement);\n }\n\n /** 全配線のスナップショット(生存している binding のみ) */\n getAllWiring(): IWiringEntry[] {\n const result: IWiringEntry[] = [];\n for (const set of this._wiringByPathKey.values()) {\n result.push(...this._collectAlive(set));\n }\n return result;\n }\n\n /** 指定ノード(またはその子孫のバインドノード)に載る配線 */\n getWiringForNode(node: Node): IWiringEntry[] {\n const result: IWiringEntry[] = [];\n for (const set of this._wiringByPathKey.values()) {\n for (const entry of this._collectAlive(set)) {\n const binding = entry.bindingRef.deref()!;\n if (\n binding.node === node ||\n binding.replaceNode === node ||\n node.contains(binding.node) ||\n node.contains(binding.replaceNode)\n ) {\n result.push(entry);\n }\n }\n }\n return result;\n }\n\n /**\n * ランタイム正本パーサによる宣言バインディング集合(protocol v1 追補)。\n * getDeclaredBindings を実装した source が 1 つも無ければ null(消費側は\n * declaredScan の簡易パーサへフォールバックする)。root は roster の rootNode\n * を source ごとに重複排除して渡す。\n */\n getCanonicalDeclared(): IDeclaredBindingLike[] | null {\n let supported = false;\n const out: IDeclaredBindingLike[] = [];\n // source をまたぐ重複(同じ root を複数 source が走査した場合)を宣言タプルで排除\n const seen = new Set<string>();\n for (const [sourceId, source] of this._sources) {\n if (typeof source.getDeclaredBindings !== \"function\") {\n continue;\n }\n supported = true;\n const roots = new Set<Node>();\n for (const entry of this._roster.get(sourceId) ?? []) {\n roots.add(entry.rootNode);\n }\n for (const root of roots) {\n for (const declared of source.getDeclaredBindings(root)) {\n const key = [declared.statePathName, declared.propName,\n declared.bindingType, declared.origin, declared.raw].join(NUL);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n out.push(declared);\n }\n }\n }\n return supported ? out : null;\n }\n\n /**\n * 配線カバレッジ(§4): 宣言面(watchPaths / token 宣言 / canonical declared)と\n * 実測面(watch-fired・token-emit の台帳・live 配線台帳)の突合。\n * 「観測開始以降」の実測であることは observingSince を UI が常時表示して明示する。\n *\n * watch / token の実測は各行の属するツリー(roster entry の element)でスコープする\n * (protocol v2 追補 — 複数ツリーの同名宣言を合算しない)。ツリー識別の無い\n * 旧 payload 由来の実測はどの行にも合算で残す(欠測を欠落にしない)。\n * stateElement を渡すとそのツリーの宣言行だけに絞る(getWiringForPath と同じ流儀)。\n * binding 節(canonical declared × ever-attach)は宣言・実測ともツリー識別を\n * 持たないため絞り込みの対象外。\n */\n getCoverageReport(stateElement?: unknown): ICoverageEntry[] {\n const out: ICoverageEntry[] = [];\n\n for (const entry of this.getRoster()) {\n const summary = entry.summary;\n if (stateElement !== undefined && summary.element !== stateElement) {\n continue;\n }\n // --- watch: 宣言(watchPaths)× 実測(watch-fired 台帳・自ツリー + 旧 payload 合算) ---\n for (const path of summary.watchPaths ?? []) {\n const count =\n this._measuredFor(this._watchFiredStats, pathKeyOf(path), summary.element)?.count ?? 0;\n if (count > 0) {\n out.push({ kind: \"watch\", name: path, status: \"fired\", count, note: null });\n continue;\n }\n // ワイルドカード行 watch に**リスト書き込み**が届く前提 = 各 `.*` 階層の\n // リストが「for バインド(paths.list)or `$listKeys` 宣言(keyedListPaths)」\n // されていること(watch 設計 §6-3)。未成立は「未発火」と区別する。\n // 前提はリスト置換経路に限る主張 — 明示 index 書き込み(`$resolve` /\n // `items.0.price` 代入。$getAll で listIndex 台帳が生えた後)は前提に\n // 依らず発火し得るため、「一度も発火しない」とは断定できない(実測済み)。\n // keyedListPaths は protocol v1 追補 — フィールドを持たない旧ランタイム\n // では $listKeys 側が観測できないため、note はさらに観測形に落とす 2 段。\n const keyedKnown = summary.keyedListPaths !== undefined;\n let missingList: string | null = null;\n for (let star = path.indexOf(\".*\"); star !== -1; star = path.indexOf(\".*\", star + 2)) {\n const listPath = path.slice(0, star);\n const satisfied = summary.paths.list.has(listPath)\n || (summary.keyedListPaths?.has(listPath) ?? false);\n if (!satisfied) {\n missingList = listPath;\n break;\n }\n }\n if (missingList !== null) {\n out.push({\n kind: \"watch\", name: path, status: \"prerequisite-missing\", count: 0,\n note: keyedKnown\n ? `list \"${missingList}\" has no for binding and no $listKeys declaration — list writes never reach its rows (only explicit-index writes can fire this watch)`\n : `no for binding observed for list \"${missingList}\" (a $listKeys declaration would still let list writes fire it)`,\n });\n continue;\n }\n out.push({ kind: \"watch\", name: path, status: \"never\", count: 0, note: null });\n }\n // --- token: 宣言(commandTokenNames / eventTokenNames)× 実測(emit 台帳)。\n // subscriberCount 0 = 空撃ち(§4): 全 emit が空撃ちなら emitted-unheard として\n // 警告する(emit 側だけ配線されて受け手が一つも居ない構成ミスの検出)。 ---\n for (const name of summary.commandTokenNames) {\n out.push(tokenCoverageOf(\"command\", name,\n this._measuredFor(this._tokenEmitStats, tokenKeyOf(\"command\", name), summary.element)));\n }\n for (const name of summary.eventTokenNames) {\n out.push(tokenCoverageOf(\"eventToken\", name,\n this._measuredFor(this._tokenEmitStats, tokenKeyOf(\"event\", name), summary.element)));\n }\n }\n\n // --- binding: canonical declared(宣言)× live 配線台帳(実測)。canonical が\n // 取れないランタイムではこの節を出さない(declaredScan は集合でないため突合しない)。\n const declared = this.getCanonicalDeclared();\n if (declared !== null) {\n const seen = new Set<string>();\n for (const decl of declared) {\n // 構造ディレクティブは行の実体化そのもの・eventToken は token 節が担当\n if (decl.bindingType === \"for\" || decl.bindingType === \"if\"\n || decl.bindingType === \"elseif\" || decl.bindingType === \"else\") continue;\n if (decl.propName.startsWith(\"eventToken.\")) continue;\n const key = attachKeyOf(decl.statePathName, decl.propName);\n if (seen.has(key)) continue;\n seen.add(key);\n // 「一度でも attach を観測したか」で判定(ever 台帳)。live 台帳は行の\n // 破棄や GC(WeakRef pruning)で縮むため、瞬間値だと逆戻りする。\n const attached = this._everAttachedKeys.has(key);\n out.push({\n kind: \"binding\",\n name: `${decl.propName} ← ${decl.statePathName}`,\n status: attached ? \"attached\" : \"never-attached\",\n count: attached ? 1 : 0,\n note: decl.origin === \"fragment\" ? \"template interior (attaches when rows materialize)\" : null,\n });\n }\n }\n\n return out;\n }\n\n /** roster entry の state からトップレベルキーを列挙(keys 未実装ランタイムは空) */\n keysOf(entry: IRosterEntry): string[] {\n const source = this._sources.get(entry.sourceId);\n if (source === undefined || typeof source.keys !== \"function\") {\n return [];\n }\n return source.keys(entry.rootNode);\n }\n\n /**\n * roster entry のツリーに載るマウント記録(overlays — protocol v2・D20 の可視化)。\n * overlays を実装しないランタイム(v2 より前)では null — UI はセクションごと\n * 出さない(後方互換)。マウントが無いツリーは空配列。\n */\n overlaysOf(entry: IRosterEntry): IMountOverlaySummaryLike[] | null {\n const source = this._sources.get(entry.sourceId);\n if (source === undefined || typeof source.overlays !== \"function\") {\n return null;\n }\n return source.overlays(entry.rootNode);\n }\n\n /**\n * roster entry のツリーの鍵付き購読(keyedSubscriptions — protocol v2 追補・要件 D17)。\n * 実装しないランタイム(3.0 より前の state)では null — UI はセクションごと出さない。\n */\n keyedSubscriptionsOf(entry: IRosterEntry): IKeyedSubscriptionSummaryLike[] | null {\n const source = this._sources.get(entry.sourceId);\n if (source === undefined || typeof source.keyedSubscriptions !== \"function\") {\n return null;\n }\n return source.keyedSubscriptions(entry.rootNode);\n }\n\n readValue(entry: IRosterEntry, path: string, indexes?: number[]): unknown {\n const source = this._sources.get(entry.sourceId);\n if (source === undefined) {\n return undefined;\n }\n return source.read(entry.rootNode, path, indexes);\n }\n\n writeValue(entry: IRosterEntry, path: string, value: unknown, indexes?: number[]): void {\n const source = this._sources.get(entry.sourceId);\n if (source === undefined) {\n return;\n }\n source.write(entry.rootNode, path, value, indexes);\n }\n\n // --- internal ---\n\n private _notify(kind: CoreChangeKind): void {\n for (const listener of this._changeListeners) {\n listener(kind);\n }\n }\n\n private _refreshRosterOf(source: IDevtoolsSourceLike): void {\n const entries: IRosterEntry[] = [];\n const labelCounts = new Map<string, number>();\n for (const summary of source.getStateElements()) {\n const base = rootLabelOf(summary.rootNode);\n const seen = (labelCounts.get(base) ?? 0) + 1;\n labelCounts.set(base, seen);\n entries.push({\n sourceId: source.id,\n label: seen === 1 ? base : `${base}#${seen}`,\n rootNode: summary.rootNode,\n summary,\n });\n }\n this._roster.set(source.id, entries);\n }\n\n /**\n * key の実測台帳から stateElement 区分の stat を探すか作る(ingest 用)。\n * payload の stateElement がオブジェクトでない(旧 payload / 直接生成 token)\n * ときは null 区分 = 全ツリー合算面に積む。\n */\n private _statFor(map: Map<string, IMeasuredStat[]>, key: string, stateElement: unknown): IMeasuredStat {\n let entries = map.get(key);\n if (entries === undefined) {\n entries = [];\n map.set(key, entries);\n }\n const element = typeof stateElement === \"object\" && stateElement !== null ? stateElement : null;\n for (const entry of entries) {\n if (element === null ? entry.stateElementRef === null : entry.stateElementRef?.deref() === element) {\n return entry;\n }\n }\n const created: IMeasuredStat = {\n stateElementRef: element === null ? null : new WeakRef(element),\n count: 0,\n zeroSubscriberCount: 0,\n };\n entries.push(created);\n return created;\n }\n\n /**\n * key の実測を element のツリーへスコープして集計する(照会用)。\n * null 区分(ツリー識別の無い旧 payload)は常に合算に含める。GC 済みツリーの\n * 区分は遅延剪定(wiring 台帳の WeakRef pruning と同じ)。実測ゼロは undefined\n * (= 宣言だけあって一度も観測していない)に畳む。\n */\n private _measuredFor(\n map: Map<string, IMeasuredStat[]>,\n key: string,\n element: unknown,\n ): ITokenEmitStat | undefined {\n const entries = map.get(key);\n if (entries === undefined) {\n return undefined;\n }\n let count = 0;\n let zeroSubscriberCount = 0;\n for (let i = entries.length - 1; i >= 0; i--) {\n const ref = entries[i].stateElementRef;\n if (ref !== null && ref.deref() === undefined) {\n entries.splice(i, 1);\n continue;\n }\n if (ref === null || ref.deref() === element) {\n count += entries[i].count;\n zeroSubscriberCount += entries[i].zeroSubscriberCount;\n }\n }\n if (entries.length === 0) {\n map.delete(key);\n }\n return count === 0 ? undefined : { count, zeroSubscriberCount };\n }\n\n private _collectAlive(set: Set<IWiringEntry>): IWiringEntry[] {\n const alive: IWiringEntry[] = [];\n for (const entry of set) {\n if (entry.bindingRef.deref() === undefined) {\n // GC 済み binding は遅延剪定(detach 漏れで DOM を残さないための WeakRef 側)\n set.delete(entry);\n continue;\n }\n alive.push(entry);\n }\n return alive;\n }\n\n private _appendTimeline(entry: Omit<ITimelineEntry, \"seq\" | \"time\">): void {\n if (this._paused) {\n return;\n }\n this._timeline.push({\n ...entry,\n seq: this._seq++,\n time: performance.now(),\n });\n const overflow = this._timeline.length - this._timelineCapacity;\n if (overflow > 0) {\n this._timeline.splice(0, overflow);\n }\n this._notify(\"timeline\");\n }\n\n private _labelOf(address: IAbsoluteAddressLike): string {\n const indexes = address.listIndex?.indexes;\n const path = address.absolutePathInfo.pathInfo.path;\n return indexes !== undefined ? `${path}[${indexes.join(\",\")}]` : path;\n }\n\n private _ingest(sourceId: string, event: DevtoolsEventLike): void {\n switch (event.type) {\n case \"state:element-registered\": {\n const source = this._sources.get(sourceId);\n if (source !== undefined) {\n this._refreshRosterOf(source);\n this._notify(\"roster\");\n }\n this._appendTimeline({\n sourceId,\n kind: \"element-registered\",\n label: rootLabelOf(event.rootNode),\n detail: \"\",\n subscriberCount: null,\n });\n return;\n }\n case \"state:element-unregistered\": {\n const source = this._sources.get(sourceId);\n if (source !== undefined) {\n this._refreshRosterOf(source);\n this._notify(\"roster\");\n }\n this._appendTimeline({\n sourceId,\n kind: \"element-unregistered\",\n label: rootLabelOf(event.rootNode),\n detail: \"\",\n subscriberCount: null,\n });\n return;\n }\n case \"state:write\": {\n const detail = event.hasOldValue\n ? `${formatValue(event.value)} (was ${formatValue(event.oldValue)})`\n : formatValue(event.value);\n this._appendTimeline({\n sourceId,\n kind: \"write\",\n label: this._labelOf(event.absoluteAddress),\n detail,\n subscriberCount: null,\n });\n return;\n }\n case \"state:update-batch\": {\n const labels: string[] = [];\n let total = 0;\n for (const address of event.addresses) {\n total++;\n if (labels.length < 3) {\n labels.push(this._labelOf(address));\n }\n }\n if (total === 0) {\n return;\n }\n const rest = total > labels.length ? `, …(${total})` : \"\";\n this._appendTimeline({\n sourceId,\n kind: \"batch\",\n label: `${total} address${total === 1 ? \"\" : \"es\"}`,\n detail: `${labels.join(\", \")}${rest}`,\n subscriberCount: null,\n });\n return;\n }\n case \"state:binding-added\": {\n const path = event.absoluteAddress.absolutePathInfo.pathInfo.path;\n const key = pathKeyOf(path);\n let set = this._wiringByPathKey.get(key);\n if (set === undefined) {\n set = new Set();\n this._wiringByPathKey.set(key, set);\n }\n const stateElement = event.absoluteAddress.absolutePathInfo.stateElement;\n const entry: IWiringEntry = {\n sourceId,\n path,\n propName: event.binding.propName,\n bindingType: event.binding.bindingType,\n bindingRef: new WeakRef(event.binding),\n stateElementRef: typeof stateElement === \"object\" && stateElement !== null\n ? new WeakRef(stateElement)\n : null,\n };\n set.add(entry);\n this._wiringEntryByBinding.set(event.binding, entry);\n // カバレッジの実測面(B2): attach の観測を ever 台帳へ積む(remove では消さない)\n this._everAttachedKeys.add(attachKeyOf(path, event.binding.propName));\n this._notify(\"wiring\");\n this._notify(\"coverage\");\n return;\n }\n case \"state:binding-removed\": {\n const entry = this._wiringEntryByBinding.get(event.binding);\n if (entry === undefined) {\n return;\n }\n this._wiringEntryByBinding.delete(event.binding);\n const key = pathKeyOf(entry.path);\n const set = this._wiringByPathKey.get(key);\n if (set !== undefined) {\n set.delete(entry);\n if (set.size === 0) {\n this._wiringByPathKey.delete(key);\n }\n }\n this._notify(\"wiring\");\n return;\n }\n case \"state:binding-cleared\": {\n const path = event.absoluteAddress.absolutePathInfo.pathInfo.path;\n const key = pathKeyOf(path);\n if (this._wiringByPathKey.delete(key)) {\n this._notify(\"wiring\");\n }\n return;\n }\n case \"state:token-emit\": {\n // カバレッジの実測面: emit 回数と空撃ち回数を、発火元ツリー\n // (payload の stateElement — protocol v2 追補)別の区分に積む(§4)。\n // 識別の無い旧 payload は null 区分 = 全ツリー合算面へ。\n const stat = this._statFor(\n this._tokenEmitStats, tokenKeyOf(event.kind, event.tokenName), event.stateElement);\n stat.count += 1;\n if (event.subscriberCount === 0) {\n stat.zeroSubscriberCount += 1;\n }\n this._notify(\"coverage\");\n this._appendTimeline({\n sourceId,\n kind: event.kind,\n label: event.tokenName,\n detail: formatArgs(event.args),\n subscriberCount: event.subscriberCount,\n });\n return;\n }\n case \"state:watch-fired\": {\n // timeline 行にはしない(発火は高頻度になりうる活動でありカバレッジが受け皿)。\n // 発火元ツリー(payload の stateElement — protocol v2 追補)別に数える。\n this._statFor(this._watchFiredStats, pathKeyOf(event.path), event.stateElement).count += 1;\n this._notify(\"coverage\");\n return;\n }\n case \"state:watch-error\": {\n // ランタイム側は例外を握って drain を守るため、ここに出ないと失敗が\n // どこにも現れない(console を見ていない限り)。phase を detail の先頭に\n // 置くのは、getter の評価失敗とハンドラの失敗で直し方が違うため。\n this._appendTimeline({\n sourceId,\n kind: \"watch-error\",\n label: event.path,\n detail: `${event.phase}: ${formatError(event.error)}`,\n subscriberCount: null,\n });\n return;\n }\n case \"state:watch-chain-limit\": {\n this._appendTimeline({\n sourceId,\n kind: \"watch-chain-limit\",\n // 打ち切りはバッチ単位(複数ツリーのアドレスが載りうる)— 行の主語は深さ上限\n label: `depth > ${event.maxDepth}`,\n detail: event.paths.join(\", \"),\n subscriberCount: null,\n });\n return;\n }\n case \"state:path-unresolved\": {\n // ランタイムは warn で続行する(既存ページを止めないため)。lint を\n // 走らせていない相手には、ここが「配線が死んでいる」唯一の可視面になる。\n this._appendTimeline({\n sourceId,\n kind: \"path-unresolved\",\n label: event.path,\n detail: `${event.source}: \"${event.missingSegment}\" is not declared`,\n subscriberCount: null,\n });\n return;\n }\n case \"state:binding-apply-error\": {\n // 隔離された適用失敗。bindingType を detail 先頭に置くのは、構造\n // (for / if)の失敗と値の失敗で影響範囲が違うため。\n this._appendTimeline({\n sourceId,\n kind: \"binding-apply-error\",\n label: event.path,\n detail: `${event.bindingType}: ${formatError(event.error)}`,\n subscriberCount: null,\n });\n return;\n }\n case \"propagation:suppressed\": {\n // two-way エコーの辺単位抑止(主語は node + member — パスではない)\n this._appendTimeline({\n sourceId,\n kind: \"propagation-suppressed\",\n label: event.member,\n detail: `${event.reason} (tx ${event.transactionId}, edge ${event.edgeId})`,\n subscriberCount: null,\n });\n return;\n }\n case \"propagation:coalesced\": {\n this._appendTimeline({\n sourceId,\n kind: \"propagation-coalesced\",\n label: this._labelOf(event.absoluteAddress),\n detail: `tx ${event.droppedTransactionId} dropped (winner tx ${event.winnerTransactionId})`,\n subscriberCount: null,\n });\n return;\n }\n case \"propagation:hop-limit\": {\n this._appendTimeline({\n sourceId,\n kind: \"propagation-hop-limit\",\n label: this._labelOf(event.absoluteAddress),\n detail: `hop ${event.hop} (tx ${event.transactionId})`,\n subscriberCount: null,\n });\n return;\n }\n case \"contract:drift\": {\n // sidecar と live wcBindable の乖離。live が正本(wcstack-manifest-schema.md)。\n // sidecarEvent / liveEvent は型上 optional(reason と結合されていない構造的\n // 型付け)のため、欠落 payload でも \"undefined\" を表示しない防御を入れる。\n const memberPart = event.member !== undefined ? `: ${event.member}` : \"\";\n const eventPart =\n event.reason === \"event-mismatch\"\n ? ` (sidecar ${event.sidecarEvent ?? \"?\"} / live ${event.liveEvent ?? \"?\"})`\n : \"\";\n this._appendTimeline({\n sourceId,\n kind: \"contract-drift\",\n label: event.tag,\n detail: `${event.reason}${memberPart}${eventPart}`,\n subscriberCount: null,\n });\n return;\n }\n case \"contract:manifest-read\":\n case \"contract:unsupported-extension\": {\n // 情報イベント。contract analyzer の戻り値 API から取得でき、timeline は\n // 活動ログに絞る(static-wiring-dx-design.md §6 の行 4 種)。union に\n // 載せることで「型に無いイベントを黙って捨てる」状態だけを解消する。\n return;\n }\n }\n // 全 union メンバーは上の case で return する。ここに到達するのは union 外の\n // 未知イベント(新しいランタイム)だけで、additive プロトコルの意図どおり素通し。\n // union にメンバーを足して case を書き忘れると、この代入が型エラーで止める\n // (watch 2 種 → PR#161、propagation/contract 6 種 → 本修正、の再々発防止)。\n const _exhaustive: never = event;\n void _exhaustive;\n }\n}\n","/**\n * core/declaredScan.ts\n *\n * 遅延アタッチ時の declared ビュー(protocol §6)。\n *\n * binding 台帳はフック接続前の分を復元できないため、DOM に残っている\n * `data-wcs` 属性と `<!--wcs-*: -->` コメントを再スキャンして\n * 「宣言レベルの配線ビュー」を組む。ライブ台帳と違い binding 実体・\n * 接続状態は分からない(UI では \"declared\" バッジで区別する)。\n *\n * パースは表示目的の簡易版(`prop[#mod]: path[|filters]` を\n * `;` 区切りで分解するだけ)。正確なセマンティクスの正本は\n * @wcstack/state の bindTextParser であり、ここでは追随しない。\n */\n\nexport interface IDeclaredBinding {\n /** 宣言が載っている要素(コメント由来の場合は親要素) */\n readonly element: Element;\n readonly propName: string;\n readonly path: string;\n readonly filters: readonly string[];\n /** 宣言ソース: data-wcs 属性か comment ノードか */\n readonly origin: \"attribute\" | \"comment\";\n readonly raw: string;\n}\n\nconst DEFAULT_BIND_ATTRIBUTE = \"data-wcs\";\nconst COMMENT_PREFIXES = [\"wcs-text\", \"wcs-for\", \"wcs-if\", \"wcs-elseif\", \"wcs-else\"];\n\nfunction parseEntry(\n element: Element,\n raw: string,\n origin: \"attribute\" | \"comment\"\n): IDeclaredBinding | null {\n const trimmed = raw.trim();\n if (trimmed.length === 0) {\n return null;\n }\n const colon = trimmed.indexOf(\":\");\n if (colon < 0) {\n return null;\n }\n const propName = trimmed.slice(0, colon).trim();\n const rhs = trimmed.slice(colon + 1).trim();\n if (propName.length === 0 || rhs.length === 0) {\n return null;\n }\n const [pathPart, ...filterParts] = rhs.split(\"|\").map((part) => part.trim());\n // v2: `@name` セレクタは撤去済み(ランタイムは parse error にする)。\n // 簡易パーサはパスをそのまま流す — 壊れた宣言の可視化はランタイム側の役目。\n const path = pathPart;\n return {\n element,\n propName,\n path,\n filters: filterParts.filter((part) => part.length > 0),\n origin,\n raw: trimmed,\n };\n}\n\n/**\n * rootNode 配下の宣言配線を列挙する。\n * @param root 走査起点(Document / ShadowRoot / Element)\n * @param bindAttributeName バインド属性名(既定 data-wcs。setConfig で変えたページ用)\n */\nexport function scanDeclaredBindings(\n root: ParentNode,\n bindAttributeName: string = DEFAULT_BIND_ATTRIBUTE\n): IDeclaredBinding[] {\n const result: IDeclaredBinding[] = [];\n\n // data-wcs 属性(template の for/if 宣言もこの属性に載る)\n for (const element of root.querySelectorAll(`[${bindAttributeName}]`)) {\n // querySelectorAll の一致条件上、属性は必ず存在する\n const raw = element.getAttribute(bindAttributeName)!;\n for (const part of raw.split(\";\")) {\n const entry = parseEntry(element, part, \"attribute\");\n if (entry !== null) {\n result.push(entry);\n }\n }\n }\n\n // <!--wcs-text: path--> 等のコメントノード(mustache 展開後の姿)\n const document = root.ownerDocument ?? (root as Document);\n const walker = document.createTreeWalker(root as Node, NodeFilter.SHOW_COMMENT);\n let comment = walker.nextNode();\n while (comment !== null) {\n // コメントノードの textContent は常に文字列\n const text = comment.textContent!.trim();\n const prefix = COMMENT_PREFIXES.find(\n (candidate) => text === candidate || text.startsWith(candidate + \":\")\n );\n if (prefix !== undefined) {\n const parentElement =\n comment.parentNode instanceof Element ? comment.parentNode : null;\n if (parentElement !== null) {\n const body = text === prefix ? \"\" : text.slice(prefix.length + 1).trim();\n if (body.length > 0) {\n const propName = prefix === \"wcs-text\" ? \"textContent\" : prefix.slice(\"wcs-\".length);\n // propName / body とも非空のため parseEntry は必ず成功する\n result.push(parseEntry(parentElement, `${propName}: ${body}`, \"comment\")!);\n }\n }\n }\n comment = walker.nextNode();\n }\n\n return result;\n}\n","/**\n * shell/WcsDevtools.ts\n *\n * `<wcs-devtools>` — ページ内オーバーレイ DevTools 本体(devtools-tag-design.md)。\n *\n * - ShadowRoot 内で完結(ページの CSS/DOM を変更しない)\n * - ハイライトはページ要素の style/class を触らず、fixed 配置の\n * オーバーレイ枠で描く(devtools-tag-design.md §2)\n * - UI レンダリングは vanilla DOM(記録済み決定: inspected ランタイムの\n * updater キューに devtools 描画負荷を混ぜない = 観測者効果の排除。\n * wcs-state ドッグフーディングは Phase 2 で再評価)\n * - 描画は Core の change 通知を rAF で 1 回に合流(イベント毎 DOM 追加禁止、\n * devtools-tag-design.md §3.3)\n */\n\nimport { DevtoolsCore, IRosterEntry, ITimelineEntry, IWiringEntry } from \"../core/DevtoolsCore\";\nimport { formatValue } from \"../core/formatValue\";\nimport { IDeclaredBinding, scanDeclaredBindings } from \"../core/declaredScan\";\nimport { IDeclaredBindingLike, IKeyedSubscriptionSummaryLike, IMountOverlaySummaryLike } from \"../protocol/types\";\n\nconst STYLE_TEXT = /* css */ `\n:host {\n all: initial;\n position: fixed;\n z-index: 2147483647;\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 12px;\n inset: auto 0 0 auto;\n}\n* { box-sizing: border-box; }\n.badge {\n position: fixed;\n right: 12px;\n bottom: 12px;\n width: 40px;\n height: 40px;\n border-radius: 20px;\n border: 1px solid #2b4f78;\n background: #10263f;\n color: #9fd0ff;\n font-weight: 700;\n cursor: pointer;\n}\n.panel {\n position: fixed;\n display: flex;\n flex-direction: column;\n background: #0d1b2a;\n color: #d7e3f4;\n border: 1px solid #2b4f78;\n box-shadow: 0 0 24px rgba(0,0,0,.5);\n}\n.panel.dock-bottom { left: 0; right: 0; bottom: 0; height: 45vh; }\n.panel.dock-right { top: 0; right: 0; bottom: 0; width: 420px; }\n.panel[hidden] { display: none; }\nheader {\n display: flex;\n gap: 6px;\n align-items: center;\n padding: 6px 8px;\n border-bottom: 1px solid #2b4f78;\n background: #10263f;\n}\nheader .title { font-weight: 700; color: #9fd0ff; margin-right: 4px; }\nheader select, header button {\n font: inherit;\n background: #16324f;\n color: #d7e3f4;\n border: 1px solid #2b4f78;\n border-radius: 4px;\n padding: 2px 8px;\n cursor: pointer;\n}\nheader button[aria-pressed=\"true\"] { background: #2b5d8f; }\nheader .spacer { flex: 1; }\n.panes { display: flex; flex: 1; min-height: 0; }\n.pane { flex: 1; min-width: 0; overflow: auto; padding: 6px 8px; border-right: 1px solid #1d3a5c; }\n.pane:last-child { border-right: none; }\n.pane h3 {\n margin: 0 0 6px;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: .08em;\n color: #7ba7d4;\n}\n.tree-row { display: flex; gap: 6px; padding: 1px 0; align-items: baseline; white-space: nowrap; }\n.tree-row .toggle { width: 14px; cursor: pointer; color: #7ba7d4; user-select: none; }\n.tree-row .key { color: #9fd0ff; cursor: pointer; }\n.tree-row .value { color: #ffd9a0; overflow: hidden; text-overflow: ellipsis; }\n.tree-row .value.editable { cursor: pointer; }\n.tree-row input { font: inherit; background: #16324f; color: #ffd9a0; border: 1px solid #2b4f78; }\n.badge-tag {\n display: inline-block;\n padding: 0 4px;\n border-radius: 3px;\n font-size: 10px;\n background: #26456a;\n color: #a8c6e8;\n}\n.badge-tag.warn { background: #6a3326; color: #ffb3a0; }\n.badge-tag.declared { background: #4a4426; color: #efe3a0; }\n.wiring-row, .timeline-row { padding: 1px 0; white-space: nowrap; }\n.wiring-row .prop { color: #b7f0c0; }\n.wiring-row .path { color: #9fd0ff; }\n.timeline-row .t { color: #6f88a3; }\n.timeline-row .label { color: #9fd0ff; }\n.timeline-row .detail { color: #ffd9a0; }\n.timeline-row .kind { display: inline-block; min-width: 52px; text-align: center; }\n.empty { color: #6f88a3; font-style: italic; padding: 4px 0; }\n.notice { color: #efe3a0; padding: 2px 0 6px; }\n.notice button { font: inherit; margin-left: 6px; cursor: pointer; }\n.wiring-row .detail { color: #6f88a3; }\n.overlays-heading { margin-top: 10px; }\n.overlay-row { padding: 1px 0; white-space: nowrap; }\n.overlay-row .prop { color: #b7f0c0; }\n.overlay-row .path { color: #9fd0ff; }\n.overlay-row .detail { color: #6f88a3; }\n.keyed-row { padding: 1px 0; white-space: nowrap; }\n.keyed-row .path { color: #9fd0ff; }\n.keyed-row .detail { color: #6f88a3; }\n.wiring-tabs { padding: 0 0 4px; }\n.wiring-tabs button { font: inherit; cursor: pointer; margin-right: 4px; opacity: 0.6; }\n.wiring-tabs button.active { opacity: 1; font-weight: bold; }\n.hl-box {\n position: fixed;\n pointer-events: none;\n border: 1px solid #58c2ff;\n background: rgba(88,194,255,.18);\n}\n`;\n\ntype PaneName = \"state\" | \"wiring\" | \"timeline\";\n\n/** タイムラインの DOM 描画上限(buffer とは別。§3.3 のバースト圧縮の一部) */\nconst TIMELINE_RENDER_LIMIT = 200;\n/** リスト展開の 1 階層あたり表示件数上限 */\nconst LIST_CHILD_LIMIT = 20;\n\ninterface ITreeNodeRef {\n readonly path: string;\n readonly indexes: number[];\n}\n\nfunction nodeKeyOf(ref: ITreeNodeRef): string {\n return `${ref.path}#${ref.indexes.join(\",\")}`;\n}\n\nfunction isExpandable(value: unknown): boolean {\n if (Array.isArray(value)) {\n return true;\n }\n if (value === null || typeof value !== \"object\") {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nfunction coerceInput(text: string): unknown {\n const trimmed = text.trim();\n try {\n return JSON.parse(trimmed);\n } catch {\n return text;\n }\n}\n\nexport class WcsDevtools extends HTMLElement {\n static get observedAttributes(): string[] {\n return [\"open\", \"dock\", \"hotkey\"];\n }\n\n private _core: DevtoolsCore | null = null;\n private _removeCoreListener: (() => void) | null = null;\n private _panel: HTMLElement | null = null;\n private _badge: HTMLButtonElement | null = null;\n private _stateSelect: HTMLSelectElement | null = null;\n private _paneElements: Partial<Record<PaneName, HTMLElement>> = {};\n /** Wiring ペインの表示モード(配線一覧 / カバレッジ突合)。 */\n private _wiringView: \"wiring\" | \"coverage\" = \"wiring\";\n private _highlightLayer: HTMLElement | null = null;\n private _dirtyPanes: Set<PaneName> = new Set();\n private _renderScheduled: boolean = false;\n private _selectedRosterKey: string | null = null;\n private _selectedPath: string | null = null;\n private _pickedNode: Node | null = null;\n private _pickMode: boolean = false;\n private _expanded: Set<string> = new Set();\n private _hotkeyHandler: ((event: KeyboardEvent) => void) | null = null;\n private _pickHandler: ((event: MouseEvent) => void) | null = null;\n\n get core(): DevtoolsCore | null {\n return this._core;\n }\n\n connectedCallback(): void {\n // SSR では不活性(protocol 原則 6)\n if (document.documentElement.hasAttribute(\"data-wcs-server\")) {\n return;\n }\n if (this.shadowRoot === null) {\n this._buildShadow();\n }\n const capacity = Number(this.getAttribute(\"buffer\") ?? \"\");\n this._core = new DevtoolsCore({\n timelineCapacity: Number.isFinite(capacity) && capacity > 0 ? capacity : undefined,\n });\n this._removeCoreListener = this._core.onChange((kind) => {\n if (kind === \"roster\" || kind === \"sources\") {\n this._markDirty(\"state\");\n this._markDirty(\"wiring\");\n } else if (kind === \"wiring\") {\n this._markDirty(\"wiring\");\n } else if (kind === \"coverage\") {\n // カバレッジは Wiring ペインのタブとして描画される\n if (this._wiringView === \"coverage\") {\n this._markDirty(\"wiring\");\n }\n } else {\n this._markDirty(\"timeline\");\n }\n });\n this._core.connect();\n this._applyDock();\n this._applyOpen();\n this._installHotkey();\n this._markDirty(\"state\");\n this._markDirty(\"wiring\");\n this._markDirty(\"timeline\");\n }\n\n disconnectedCallback(): void {\n this._removeCoreListener?.();\n this._removeCoreListener = null;\n this._core?.disconnect();\n this._core = null;\n this._uninstallHotkey();\n this._exitPickMode();\n }\n\n attributeChangedCallback(name: string): void {\n if (this.shadowRoot === null) {\n return;\n }\n if (name === \"open\") {\n this._applyOpen();\n } else if (name === \"dock\") {\n this._applyDock();\n } else if (name === \"hotkey\") {\n this._uninstallHotkey();\n this._installHotkey();\n }\n }\n\n /** テスト用: rAF を待たずに保留中の描画を実行する */\n __flushRenderForTest(): void {\n this._renderDirty();\n }\n\n // --- shadow construction ---\n\n private _buildShadow(): void {\n const shadow = this.attachShadow({ mode: \"open\" });\n const style = document.createElement(\"style\");\n style.textContent = STYLE_TEXT;\n shadow.append(style);\n\n const badge = document.createElement(\"button\");\n badge.className = \"badge\";\n badge.title = \"wcstack DevTools\";\n badge.textContent = \"WCS\";\n badge.addEventListener(\"click\", () => this.toggle());\n shadow.append(badge);\n this._badge = badge;\n\n const panel = document.createElement(\"div\");\n panel.className = \"panel dock-bottom\";\n panel.hidden = true;\n\n const header = document.createElement(\"header\");\n const title = document.createElement(\"span\");\n title.className = \"title\";\n title.textContent = \"wcstack devtools\";\n header.append(title);\n\n const stateSelect = document.createElement(\"select\");\n stateSelect.title = \"state element\";\n stateSelect.addEventListener(\"change\", () => {\n this._selectedRosterKey = stateSelect.value || null;\n this._selectedPath = null;\n this._expanded.clear();\n this._markDirty(\"state\");\n this._markDirty(\"wiring\");\n });\n header.append(stateSelect);\n this._stateSelect = stateSelect;\n\n const pickButton = this._headerButton(header, \"⌖ pick\", \"pick a page element\");\n pickButton.addEventListener(\"click\", () => {\n if (this._pickMode) {\n this._exitPickMode();\n } else {\n this._enterPickMode();\n }\n pickButton.setAttribute(\"aria-pressed\", String(this._pickMode));\n });\n pickButton.dataset[\"role\"] = \"pick\";\n\n const pauseButton = this._headerButton(header, \"⏸\", \"pause timeline\");\n pauseButton.addEventListener(\"click\", () => {\n const core = this._core;\n if (core === null) {\n return;\n }\n core.paused = !core.paused;\n pauseButton.setAttribute(\"aria-pressed\", String(core.paused));\n });\n pauseButton.dataset[\"role\"] = \"pause\";\n\n const clearButton = this._headerButton(header, \"🗑\", \"clear timeline\");\n clearButton.addEventListener(\"click\", () => {\n this._core?.clearTimeline();\n });\n clearButton.dataset[\"role\"] = \"clear\";\n\n const spacer = document.createElement(\"span\");\n spacer.className = \"spacer\";\n header.append(spacer);\n\n const dockButton = this._headerButton(header, \"dock\", \"toggle dock position\");\n dockButton.addEventListener(\"click\", () => {\n const next = (this.getAttribute(\"dock\") ?? \"bottom\") === \"bottom\" ? \"right\" : \"bottom\";\n this.setAttribute(\"dock\", next);\n });\n dockButton.dataset[\"role\"] = \"dock\";\n\n const closeButton = this._headerButton(header, \"×\", \"close\");\n closeButton.addEventListener(\"click\", () => this.toggle(false));\n closeButton.dataset[\"role\"] = \"close\";\n\n panel.append(header);\n\n const panes = document.createElement(\"div\");\n panes.className = \"panes\";\n for (const [name, heading] of [\n [\"state\", \"State\"],\n [\"wiring\", \"Wiring\"],\n [\"timeline\", \"Timeline\"],\n ] as const) {\n const pane = document.createElement(\"section\");\n pane.className = `pane pane-${name}`;\n const h3 = document.createElement(\"h3\");\n h3.textContent = heading;\n const body = document.createElement(\"div\");\n body.className = \"pane-body\";\n pane.append(h3, body);\n panes.append(pane);\n this._paneElements[name] = body;\n }\n panel.append(panes);\n shadow.append(panel);\n this._panel = panel;\n\n const highlightLayer = document.createElement(\"div\");\n highlightLayer.className = \"hl-layer\";\n shadow.append(highlightLayer);\n this._highlightLayer = highlightLayer;\n }\n\n private _headerButton(header: HTMLElement, label: string, title: string): HTMLButtonElement {\n const button = document.createElement(\"button\");\n button.textContent = label;\n button.title = title;\n button.setAttribute(\"aria-pressed\", \"false\");\n header.append(button);\n return button;\n }\n\n // --- open/close/dock/hotkey ---\n\n get open(): boolean {\n return this.hasAttribute(\"open\");\n }\n\n toggle(force?: boolean): void {\n const next = force ?? !this.open;\n if (next) {\n this.setAttribute(\"open\", \"\");\n } else {\n this.removeAttribute(\"open\");\n }\n }\n\n private _applyOpen(): void {\n // shadowRoot 構築後にしか呼ばれない(attributeChangedCallback 側でガード済み)\n this._panel!.hidden = !this.open;\n this._badge!.hidden = this.open;\n if (this.open) {\n this._markDirty(\"state\");\n this._markDirty(\"wiring\");\n this._markDirty(\"timeline\");\n }\n }\n\n private _applyDock(): void {\n // shadowRoot 構築後にしか呼ばれない(attributeChangedCallback 側でガード済み)\n const dock = this.getAttribute(\"dock\") === \"right\" ? \"right\" : \"bottom\";\n this._panel!.classList.toggle(\"dock-right\", dock === \"right\");\n this._panel!.classList.toggle(\"dock-bottom\", dock === \"bottom\");\n }\n\n private _installHotkey(): void {\n const spec = this.getAttribute(\"hotkey\") ?? \"Alt+Shift+D\";\n if (spec === \"none\") {\n return;\n }\n const parts = spec.split(\"+\").map((part) => part.trim().toLowerCase());\n const key = parts[parts.length - 1];\n const alt = parts.includes(\"alt\");\n const shift = parts.includes(\"shift\");\n const ctrl = parts.includes(\"ctrl\");\n const meta = parts.includes(\"meta\");\n this._hotkeyHandler = (event: KeyboardEvent) => {\n if (\n event.key.toLowerCase() === key &&\n event.altKey === alt &&\n event.shiftKey === shift &&\n event.ctrlKey === ctrl &&\n event.metaKey === meta\n ) {\n event.preventDefault();\n this.toggle();\n }\n };\n window.addEventListener(\"keydown\", this._hotkeyHandler);\n }\n\n private _uninstallHotkey(): void {\n if (this._hotkeyHandler !== null) {\n window.removeEventListener(\"keydown\", this._hotkeyHandler);\n this._hotkeyHandler = null;\n }\n }\n\n // --- pick mode ---\n\n private _enterPickMode(): void {\n // 呼び出し元(pick ボタン)が toggle 済みのため、ここでは常に開始でよい\n this._pickMode = true;\n // click を capture で奪う(誤操作防止、devtools-tag-design.md G-U2 の既定側)\n this._pickHandler = (event: MouseEvent) => {\n const target = event.target as Node;\n // devtools 自身(実ブラウザでは retarget されて host、shadow 非 retarget 環境では\n // shadow 内ノード)は pick 対象外\n if (target.getRootNode() === this.shadowRoot || target === this) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this._pickedNode = target;\n this._selectedPath = null;\n this._exitPickMode();\n this._markDirty(\"wiring\");\n };\n document.addEventListener(\"click\", this._pickHandler, { capture: true });\n }\n\n private _exitPickMode(): void {\n if (this._pickHandler !== null) {\n document.removeEventListener(\"click\", this._pickHandler, { capture: true });\n this._pickHandler = null;\n }\n this._pickMode = false;\n const pickButton = this.shadowRoot?.querySelector('button[data-role=\"pick\"]');\n pickButton?.setAttribute(\"aria-pressed\", \"false\");\n }\n\n // --- rendering ---\n\n private _markDirty(pane: PaneName): void {\n this._dirtyPanes.add(pane);\n if (this._renderScheduled) {\n return;\n }\n this._renderScheduled = true;\n requestAnimationFrame(() => {\n this._renderDirty();\n });\n }\n\n private _renderDirty(): void {\n this._renderScheduled = false;\n if (this._core === null || this.shadowRoot === null) {\n this._dirtyPanes.clear();\n return;\n }\n const dirty = this._dirtyPanes;\n this._dirtyPanes = new Set();\n if (dirty.has(\"state\")) {\n this._renderStatePane();\n }\n if (dirty.has(\"wiring\")) {\n this._renderWiringPane();\n }\n if (dirty.has(\"timeline\")) {\n this._renderTimelinePane();\n }\n }\n\n private _rosterKey(entry: IRosterEntry): string {\n return `${entry.sourceId}:${entry.label}`;\n }\n\n private _selectedRoster(): IRosterEntry | null {\n const core = this._core!;\n const roster = core.getRoster();\n if (roster.length === 0) {\n return null;\n }\n const found = roster.find((entry) => this._rosterKey(entry) === this._selectedRosterKey);\n return found ?? roster[0];\n }\n\n private _renderStatePane(): void {\n const core = this._core!;\n const body = this._paneElements[\"state\"]!;\n const select = this._stateSelect!;\n const roster = core.getRoster();\n const selected = this._selectedRoster();\n\n select.replaceChildren(\n ...roster.map((entry) => {\n const option = document.createElement(\"option\");\n option.value = this._rosterKey(entry);\n option.textContent = `${entry.label} (${entry.sourceId.slice(0, 12)})`;\n option.selected = selected !== null && this._rosterKey(entry) === this._rosterKey(selected);\n return option;\n })\n );\n\n body.replaceChildren();\n if (selected === null) {\n body.append(this._emptyRow(\"no <wcs-state> elements observed\"));\n return;\n }\n this._selectedRosterKey = this._rosterKey(selected);\n const keys = core.keysOf(selected);\n if (keys.length === 0) {\n body.append(this._emptyRow(\"no readable keys (runtime without keys() API?)\"));\n // keys が読めないランタイムでも overlays は独立に読める可能性があるため出す\n this._renderOverlaysSection(body, selected);\n this._renderKeyedSection(body, selected);\n return;\n }\n for (const key of keys) {\n this._renderTreeNode(body, selected, { path: key, indexes: [] }, key, 0);\n }\n this._renderOverlaysSection(body, selected);\n this._renderKeyedSection(body, selected);\n }\n\n /**\n * 選択ツリーの鍵付き購読セクション(keyedSubscriptions — protocol v2 追補・要件 D17)。\n * `$eq` / `$eqPath` / `$eqIndex` の購読は依存グラフの動的な変化で、上の状態ツリーにも\n * Wiring の台帳にも現れない。path ごとに購読の数と最後の値を出し、getter 由来の path で\n * 追跡付きの読みに落ちたもの(変わるたびに読む getter が全部再評価される)を warn で目立たせる。\n * 未提供の旧ランタイム(null)と `$eq` 系が一度も評価されていないツリー(空配列)では出さない。\n * pull の時機は Overlays と同じく State ペインの再描画に乗る。\n */\n private _renderKeyedSection(body: HTMLElement, entry: IRosterEntry): void {\n const summaries = this._core!.keyedSubscriptionsOf(entry);\n if (summaries === null || summaries.length === 0) {\n return;\n }\n const heading = document.createElement(\"h3\");\n heading.className = \"overlays-heading\";\n heading.textContent = `Keyed selection (${summaries.length} path${summaries.length === 1 ? \"\" : \"s\"})`;\n body.append(heading);\n for (const summary of summaries) {\n body.append(this._keyedRow(summary));\n }\n }\n\n /** 鍵付き購読 1 path の描画(path・購読の数・最後の値、または追跡付きへの落ち)。 */\n private _keyedRow(summary: IKeyedSubscriptionSummaryLike): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"keyed-row\";\n const path = document.createElement(\"span\");\n path.className = \"path\";\n path.textContent = summary.path;\n row.append(path);\n if (summary.tracked) {\n const badge = document.createElement(\"span\");\n badge.className = \"badge-tag warn\";\n badge.textContent = \"tracked\";\n badge.title = \"the path is a getter or under one, so $eq cannot subscribe by key: every getter that reads it re-evaluates when it changes\";\n row.append(document.createTextNode(\" \"), badge);\n }\n const details: string[] = [];\n // 空になった鍵は台帳から消えるので、鍵があれば行もある\n if (summary.rows > 0) {\n details.push(`rows ${summary.rows} · keys ${summary.keys}`);\n }\n if (summary.lists > 0) {\n details.push(`list watchers ${summary.lists}`);\n }\n if (!summary.tracked) {\n details.push(`last ${formatValue(summary.lastValue, 1)}`);\n }\n const detail = document.createElement(\"span\");\n detail.className = \"detail\";\n detail.textContent = details.length > 0 ? ` ${details.join(\" · \")}` : \"\";\n row.append(detail);\n return row;\n }\n\n /**\n * 選択ツリーのマウント記録セクション(overlays — protocol v2・D20 の可視化)。\n * マウントの私有キー・getter はオーバーレイ専用アドレス空間(マーカー `#m<id>`)に\n * 住み、上の状態ツリー(keys/read)には現れないため、ここが唯一の可視面。\n * overlays 未提供の旧ランタイム(null)ではセクションごと出さない(後方互換)。\n * マウント無し(空配列)も見出しだけ残さない。pull は State ペインの再描画\n * (roster / sources 変更・ツリー切替)にそのまま乗る — 専用 polling は足さない\n * (観測者効果の排除、devtools-tag-design.md の rAF 合流と同じ姿勢)。\n */\n private _renderOverlaysSection(body: HTMLElement, entry: IRosterEntry): void {\n const overlays = this._core!.overlaysOf(entry);\n if (overlays === null || overlays.length === 0) {\n return;\n }\n const heading = document.createElement(\"h3\");\n heading.className = \"overlays-heading\";\n heading.textContent = `Overlays (${overlays.length} mount${overlays.length === 1 ? \"\" : \"s\"})`;\n body.append(heading);\n for (const overlay of overlays) {\n body.append(this._overlayRow(overlay));\n }\n }\n\n /** マウント記録 1 件の描画(マーカー・コンポーネント・マウント表・私有面)。 */\n private _overlayRow(overlay: IMountOverlaySummaryLike): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"overlay-row\";\n const marker = document.createElement(\"span\");\n marker.className = \"badge-tag\";\n marker.textContent = overlay.marker;\n const tag = document.createElement(\"span\");\n tag.className = \"prop\";\n tag.textContent = `<${overlay.componentTag}>`;\n const prop = document.createElement(\"span\");\n prop.className = \"path\";\n // stateProp はホスト側の `state[.sub]:` 宣言の書き手語彙\n prop.textContent = overlay.stateProp;\n row.append(marker, document.createTextNode(\" \"), tag, document.createTextNode(\" \"), prop);\n const details: string[] = [];\n for (const entry of overlay.mountTable) {\n // 内側接頭辞が空 = ルートエントリ。外側パスへの対応で読ませる\n details.push(`${entry.inner === \"\" ? \"(root)\" : entry.inner} → ${entry.outer}`);\n }\n if (overlay.delta > 0) {\n details.push(`Δ${overlay.delta}`);\n }\n if (overlay.privateKeys.length > 0) {\n details.push(`private: ${overlay.privateKeys.join(\", \")}`);\n }\n // 公開 getter の公開パス。オーバーレイ export より前の v2 ランタイムは\n // フィールドを持たないので `?? []` で受ける(protocol §3)\n const exports = overlay.exports ?? [];\n if (exports.length > 0) {\n details.push(`exports: ${exports.join(\", \")}`);\n }\n if (overlay.getterKeys.length > 0) {\n details.push(`getters: ${overlay.getterKeys.join(\", \")}`);\n }\n if (details.length > 0) {\n const detail = document.createElement(\"span\");\n detail.className = \"detail\";\n detail.textContent = ` ${details.join(\" · \")}`;\n row.append(detail);\n }\n return row;\n }\n\n private _renderTreeNode(\n container: HTMLElement,\n entry: IRosterEntry,\n ref: ITreeNodeRef,\n label: string,\n depth: number\n ): void {\n const core = this._core!;\n let value: unknown;\n let readable = true;\n try {\n value = core.readValue(entry, ref.path, ref.indexes);\n } catch {\n readable = false;\n }\n\n const row = document.createElement(\"div\");\n row.className = \"tree-row\";\n row.style.paddingLeft = `${depth * 14}px`;\n\n const expandable = readable && isExpandable(value);\n const key = nodeKeyOf(ref);\n const expanded = expandable && this._expanded.has(key);\n\n const toggle = document.createElement(\"span\");\n toggle.className = \"toggle\";\n toggle.textContent = expandable ? (expanded ? \"▾\" : \"▸\") : \"\";\n if (expandable) {\n toggle.addEventListener(\"click\", () => {\n if (this._expanded.has(key)) {\n this._expanded.delete(key);\n } else {\n this._expanded.add(key);\n }\n this._markDirty(\"state\");\n });\n }\n row.append(toggle);\n\n const keySpan = document.createElement(\"span\");\n keySpan.className = \"key\";\n keySpan.textContent = `${label}:`;\n keySpan.title = ref.path;\n keySpan.addEventListener(\"click\", () => {\n this._selectedPath = ref.path;\n this._pickedNode = null;\n this._markDirty(\"wiring\");\n this._highlightPath(entry, ref.path);\n });\n row.append(keySpan);\n\n const valueSpan = document.createElement(\"span\");\n valueSpan.className = \"value\";\n if (!readable) {\n valueSpan.textContent = \"(unreadable getter)\";\n } else {\n valueSpan.textContent = formatValue(value, 1);\n const editable = value === null || typeof value !== \"object\";\n if (editable && typeof value !== \"function\") {\n valueSpan.classList.add(\"editable\");\n valueSpan.title = \"click to edit\";\n valueSpan.addEventListener(\"click\", () => {\n this._beginEdit(row, valueSpan, entry, ref, value);\n });\n }\n }\n row.append(valueSpan);\n container.append(row);\n\n if (expanded) {\n if (Array.isArray(value)) {\n const limit = Math.min(value.length, LIST_CHILD_LIMIT);\n for (let index = 0; index < limit; index++) {\n this._renderTreeNode(\n container,\n entry,\n { path: `${ref.path}.*`, indexes: [...ref.indexes, index] },\n `[${index}]`,\n depth + 1\n );\n }\n if (value.length > limit) {\n const more = this._emptyRow(`…(${value.length} items)`);\n more.style.paddingLeft = `${(depth + 1) * 14}px`;\n container.append(more);\n }\n } else {\n for (const childKey of Object.keys(value as Record<string, unknown>)) {\n this._renderTreeNode(\n container,\n entry,\n { path: `${ref.path}.${childKey}`, indexes: ref.indexes },\n childKey,\n depth + 1\n );\n }\n }\n }\n }\n\n private _beginEdit(\n row: HTMLElement,\n valueSpan: HTMLElement,\n entry: IRosterEntry,\n ref: ITreeNodeRef,\n current: unknown\n ): void {\n const input = document.createElement(\"input\");\n input.value = typeof current === \"string\" ? current : String(current);\n const commit = (): void => {\n // 編集は通常のリアクティブパイプラインを通る(devtools-tag-design.md §3.1)\n this._core?.writeValue(entry, ref.path, coerceInput(input.value), ref.indexes);\n this._markDirty(\"state\");\n };\n input.addEventListener(\"keydown\", (event) => {\n if (event.key === \"Enter\") {\n commit();\n } else if (event.key === \"Escape\") {\n this._markDirty(\"state\");\n }\n });\n row.replaceChild(input, valueSpan);\n input.focus();\n }\n\n private _renderWiringPane(): void {\n const core = this._core!;\n const body = this._paneElements[\"wiring\"]!;\n body.replaceChildren();\n\n // 配線一覧 / カバレッジのビュートグル(devtools-tag-design.md §3.2 / 設計 §4)\n const tabs = document.createElement(\"div\");\n tabs.className = \"wiring-tabs\";\n for (const [view, label] of [[\"wiring\", \"wiring\"], [\"coverage\", \"coverage\"]] as const) {\n const button = document.createElement(\"button\");\n button.textContent = label;\n if (this._wiringView === view) {\n button.classList.add(\"active\");\n }\n button.addEventListener(\"click\", () => {\n this._wiringView = view;\n this._markDirty(\"wiring\");\n });\n tabs.append(button);\n }\n body.append(tabs);\n\n if (this._wiringView === \"coverage\") {\n this._renderCoverageView(body);\n return;\n }\n\n let entries: IWiringEntry[];\n let contextLabel: string;\n if (this._pickedNode !== null) {\n entries = core.getWiringForNode(this._pickedNode);\n const target = this._pickedNode;\n contextLabel =\n target instanceof Element ? `<${target.tagName.toLowerCase()}>` : target.nodeName;\n } else if (this._selectedPath !== null) {\n const selected = this._selectedRoster();\n // 選択中のツリーでスコープ(複数ツリーの同名パスを混ぜない)\n entries =\n selected !== null ? core.getWiringForPath(this._selectedPath, selected.summary.element) : [];\n contextLabel = this._selectedPath;\n } else {\n entries = core.getAllWiring();\n contextLabel = \"all\";\n }\n\n const info = document.createElement(\"div\");\n info.textContent = `context: ${contextLabel} — ${entries.length} live binding${entries.length === 1 ? \"\" : \"s\"}`;\n body.append(info);\n\n if (entries.length > 0) {\n for (const entry of entries) {\n body.append(this._wiringRow(entry));\n }\n return;\n }\n\n // ライブ台帳が空 → declared ビューへフォールバック(protocol §6)。\n // ランタイムが getDeclaredBindings を実装していれば正本パーサの宣言集合を使い、\n // 旧ランタイムだけ簡易パーサ(declaredScan — bindTextParser 非追随)に落ちる。\n const canonical = core.getCanonicalDeclared();\n const selected = this._selectedRoster();\n const legacy =\n canonical === null && selected !== null ? scanDeclaredBindings(this._scanRootOf(selected)) : [];\n if ((canonical?.length ?? 0) === 0 && legacy.length === 0) {\n body.append(this._emptyRow(\"no bindings observed\"));\n return;\n }\n const notice = document.createElement(\"div\");\n notice.className = \"notice\";\n const tag = document.createElement(\"span\");\n tag.className = \"badge-tag declared\";\n tag.textContent = canonical !== null ? \"declared (canonical)\" : \"declared\";\n notice.append(tag, document.createTextNode(\" attached late — reload to capture live bindings \"));\n const reload = document.createElement(\"button\");\n reload.textContent = \"reload\";\n reload.addEventListener(\"click\", () => {\n location.reload();\n });\n notice.append(reload);\n body.append(notice);\n if (canonical !== null) {\n for (const entry of canonical) {\n body.append(this._canonicalDeclaredRow(entry));\n }\n } else {\n for (const entry of legacy) {\n body.append(this._declaredRow(entry));\n }\n }\n }\n\n /**\n * カバレッジビュー: 宣言(watchPaths / token 宣言 / canonical declared)×\n * 実測(発火・emit・attach)の突合表。観測開始以降の実測であることを常時明示する\n * (protocol §6 — 台帳の過去は再構成できない)。\n */\n private _renderCoverageView(body: HTMLElement): void {\n const core = this._core!;\n const since = core.observingSince;\n const info = document.createElement(\"div\");\n // 壁時計表示(performance.now 原点からの換算)。「ページ内経過秒」だと\n // devtools を後から開いたときに観測開始点として読めない。\n const sinceLabel = since === null\n ? null\n : new Date(Date.now() - (performance.now() - since)).toLocaleTimeString();\n info.textContent = sinceLabel === null\n ? \"not observing\"\n : `observing since ${sinceLabel} (declared vs measured after this point)`;\n body.append(info);\n\n // 選択中のツリーでスコープ(複数ツリーの同名 watch パス / token 名を混ぜない —\n // wiring のパス文脈と同じ流儀。protocol v2 追補のツリー識別が実測面を分ける)\n const selected = this._selectedRoster();\n const report = core.getCoverageReport(selected?.summary.element);\n if (report.length === 0) {\n body.append(this._emptyRow(\"nothing declared to cover\"));\n return;\n }\n for (const entry of report) {\n const row = document.createElement(\"div\");\n row.className = \"wiring-row\";\n const kind = document.createElement(\"span\");\n kind.className = \"badge-tag\";\n kind.textContent = entry.kind;\n const status = document.createElement(\"span\");\n status.className = \"badge-tag\";\n status.textContent = entry.count > 1 ? `${entry.status} ×${entry.count}` : entry.status;\n if (entry.status === \"never\" || entry.status === \"never-attached\"\n || entry.status === \"emitted-unheard\") {\n // 「宣言したのに一度も効いていない」= このビューの主役。空撃ちも同列の warn\n status.classList.add(\"warn\");\n } else if (entry.status === \"prerequisite-missing\") {\n // 発火前提が未成立(未発火とは別問題)— declared 系の淡色で区別\n status.classList.add(\"declared\");\n }\n const label = document.createElement(\"span\");\n label.className = \"path\";\n label.textContent = ` ${entry.name} `;\n row.append(kind, document.createTextNode(\" \"), label, status);\n if (entry.note !== null) {\n // note はホバー頼み(title)にせず常時表示する — 前提未成立の理由は\n // このビューの本文情報で、ツールチップだと存在に気づけない\n const note = document.createElement(\"span\");\n note.className = \"detail\";\n note.textContent = ` ${entry.note}`;\n row.append(note);\n }\n body.append(row);\n }\n }\n\n /** canonical declared(正本パーサ由来・宣言集合)の 1 行。 */\n private _canonicalDeclaredRow(entry: IDeclaredBindingLike): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"wiring-row\";\n const type = document.createElement(\"span\");\n type.className = \"badge-tag declared\";\n type.textContent = entry.origin;\n const prop = document.createElement(\"span\");\n prop.className = \"prop\";\n prop.textContent = entry.propName;\n const path = document.createElement(\"span\");\n path.className = \"path\";\n const filters = entry.outFilters.map((f) => ` | ${f.filterName}(${f.args.join(\",\")})`).join(\"\");\n path.textContent = `${entry.statePathName}${filters}`;\n row.append(type, document.createTextNode(\" \"), prop, document.createTextNode(\" ← \"), path);\n if (entry.node !== null) {\n const target = entry.node;\n row.addEventListener(\"click\", () => {\n this._highlightNodes([target]);\n });\n }\n return row;\n }\n\n private _scanRootOf(entry: IRosterEntry): ParentNode {\n // instanceof はテスト環境(happy-dom)の Document 実体と一致しないことがあるため\n // nodeType で判定する(DOCUMENT_FRAGMENT_NODE は ShadowRoot を含む)\n const rootNode = entry.rootNode;\n if (\n rootNode.nodeType === Node.DOCUMENT_NODE ||\n rootNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE\n ) {\n return rootNode as unknown as ParentNode;\n }\n return document;\n }\n\n private _wiringRow(entry: IWiringEntry): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"wiring-row\";\n const prop = document.createElement(\"span\");\n prop.className = \"prop\";\n prop.textContent = entry.propName;\n const arrow = document.createTextNode(\" ← \");\n const path = document.createElement(\"span\");\n path.className = \"path\";\n path.textContent = entry.path;\n const type = document.createElement(\"span\");\n type.className = \"badge-tag\";\n type.textContent = entry.bindingType;\n row.append(type, document.createTextNode(\" \"), prop, arrow, path);\n row.addEventListener(\"click\", () => {\n const binding = entry.bindingRef.deref();\n if (binding !== undefined) {\n this._highlightNodes([binding.node, binding.replaceNode]);\n }\n });\n return row;\n }\n\n private _declaredRow(entry: IDeclaredBinding): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"wiring-row\";\n const type = document.createElement(\"span\");\n type.className = \"badge-tag declared\";\n type.textContent = entry.origin;\n const prop = document.createElement(\"span\");\n prop.className = \"prop\";\n prop.textContent = entry.propName;\n const path = document.createElement(\"span\");\n path.className = \"path\";\n path.textContent = entry.path;\n row.append(type, document.createTextNode(\" \"), prop, document.createTextNode(\" ← \"), path);\n row.addEventListener(\"click\", () => {\n this._highlightNodes([entry.element]);\n });\n return row;\n }\n\n private _renderTimelinePane(): void {\n const core = this._core!;\n const body = this._paneElements[\"timeline\"]!;\n const timeline = core.getTimeline();\n const start = Math.max(0, timeline.length - TIMELINE_RENDER_LIMIT);\n const rows: HTMLElement[] = [];\n if (start > 0) {\n rows.push(this._emptyRow(`…(${start} earlier entries)`));\n }\n for (let index = start; index < timeline.length; index++) {\n rows.push(this._timelineRow(timeline[index]));\n }\n if (rows.length === 0) {\n rows.push(this._emptyRow(\"no activity yet\"));\n }\n body.replaceChildren(...rows);\n body.scrollTop = body.scrollHeight;\n }\n\n private _timelineRow(entry: ITimelineEntry): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"timeline-row\";\n const time = document.createElement(\"span\");\n time.className = \"t\";\n time.textContent = `${(entry.time / 1000).toFixed(3)}s `;\n const kind = document.createElement(\"span\");\n kind.className = \"badge-tag kind\";\n kind.textContent = entry.kind;\n // subscriber 0 の command/event 空撃ちは警告表示(devtools-tag-design.md §3.2)\n if (entry.subscriberCount === 0) {\n kind.classList.add(\"warn\");\n kind.title = \"emitted with no subscribers\";\n }\n // `$watch` の失敗はランタイムが握って drain を守るため、ここが唯一の\n // 「気づける場所」になる。空撃ちと同じ warn 表示に乗せる。\n if (entry.kind === \"watch-error\" || entry.kind === \"watch-chain-limit\") {\n kind.classList.add(\"warn\");\n kind.title = entry.kind === \"watch-error\"\n ? \"a $watch or $scan failure (read, handler, fold or write — see the phase in the detail); the runtime isolated it (console.error only)\"\n : \"a $watch write chain hit the depth limit and was cut off\";\n }\n // 配線の死(解決しないパス)と隔離された適用失敗も、ランタイムが console に\n // 出すだけで続行する = 見ていなければ気づけない種類なので warn に乗せる。\n if (entry.kind === \"path-unresolved\" || entry.kind === \"binding-apply-error\") {\n kind.classList.add(\"warn\");\n kind.title = entry.kind === \"path-unresolved\"\n ? \"a wired path does not resolve on the state; its updates are dropped\"\n : \"a binding threw while applying; the runtime isolated it (console.error only)\";\n }\n // 伝播の打ち切りと契約 drift も「黙って起きる異常」なので warn に乗せる。\n // suppressed / coalesced は定常動作(エコー抑止・合流)のため通常表示。\n if (entry.kind === \"propagation-hop-limit\" || entry.kind === \"contract-drift\") {\n kind.classList.add(\"warn\");\n kind.title = entry.kind === \"propagation-hop-limit\"\n ? \"a two-way propagation chain hit the hop limit and was cut off\"\n : \"sidecar manifest drifted from the live wcBindable declaration (live wins)\";\n }\n const label = document.createElement(\"span\");\n label.className = \"label\";\n\n label.textContent = ` ${entry.label} `;\n const detail = document.createElement(\"span\");\n detail.className = \"detail\";\n detail.textContent = entry.detail;\n row.append(time, kind, label, detail);\n return row;\n }\n\n private _emptyRow(text: string): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"empty\";\n row.textContent = text;\n return row;\n }\n\n // --- highlight ---\n\n private _highlightPath(entry: IRosterEntry, path: string): void {\n const core = this._core!;\n const nodes: Node[] = [];\n for (const wiring of core.getWiringForPath(path, entry.summary.element)) {\n const binding = wiring.bindingRef.deref();\n if (binding !== undefined) {\n nodes.push(binding.node, binding.replaceNode);\n }\n }\n this._highlightNodes(nodes);\n }\n\n private _highlightNodes(nodes: readonly Node[]): void {\n // shadowRoot 構築後にしか呼ばれない(各リスナーは _buildShadow 内で配線される)\n const layer = this._highlightLayer!;\n layer.replaceChildren();\n const seen = new Set<Element>();\n for (const node of nodes) {\n const element = node instanceof Element ? node : node.parentElement;\n if (element === null || seen.has(element) || !element.isConnected) {\n continue;\n }\n seen.add(element);\n const rect = element.getBoundingClientRect();\n const box = document.createElement(\"div\");\n box.className = \"hl-box\";\n box.style.left = `${rect.left}px`;\n box.style.top = `${rect.top}px`;\n box.style.width = `${rect.width}px`;\n box.style.height = `${rect.height}px`;\n layer.append(box);\n }\n // 2 秒後に自動で消す(追従はしない — クリック時スナップショット表示)\n setTimeout(() => {\n layer.replaceChildren();\n }, 2000);\n }\n}\n","/**\n * bootstrapDevtools.ts\n *\n * `<wcs-devtools>` の登録と自動挿入(devtools-tag-design.md §2)。\n * - 既に定義済みなら再定義しない\n * - ページに `<wcs-devtools>` が無ければ body 末尾に 1 つ挿入\n * (手動で書かれていれば挿入しない)\n * - SSR では何もしない\n */\n\nimport { WcsDevtools } from \"./shell/WcsDevtools\";\n\nconst TAG_NAME = \"wcs-devtools\";\n\nfunction insertIfAbsent(): void {\n if (document.querySelector(TAG_NAME) !== null) {\n return;\n }\n document.body.appendChild(document.createElement(TAG_NAME));\n}\n\nexport function bootstrapDevtools(): void {\n if (document.documentElement.hasAttribute(\"data-wcs-server\")) {\n return;\n }\n if (!customElements.get(TAG_NAME)) {\n customElements.define(TAG_NAME, WcsDevtools);\n }\n if (document.body !== null) {\n insertIfAbsent();\n } else {\n document.addEventListener(\"DOMContentLoaded\", insertIfAbsent, { once: true });\n }\n}\n"],"names":[],"mappings":"AAAA;;;;;;;;;AASG;AAEH;AACO,MAAM,oBAAoB,GAAG;AAEpC;AACO,MAAM,yBAAyB,GAAG;;ACfzC;;;;;;;AAOG;AAUH,SAAS,qBAAqB,GAAA;AAC5B,IAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAA+B;AACtD,IAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAyB;AAClD,IAAA,MAAM,SAAS,GAAG,CAAC,MAA2B,KAAU;AACtD,QAAA,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE;AACxB,YAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACrB;QACF;AACA,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE;AAC1B,QAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,KAAI;AACxB,YAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;gBAChC,QAAQ,CAAC,OAAO,GAAG,QAAQ,EAAE,KAAK,CAAC;YACrC;AACF,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;IACD,OAAO;AACL,QAAA,OAAO,EAAE,yBAAyB;QAClC,OAAO;AACP,QAAA,QAAQ,CAAC,MAA2B,EAAA;YAClC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;gBAC1B;YACF;YACA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;YAC9B,SAAS,CAAC,MAAM,CAAC;AACjB,YAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,gBAAA,QAAQ,CAAC,kBAAkB,GAAG,MAAM,CAAC;YACvC;QACF,CAAC;AACD,QAAA,UAAU,CAAC,QAAgB,EAAA;YACzB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AACpC,YAAA,IAAI,MAAM,KAAK,SAAS,EAAE;gBACxB;YACF;AACA,YAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;AACrB,YAAA,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;AACxB,YAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,gBAAA,QAAQ,CAAC,oBAAoB,GAAG,QAAQ,CAAC;YAC3C;QACF,CAAC;AACD,QAAA,WAAW,CAAC,QAA+B,EAAA;AACzC,YAAA,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;YACvB,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE;gBACrC,SAAS,CAAC,MAAM,CAAC;AACjB,gBAAA,QAAQ,CAAC,kBAAkB,GAAG,MAAM,CAAC;YACvC;AACA,YAAA,OAAO,MAAK;gBACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;oBAC/B;gBACF;gBACA,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE;oBACrC,SAAS,CAAC,MAAM,CAAC;gBACnB;AACF,YAAA,CAAC;QACH,CAAC;KACF;AACH;SAEgB,uBAAuB,GAAA;IACrC,MAAM,OAAO,GAAG,UAAgD;AAChE,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAA0C;AACvF,IAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;AAC1B,QAAA,IAAI,QAAQ,CAAC,OAAO,KAAK,yBAAyB,EAAE;;YAElD,OAAO,CAAC,IAAI,CACV,CAAA,yDAAA,EAA4D,QAAQ,CAAC,OAAO,CAAA,WAAA,EAAc,yBAAyB,CAAA,6CAAA,CAA+C,CACnK;QACH;AACA,QAAA,OAAO,QAAQ;IACjB;AACA,IAAA,MAAM,QAAQ,GAAG,qBAAqB,EAAE;AACxC,IAAA,OAAO,CAAC,oBAAoB,CAAC,GAAG,QAAQ;AACxC,IAAA,OAAO,QAAQ;AACjB;;ACzFA;;;;;;;;;;;;AAYG;AAEH,MAAM,UAAU,GAAG,EAAE;AACrB,MAAM,SAAS,GAAG,CAAC;AAEnB,SAAS,aAAa,CAAC,KAAa,EAAA;IAClC,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC;IAC1C,OAAO,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI;AACrD;AAEA,SAAS,SAAS,CAAC,KAAa,EAAA;AAC9B,IAAA,MAAM,IAAI,GAAI,KAA6C,CAAC,WAAW;AACvE,IAAA,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI;AACvB,IAAA,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,QAAQ;AACtE;AAEA;;;;AAIG;SACa,WAAW,CAAC,KAAc,EAAE,QAAgB,CAAC,EAAA;IAC3D,QAAQ,OAAO,KAAK;QAClB,KAAK,QAAQ,EAAE;YACb,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,GAAG,GAAG,KAAK;YACjF,OAAO,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAG;QACpB;AACA,QAAA,KAAK,QAAQ;AACb,QAAA,KAAK,SAAS;AACd,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;AACzB,QAAA,KAAK,WAAW;AACd,YAAA,OAAO,WAAW;AACpB,QAAA,KAAK,UAAU;AACb,YAAA,OAAO,cAAc;;AAIzB,IAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,QAAA,OAAO,MAAM;IACf;IACA,MAAM,WAAW,GAAG,KAAe;AACnC,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AAC9B,QAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,YAAA,OAAO,CAAA,QAAA,EAAW,WAAW,CAAC,MAAM,KAAK;QAC3C;QACA,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AACzF,QAAA,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,GAAG,SAAS,GAAG,CAAA,IAAA,EAAO,WAAW,CAAC,MAAM,CAAA,CAAA,CAAG,GAAG,EAAE;QAC/E,OAAO,CAAA,CAAA,EAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAA,CAAA,CAAG;IACvC;AACA,IAAA,IAAI,aAAa,CAAC,WAAW,CAAC,EAAE;AAC9B,QAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,YAAA,OAAO,YAAY;QACrB;QACA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CACxC,CAAC,GAAG,KAAK,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,WAAW,CAAE,WAAuC,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA,CAAE,CAC5F;AACD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS,GAAG,CAAA,IAAA,EAAO,IAAI,CAAC,MAAM,CAAA,CAAA,CAAG,GAAG,EAAE;QACjE,OAAO,CAAA,CAAA,EAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAA,CAAA,CAAG;IACvC;;AAEA,IAAA,OAAO,KAAK,SAAS,CAAC,WAAW,CAAC,IAAI;AACxC;AAEA;;;;;;;AAOG;AACG,SAAU,WAAW,CAAC,KAAc,EAAA;IACxC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC/C,QAAA,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAA8C;AACxE,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC/B,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,KAAe,CAAC;YAC7F,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,GAAG,GAAG,OAAO;AACvF,YAAA,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAA,EAAG,KAAK,KAAK,IAAI,CAAA,CAAE,GAAG,KAAK;QACtD;IACF;AACA,IAAA,OAAO,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B;AAEA;;AAEG;AACG,SAAU,UAAU,CAAC,IAAwB,EAAA;AACjD,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,QAAA,OAAO,EAAE;IACX;AACA,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;QACjD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,GAAG,GAAG,IAAI;AAC1E,IAAA,CAAC,CAAC;AACF,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS,GAAG,CAAA,IAAA,EAAO,IAAI,CAAC,MAAM,CAAA,CAAA,CAAG,GAAG,EAAE;IACjE,OAAO,CAAA,EAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAA,CAAE;AACrC;;AChHA;;;;;;;;;;;;;AAaG;AAeH,MAAM,yBAAyB,GAAG,GAAG;AAiFrC;;AAEwC;AACxC,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;AAElC,SAAS,SAAS,CAAC,IAAY,EAAA;AAC7B,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,UAAU,CAAC,IAAY,EAAE,IAAY,EAAA;AAC5C,IAAA,OAAO,IAAI,GAAG,GAAG,GAAG,IAAI;AAC1B;AAEA;AACA,SAAS,WAAW,CAAC,IAAY,EAAE,QAAgB,EAAA;AACjD,IAAA,OAAO,IAAI,GAAG,GAAG,GAAG,QAAQ;AAC9B;AAEA;AACA,SAAS,WAAW,CAAC,QAAc,EAAA;IACjC,IAAI,OAAO,UAAU,KAAK,WAAW,IAAI,QAAQ,YAAY,UAAU,EAAE;QACvE,OAAO,CAAA,CAAA,EAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA,CAAA,CAAG;IACnD;IACA,IAAI,QAAQ,CAAC,QAAQ,KAAK,CAAC,sBAAsB;AAC/C,QAAA,OAAO,UAAU;IACnB;AACA,IAAA,OAAO,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE;AACxC;AAqBA;AACA,SAAS,eAAe,CACtB,IAA8B,EAC9B,IAAY,EACZ,IAAgC,EAAA;AAEhC,IAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,QAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;IAC9D;IACA,IAAI,IAAI,CAAC,mBAAmB,KAAK,IAAI,CAAC,KAAK,EAAE;QAC3C,OAAO;YACL,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK;AACxD,YAAA,IAAI,EAAE,CAAA,IAAA,EAAO,IAAI,CAAC,KAAK,CAAA,0BAAA,CAA4B;SACpD;IACH;IACA,OAAO;QACL,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK;AAChD,QAAA,IAAI,EAAE,IAAI,CAAC,mBAAmB,GAAG;cAC7B,GAAG,IAAI,CAAC,mBAAmB,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,CAAA,0BAAA;AAC3C,cAAE,IAAI;KACT;AACH;MAEa,YAAY,CAAA;AACf,IAAA,iBAAiB;IACjB,eAAe,GAAwB,IAAI;AAC3C,IAAA,QAAQ,GAAqC,IAAI,GAAG,EAAE;AACtD,IAAA,OAAO,GAAgC,IAAI,GAAG,EAAE;AAChD,IAAA,gBAAgB,GAAmC,IAAI,GAAG,EAAE;AAC5D,IAAA,qBAAqB,GAAwC,IAAI,OAAO,EAAE;IAC1E,SAAS,GAAqB,EAAE;IAChC,IAAI,GAAW,CAAC;IAChB,OAAO,GAAY,KAAK;AACxB,IAAA,gBAAgB,GAA4B,IAAI,GAAG,EAAE;;IAErD,eAAe,GAAkB,IAAI;AAC7C;;;;AAIqC;AAC7B,IAAA,gBAAgB,GAAiC,IAAI,GAAG,EAAE;;AAE1D,IAAA,eAAe,GAAiC,IAAI,GAAG,EAAE;AACjE;;;AAGoD;AAC5C,IAAA,iBAAiB,GAAgB,IAAI,GAAG,EAAE;AAElD,IAAA,WAAA,CAAY,OAA8B,EAAA;QACxC,IAAI,CAAC,iBAAiB,GAAG,OAAO,EAAE,gBAAgB,IAAI,yBAAyB;IACjF;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,eAAe,KAAK,IAAI;IACtC;AAEA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;IACrB;IAEA,IAAI,MAAM,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;IACtB;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE;YACjC;QACF;;;AAGA,QAAA,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;AACxC,QAAA,MAAM,QAAQ,GAAG,uBAAuB,EAAE;AAC1C,QAAA,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,WAAW,CAAC;AAC1C,YAAA,kBAAkB,EAAE,CAAC,MAAM,KAAI;gBAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;AACpC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;AAC7B,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YACzB,CAAC;AACD,YAAA,oBAAoB,EAAE,CAAC,QAAQ,KAAI;AACjC,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC9B,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC7B,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;AACvB,gBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;YACxB,CAAC;AACD,YAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAI;AAC3B,gBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC;YAC/B,CAAC;AACF,SAAA,CAAC;IACJ;;IAGA,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE;YACjC;QACF;QACA,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACrB,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAC7B,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,OAAO,EAAE;AAC1C,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAC7B,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAC5B,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;AAC9B,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AACtB,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AACtB,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;IAC1B;;AAGA,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,eAAe;IAC7B;AAEA,IAAA,QAAQ,CAAC,QAA4B,EAAA;AACnC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACnC,QAAA,OAAO,MAAK;AACV,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC;AACxC,QAAA,CAAC;IACH;IAEA,UAAU,GAAA;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IACpC;IAEA,SAAS,GAAA;QACP,MAAM,OAAO,GAAmB,EAAE;QAClC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AACxC,YAAA,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACvB;AACA,QAAA,OAAO,OAAO;IAChB;;IAGA,aAAa,GAAA;QACX,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE;AAC3C,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC/B;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IACxB;IAEA,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,SAAS;IACvB;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;IAC1B;AAEA;;;;;AAKG;IACH,gBAAgB,CAAC,IAAY,EAAE,YAAsB,EAAA;AACnD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtD,QAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACrB,YAAA,OAAO,EAAE;QACX;QACA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;AACrC,QAAA,IAAI,YAAY,KAAK,SAAS,EAAE;AAC9B,YAAA,OAAO,KAAK;QACd;QACA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,KACxB,KAAK,CAAC,eAAe,KAAK,IAAI,IAAI,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,YAAY,CAAC;IACrF;;IAGA,YAAY,GAAA;QACV,MAAM,MAAM,GAAmB,EAAE;QACjC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE;YAChD,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACzC;AACA,QAAA,OAAO,MAAM;IACf;;AAGA,IAAA,gBAAgB,CAAC,IAAU,EAAA;QACzB,MAAM,MAAM,GAAmB,EAAE;QACjC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE;YAChD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;gBAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,EAAG;AACzC,gBAAA,IACE,OAAO,CAAC,IAAI,KAAK,IAAI;oBACrB,OAAO,CAAC,WAAW,KAAK,IAAI;AAC5B,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;oBAC3B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,EAClC;AACA,oBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;gBACpB;YACF;QACF;AACA,QAAA,OAAO,MAAM;IACf;AAEA;;;;;AAKG;IACH,oBAAoB,GAAA;QAClB,IAAI,SAAS,GAAG,KAAK;QACrB,MAAM,GAAG,GAA2B,EAAE;;AAEtC,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;QAC9B,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC9C,YAAA,IAAI,OAAO,MAAM,CAAC,mBAAmB,KAAK,UAAU,EAAE;gBACpD;YACF;YACA,SAAS,GAAG,IAAI;AAChB,YAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAQ;AAC7B,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE;AACpD,gBAAA,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC3B;AACA,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE;oBACvD,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,QAAQ;AACpD,wBAAA,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAChE,oBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;wBACjB;oBACF;AACA,oBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACb,oBAAA,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACpB;YACF;QACF;QACA,OAAO,SAAS,GAAG,GAAG,GAAG,IAAI;IAC/B;AAEA;;;;;;;;;;;AAWG;AACH,IAAA,iBAAiB,CAAC,YAAsB,EAAA;QACtC,MAAM,GAAG,GAAqB,EAAE;QAEhC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpC,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;YAC7B,IAAI,YAAY,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,KAAK,YAAY,EAAE;gBAClE;YACF;;YAEA,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,UAAU,IAAI,EAAE,EAAE;gBAC3C,MAAM,KAAK,GACT,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC;AACxF,gBAAA,IAAI,KAAK,GAAG,CAAC,EAAE;oBACb,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;oBAC3E;gBACF;;;;;;;;;AASA,gBAAA,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,KAAK,SAAS;gBACvD,IAAI,WAAW,GAAkB,IAAI;AACrC,gBAAA,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE,EAAE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE;oBACpF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;oBACpC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ;4BAC3C,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC;oBACrD,IAAI,CAAC,SAAS,EAAE;wBACd,WAAW,GAAG,QAAQ;wBACtB;oBACF;gBACF;AACA,gBAAA,IAAI,WAAW,KAAK,IAAI,EAAE;oBACxB,GAAG,CAAC,IAAI,CAAC;AACP,wBAAA,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;AACnE,wBAAA,IAAI,EAAE;8BACF,CAAA,MAAA,EAAS,WAAW,CAAA,qIAAA;8BACpB,CAAA,kCAAA,EAAqC,WAAW,CAAA,+DAAA,CAAiE;AACtH,qBAAA,CAAC;oBACF;gBACF;gBACA,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAChF;;;;AAIA,YAAA,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,iBAAiB,EAAE;AAC5C,gBAAA,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,EACtC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3F;AACA,YAAA,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,eAAe,EAAE;AAC1C,gBAAA,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,IAAI,EACzC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YACzF;QACF;;;AAIA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAC5C,QAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAC9B,YAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;;gBAE3B,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,IAAI,IAAI,CAAC,WAAW,KAAK;uBAClD,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM;oBAAE;AACnE,gBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC;oBAAE;AAC7C,gBAAA,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC;AAC1D,gBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE;AACnB,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;;;gBAGb,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC;gBAChD,GAAG,CAAC,IAAI,CAAC;AACP,oBAAA,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAA,GAAA,EAAM,IAAI,CAAC,aAAa,CAAA,CAAE;oBAChD,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,gBAAgB;oBAChD,KAAK,EAAE,QAAQ,GAAG,CAAC,GAAG,CAAC;AACvB,oBAAA,IAAI,EAAE,IAAI,CAAC,MAAM,KAAK,UAAU,GAAG,oDAAoD,GAAG,IAAI;AAC/F,iBAAA,CAAC;YACJ;QACF;AAEA,QAAA,OAAO,GAAG;IACZ;;AAGA,IAAA,MAAM,CAAC,KAAmB,EAAA;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QAChD,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;AAC7D,YAAA,OAAO,EAAE;QACX;QACA,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IACpC;AAEA;;;;AAIG;AACH,IAAA,UAAU,CAAC,KAAmB,EAAA;AAC5B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QAChD,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE;AACjE,YAAA,OAAO,IAAI;QACb;QACA,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;IACxC;AAEA;;;AAGG;AACH,IAAA,oBAAoB,CAAC,KAAmB,EAAA;AACtC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QAChD,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,kBAAkB,KAAK,UAAU,EAAE;AAC3E,YAAA,OAAO,IAAI;QACb;QACA,OAAO,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC;IAClD;AAEA,IAAA,SAAS,CAAC,KAAmB,EAAE,IAAY,EAAE,OAAkB,EAAA;AAC7D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;AAChD,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC;IACnD;AAEA,IAAA,UAAU,CAAC,KAAmB,EAAE,IAAY,EAAE,KAAc,EAAE,OAAkB,EAAA;AAC9E,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;AAChD,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB;QACF;AACA,QAAA,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC;IACpD;;AAIQ,IAAA,OAAO,CAAC,IAAoB,EAAA;AAClC,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE;YAC5C,QAAQ,CAAC,IAAI,CAAC;QAChB;IACF;AAEQ,IAAA,gBAAgB,CAAC,MAA2B,EAAA;QAClD,MAAM,OAAO,GAAmB,EAAE;AAClC,QAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB;QAC7C,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,gBAAgB,EAAE,EAAE;YAC/C,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC1C,YAAA,MAAM,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7C,YAAA,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ,EAAE,MAAM,CAAC,EAAE;AACnB,gBAAA,KAAK,EAAE,IAAI,KAAK,CAAC,GAAG,IAAI,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE;gBAC5C,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,OAAO;AACR,aAAA,CAAC;QACJ;QACA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC;IACtC;AAEA;;;;AAIG;AACK,IAAA,QAAQ,CAAC,GAAiC,EAAE,GAAW,EAAE,YAAqB,EAAA;QACpF,IAAI,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AAC1B,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,OAAO,GAAG,EAAE;AACZ,YAAA,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC;QACvB;AACA,QAAA,MAAM,OAAO,GAAG,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,IAAI,GAAG,YAAY,GAAG,IAAI;AAC/F,QAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;YAC3B,IAAI,OAAO,KAAK,IAAI,GAAG,KAAK,CAAC,eAAe,KAAK,IAAI,GAAG,KAAK,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,OAAO,EAAE;AAClG,gBAAA,OAAO,KAAK;YACd;QACF;AACA,QAAA,MAAM,OAAO,GAAkB;AAC7B,YAAA,eAAe,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;AAC/D,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,mBAAmB,EAAE,CAAC;SACvB;AACD,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;AACrB,QAAA,OAAO,OAAO;IAChB;AAEA;;;;;AAKG;AACK,IAAA,YAAY,CAClB,GAAiC,EACjC,GAAW,EACX,OAAgB,EAAA;QAEhB,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AAC5B,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,YAAA,OAAO,SAAS;QAClB;QACA,IAAI,KAAK,GAAG,CAAC;QACb,IAAI,mBAAmB,GAAG,CAAC;AAC3B,QAAA,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,eAAe;YACtC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,SAAS,EAAE;AAC7C,gBAAA,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;gBACpB;YACF;YACA,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,OAAO,EAAE;AAC3C,gBAAA,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK;AACzB,gBAAA,mBAAmB,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,mBAAmB;YACvD;QACF;AACA,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACxB,YAAA,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;QACjB;AACA,QAAA,OAAO,KAAK,KAAK,CAAC,GAAG,SAAS,GAAG,EAAE,KAAK,EAAE,mBAAmB,EAAE;IACjE;AAEQ,IAAA,aAAa,CAAC,GAAsB,EAAA;QAC1C,MAAM,KAAK,GAAmB,EAAE;AAChC,QAAA,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE;YACvB,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,SAAS,EAAE;;AAE1C,gBAAA,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;gBACjB;YACF;AACA,YAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QACnB;AACA,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,eAAe,CAAC,KAA2C,EAAA;AACjE,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB;QACF;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAClB,YAAA,GAAG,KAAK;AACR,YAAA,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE;AAChB,YAAA,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE;AACxB,SAAA,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB;AAC/D,QAAA,IAAI,QAAQ,GAAG,CAAC,EAAE;YAChB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC;QACpC;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;IAC1B;AAEQ,IAAA,QAAQ,CAAC,OAA6B,EAAA;AAC5C,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO;QAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI;QACnD,OAAO,OAAO,KAAK,SAAS,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,GAAG,IAAI;IACvE;IAEQ,OAAO,CAAC,QAAgB,EAAE,KAAwB,EAAA;AACxD,QAAA,QAAQ,KAAK,CAAC,IAAI;YAChB,KAAK,0BAA0B,EAAE;gBAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC1C,gBAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,oBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;AAC7B,oBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACxB;gBACA,IAAI,CAAC,eAAe,CAAC;oBACnB,QAAQ;AACR,oBAAA,IAAI,EAAE,oBAAoB;AAC1B,oBAAA,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC;AAClC,oBAAA,MAAM,EAAE,EAAE;AACV,oBAAA,eAAe,EAAE,IAAI;AACtB,iBAAA,CAAC;gBACF;YACF;YACA,KAAK,4BAA4B,EAAE;gBACjC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC1C,gBAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,oBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;AAC7B,oBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACxB;gBACA,IAAI,CAAC,eAAe,CAAC;oBACnB,QAAQ;AACR,oBAAA,IAAI,EAAE,sBAAsB;AAC5B,oBAAA,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC;AAClC,oBAAA,MAAM,EAAE,EAAE;AACV,oBAAA,eAAe,EAAE,IAAI;AACtB,iBAAA,CAAC;gBACF;YACF;YACA,KAAK,aAAa,EAAE;AAClB,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC;AACnB,sBAAE,CAAA,EAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA,MAAA,EAAS,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA,CAAA;AACjE,sBAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC5B,IAAI,CAAC,eAAe,CAAC;oBACnB,QAAQ;AACR,oBAAA,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC;oBAC3C,MAAM;AACN,oBAAA,eAAe,EAAE,IAAI;AACtB,iBAAA,CAAC;gBACF;YACF;YACA,KAAK,oBAAoB,EAAE;gBACzB,MAAM,MAAM,GAAa,EAAE;gBAC3B,IAAI,KAAK,GAAG,CAAC;AACb,gBAAA,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,SAAS,EAAE;AACrC,oBAAA,KAAK,EAAE;AACP,oBAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;wBACrB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;oBACrC;gBACF;AACA,gBAAA,IAAI,KAAK,KAAK,CAAC,EAAE;oBACf;gBACF;AACA,gBAAA,MAAM,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,OAAO,KAAK,CAAA,CAAA,CAAG,GAAG,EAAE;gBACzD,IAAI,CAAC,eAAe,CAAC;oBACnB,QAAQ;AACR,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,KAAK,EAAE,CAAA,EAAG,KAAK,CAAA,QAAA,EAAW,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA,CAAE;oBACnD,MAAM,EAAE,CAAA,EAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAA,CAAE;AACrC,oBAAA,eAAe,EAAE,IAAI;AACtB,iBAAA,CAAC;gBACF;YACF;YACA,KAAK,qBAAqB,EAAE;gBAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,eAAe,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI;AACjE,gBAAA,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC;gBAC3B,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;AACxC,gBAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACrB,oBAAA,GAAG,GAAG,IAAI,GAAG,EAAE;oBACf,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;gBACrC;gBACA,MAAM,YAAY,GAAG,KAAK,CAAC,eAAe,CAAC,gBAAgB,CAAC,YAAY;AACxE,gBAAA,MAAM,KAAK,GAAiB;oBAC1B,QAAQ;oBACR,IAAI;AACJ,oBAAA,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ;AAChC,oBAAA,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW;AACtC,oBAAA,UAAU,EAAE,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;oBACtC,eAAe,EAAE,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK;AACpE,0BAAE,IAAI,OAAO,CAAC,YAAY;AAC1B,0BAAE,IAAI;iBACT;AACD,gBAAA,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;gBACd,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;;AAEpD,gBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACrE,gBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AACtB,gBAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;gBACxB;YACF;YACA,KAAK,uBAAuB,EAAE;AAC5B,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;AAC3D,gBAAA,IAAI,KAAK,KAAK,SAAS,EAAE;oBACvB;gBACF;gBACA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;gBAChD,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;gBACjC,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;AAC1C,gBAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACrB,oBAAA,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;AACjB,oBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE;AAClB,wBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC;oBACnC;gBACF;AACA,gBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACtB;YACF;YACA,KAAK,uBAAuB,EAAE;gBAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,eAAe,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI;AACjE,gBAAA,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC;gBAC3B,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;AACrC,oBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACxB;gBACA;YACF;YACA,KAAK,kBAAkB,EAAE;;;;gBAIvB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CACxB,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;AACpF,gBAAA,IAAI,CAAC,KAAK,IAAI,CAAC;AACf,gBAAA,IAAI,KAAK,CAAC,eAAe,KAAK,CAAC,EAAE;AAC/B,oBAAA,IAAI,CAAC,mBAAmB,IAAI,CAAC;gBAC/B;AACA,gBAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;gBACxB,IAAI,CAAC,eAAe,CAAC;oBACnB,QAAQ;oBACR,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,KAAK,EAAE,KAAK,CAAC,SAAS;AACtB,oBAAA,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;oBAC9B,eAAe,EAAE,KAAK,CAAC,eAAe;AACvC,iBAAA,CAAC;gBACF;YACF;YACA,KAAK,mBAAmB,EAAE;;;gBAGxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,KAAK,IAAI,CAAC;AAC1F,gBAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;gBACxB;YACF;YACA,KAAK,mBAAmB,EAAE;;;;gBAIxB,IAAI,CAAC,eAAe,CAAC;oBACnB,QAAQ;AACR,oBAAA,IAAI,EAAE,aAAa;oBACnB,KAAK,EAAE,KAAK,CAAC,IAAI;AACjB,oBAAA,MAAM,EAAE,CAAA,EAAG,KAAK,CAAC,KAAK,CAAA,EAAA,EAAK,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA,CAAE;AACrD,oBAAA,eAAe,EAAE,IAAI;AACtB,iBAAA,CAAC;gBACF;YACF;YACA,KAAK,yBAAyB,EAAE;gBAC9B,IAAI,CAAC,eAAe,CAAC;oBACnB,QAAQ;AACR,oBAAA,IAAI,EAAE,mBAAmB;;AAEzB,oBAAA,KAAK,EAAE,CAAA,QAAA,EAAW,KAAK,CAAC,QAAQ,CAAA,CAAE;oBAClC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,oBAAA,eAAe,EAAE,IAAI;AACtB,iBAAA,CAAC;gBACF;YACF;YACA,KAAK,uBAAuB,EAAE;;;gBAG5B,IAAI,CAAC,eAAe,CAAC;oBACnB,QAAQ;AACR,oBAAA,IAAI,EAAE,iBAAiB;oBACvB,KAAK,EAAE,KAAK,CAAC,IAAI;oBACjB,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAA,GAAA,EAAM,KAAK,CAAC,cAAc,CAAA,iBAAA,CAAmB;AACpE,oBAAA,eAAe,EAAE,IAAI;AACtB,iBAAA,CAAC;gBACF;YACF;YACA,KAAK,2BAA2B,EAAE;;;gBAGhC,IAAI,CAAC,eAAe,CAAC;oBACnB,QAAQ;AACR,oBAAA,IAAI,EAAE,qBAAqB;oBAC3B,KAAK,EAAE,KAAK,CAAC,IAAI;AACjB,oBAAA,MAAM,EAAE,CAAA,EAAG,KAAK,CAAC,WAAW,CAAA,EAAA,EAAK,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA,CAAE;AAC3D,oBAAA,eAAe,EAAE,IAAI;AACtB,iBAAA,CAAC;gBACF;YACF;YACA,KAAK,wBAAwB,EAAE;;gBAE7B,IAAI,CAAC,eAAe,CAAC;oBACnB,QAAQ;AACR,oBAAA,IAAI,EAAE,wBAAwB;oBAC9B,KAAK,EAAE,KAAK,CAAC,MAAM;AACnB,oBAAA,MAAM,EAAE,CAAA,EAAG,KAAK,CAAC,MAAM,CAAA,KAAA,EAAQ,KAAK,CAAC,aAAa,CAAA,OAAA,EAAU,KAAK,CAAC,MAAM,CAAA,CAAA,CAAG;AAC3E,oBAAA,eAAe,EAAE,IAAI;AACtB,iBAAA,CAAC;gBACF;YACF;YACA,KAAK,uBAAuB,EAAE;gBAC5B,IAAI,CAAC,eAAe,CAAC;oBACnB,QAAQ;AACR,oBAAA,IAAI,EAAE,uBAAuB;oBAC7B,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC;oBAC3C,MAAM,EAAE,MAAM,KAAK,CAAC,oBAAoB,CAAA,oBAAA,EAAuB,KAAK,CAAC,mBAAmB,CAAA,CAAA,CAAG;AAC3F,oBAAA,eAAe,EAAE,IAAI;AACtB,iBAAA,CAAC;gBACF;YACF;YACA,KAAK,uBAAuB,EAAE;gBAC5B,IAAI,CAAC,eAAe,CAAC;oBACnB,QAAQ;AACR,oBAAA,IAAI,EAAE,uBAAuB;oBAC7B,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC;oBAC3C,MAAM,EAAE,OAAO,KAAK,CAAC,GAAG,CAAA,KAAA,EAAQ,KAAK,CAAC,aAAa,CAAA,CAAA,CAAG;AACtD,oBAAA,eAAe,EAAE,IAAI;AACtB,iBAAA,CAAC;gBACF;YACF;YACA,KAAK,gBAAgB,EAAE;;;;AAIrB,gBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,GAAG,CAAA,EAAA,EAAK,KAAK,CAAC,MAAM,CAAA,CAAE,GAAG,EAAE;AACxE,gBAAA,MAAM,SAAS,GACb,KAAK,CAAC,MAAM,KAAK;AACf,sBAAE,CAAA,UAAA,EAAa,KAAK,CAAC,YAAY,IAAI,GAAG,CAAA,QAAA,EAAW,KAAK,CAAC,SAAS,IAAI,GAAG,CAAA,CAAA;sBACvE,EAAE;gBACR,IAAI,CAAC,eAAe,CAAC;oBACnB,QAAQ;AACR,oBAAA,IAAI,EAAE,gBAAgB;oBACtB,KAAK,EAAE,KAAK,CAAC,GAAG;oBAChB,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAA,EAAG,UAAU,CAAA,EAAG,SAAS,CAAA,CAAE;AAClD,oBAAA,eAAe,EAAE,IAAI;AACtB,iBAAA,CAAC;gBACF;YACF;AACA,YAAA,KAAK,wBAAwB;YAC7B,KAAK,gCAAgC,EAAE;;;;gBAIrC;YACF;;IAQJ;AACD;;ACz5BD;;;;;;;;;;;;;AAaG;AAaH,MAAM,sBAAsB,GAAG,UAAU;AACzC,MAAM,gBAAgB,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC;AAEpF,SAAS,UAAU,CACjB,OAAgB,EAChB,GAAW,EACX,MAA+B,EAAA;AAE/B,IAAA,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE;AAC1B,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACxB,QAAA,OAAO,IAAI;IACb;IACA,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;AAClC,IAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE;AAC/C,IAAA,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;AAC3C,IAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7C,QAAA,OAAO,IAAI;IACb;IACA,MAAM,CAAC,QAAQ,EAAE,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;;;IAG5E,MAAM,IAAI,GAAG,QAAQ;IACrB,OAAO;QACL,OAAO;QACP,QAAQ;QACR,IAAI;AACJ,QAAA,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACtD,MAAM;AACN,QAAA,GAAG,EAAE,OAAO;KACb;AACH;AAEA;;;;AAIG;SACa,oBAAoB,CAClC,IAAgB,EAChB,oBAA4B,sBAAsB,EAAA;IAElD,MAAM,MAAM,GAAuB,EAAE;;AAGrC,IAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAA,CAAA,EAAI,iBAAiB,CAAA,CAAA,CAAG,CAAC,EAAE;;QAErE,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAE;QACpD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACjC,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC;AACpD,YAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YACpB;QACF;IACF;;AAGA,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,IAAK,IAAiB;AACzD,IAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAY,EAAE,UAAU,CAAC,YAAY,CAAC;AAC/E,IAAA,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE;AAC/B,IAAA,OAAO,OAAO,KAAK,IAAI,EAAE;;QAEvB,MAAM,IAAI,GAAG,OAAO,CAAC,WAAY,CAAC,IAAI,EAAE;QACxC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAClC,CAAC,SAAS,KAAK,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,GAAG,CAAC,CACtE;AACD,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,YAAA,MAAM,aAAa,GACjB,OAAO,CAAC,UAAU,YAAY,OAAO,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI;AACnE,YAAA,IAAI,aAAa,KAAK,IAAI,EAAE;gBAC1B,MAAM,IAAI,GAAG,IAAI,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;AACxE,gBAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;oBACnB,MAAM,QAAQ,GAAG,MAAM,KAAK,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;;AAEpF,oBAAA,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAA,EAAG,QAAQ,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,EAAE,SAAS,CAAE,CAAC;gBAC5E;YACF;QACF;AACA,QAAA,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE;IAC7B;AAEA,IAAA,OAAO,MAAM;AACf;;AC9GA;;;;;;;;;;;;;AAaG;AAOH,MAAM,UAAU,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6G5B;AAID;AACA,MAAM,qBAAqB,GAAG,GAAG;AACjC;AACA,MAAM,gBAAgB,GAAG,EAAE;AAO3B,SAAS,SAAS,CAAC,GAAiB,EAAA;AAClC,IAAA,OAAO,CAAA,EAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAC/C;AAEA,SAAS,YAAY,CAAC,KAAc,EAAA;AAClC,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,QAAA,OAAO,IAAI;IACb;IACA,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC/C,QAAA,OAAO,KAAK;IACd;IACA,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC;IAC1C,OAAO,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI;AACrD;AAEA,SAAS,WAAW,CAAC,IAAY,EAAA;AAC/B,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;AAC3B,IAAA,IAAI;AACF,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IAC5B;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,IAAI;IACb;AACF;AAEM,MAAO,WAAY,SAAQ,WAAW,CAAA;AAC1C,IAAA,WAAW,kBAAkB,GAAA;AAC3B,QAAA,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC;IACnC;IAEQ,KAAK,GAAwB,IAAI;IACjC,mBAAmB,GAAwB,IAAI;IAC/C,MAAM,GAAuB,IAAI;IACjC,MAAM,GAA6B,IAAI;IACvC,YAAY,GAA6B,IAAI;IAC7C,aAAa,GAA2C,EAAE;;IAE1D,WAAW,GAA0B,QAAQ;IAC7C,eAAe,GAAuB,IAAI;AAC1C,IAAA,WAAW,GAAkB,IAAI,GAAG,EAAE;IACtC,gBAAgB,GAAY,KAAK;IACjC,kBAAkB,GAAkB,IAAI;IACxC,aAAa,GAAkB,IAAI;IACnC,WAAW,GAAgB,IAAI;IAC/B,SAAS,GAAY,KAAK;AAC1B,IAAA,SAAS,GAAgB,IAAI,GAAG,EAAE;IAClC,cAAc,GAA4C,IAAI;IAC9D,YAAY,GAAyC,IAAI;AAEjE,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;IAEA,iBAAiB,GAAA;;QAEf,IAAI,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE;YAC5D;QACF;AACA,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;YAC5B,IAAI,CAAC,YAAY,EAAE;QACrB;AACA,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC1D,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,CAAC;AAC5B,YAAA,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,SAAS;AACnF,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAI;YACtD,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,EAAE;AAC3C,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AACxB,gBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC3B;AAAO,iBAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AAC5B,gBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC3B;AAAO,iBAAA,IAAI,IAAI,KAAK,UAAU,EAAE;;AAE9B,gBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,EAAE;AACnC,oBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAC3B;YACF;iBAAO;AACL,gBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAC7B;AACF,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;QACpB,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;IAC7B;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,mBAAmB,IAAI;AAC5B,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,QAAA,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACjB,IAAI,CAAC,gBAAgB,EAAE;QACvB,IAAI,CAAC,aAAa,EAAE;IACtB;AAEA,IAAA,wBAAwB,CAAC,IAAY,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;YAC5B;QACF;AACA,QAAA,IAAI,IAAI,KAAK,MAAM,EAAE;YACnB,IAAI,CAAC,UAAU,EAAE;QACnB;AAAO,aAAA,IAAI,IAAI,KAAK,MAAM,EAAE;YAC1B,IAAI,CAAC,UAAU,EAAE;QACnB;AAAO,aAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;YAC5B,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,cAAc,EAAE;QACvB;IACF;;IAGA,oBAAoB,GAAA;QAClB,IAAI,CAAC,YAAY,EAAE;IACrB;;IAIQ,YAAY,GAAA;AAClB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,QAAA,KAAK,CAAC,WAAW,GAAG,UAAU;AAC9B,QAAA,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAEpB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC9C,QAAA,KAAK,CAAC,SAAS,GAAG,OAAO;AACzB,QAAA,KAAK,CAAC,KAAK,GAAG,kBAAkB;AAChC,QAAA,KAAK,CAAC,WAAW,GAAG,KAAK;AACzB,QAAA,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;AACpD,QAAA,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QAEnB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC3C,QAAA,KAAK,CAAC,SAAS,GAAG,mBAAmB;AACrC,QAAA,KAAK,CAAC,MAAM,GAAG,IAAI;QAEnB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;QAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC5C,QAAA,KAAK,CAAC,SAAS,GAAG,OAAO;AACzB,QAAA,KAAK,CAAC,WAAW,GAAG,kBAAkB;AACtC,QAAA,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAEpB,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AACpD,QAAA,WAAW,CAAC,KAAK,GAAG,eAAe;AACnC,QAAA,WAAW,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAK;YAC1C,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC,KAAK,IAAI,IAAI;AACnD,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACtB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AACxB,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;AAC3B,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW;AAE/B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,qBAAqB,CAAC;AAC9E,QAAA,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAK;AACxC,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,aAAa,EAAE;YACtB;iBAAO;gBACL,IAAI,CAAC,cAAc,EAAE;YACvB;AACA,YAAA,UAAU,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACjE,QAAA,CAAC,CAAC;AACF,QAAA,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM;AAEnC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,gBAAgB,CAAC;AACrE,QAAA,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAK;AACzC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;AACvB,YAAA,IAAI,IAAI,KAAK,IAAI,EAAE;gBACjB;YACF;AACA,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM;AAC1B,YAAA,WAAW,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/D,QAAA,CAAC,CAAC;AACF,QAAA,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO;AAErC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,gBAAgB,CAAC;AACtE,QAAA,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAK;AACzC,YAAA,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE;AAC7B,QAAA,CAAC,CAAC;AACF,QAAA,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO;QAErC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC7C,QAAA,MAAM,CAAC,SAAS,GAAG,QAAQ;AAC3B,QAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AAErB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,sBAAsB,CAAC;AAC7E,QAAA,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAK;YACxC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,QAAQ,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ;AACtF,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC;AACjC,QAAA,CAAC,CAAC;AACF,QAAA,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM;AAEnC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;AAC5D,QAAA,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/D,QAAA,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO;AAErC,QAAA,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QAEpB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC3C,QAAA,KAAK,CAAC,SAAS,GAAG,OAAO;AACzB,QAAA,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI;YAC5B,CAAC,OAAO,EAAE,OAAO,CAAC;YAClB,CAAC,QAAQ,EAAE,QAAQ,CAAC;YACpB,CAAC,UAAU,EAAE,UAAU,CAAC;AAChB,SAAA,EAAE;YACV,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC;AAC9C,YAAA,IAAI,CAAC,SAAS,GAAG,CAAA,UAAA,EAAa,IAAI,EAAE;YACpC,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AACvC,YAAA,EAAE,CAAC,WAAW,GAAG,OAAO;YACxB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,YAAA,IAAI,CAAC,SAAS,GAAG,WAAW;AAC5B,YAAA,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC;AACrB,YAAA,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;AAClB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI;QACjC;AACA,QAAA,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AACnB,QAAA,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QAEnB,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACpD,QAAA,cAAc,CAAC,SAAS,GAAG,UAAU;AACrC,QAAA,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;AAC7B,QAAA,IAAI,CAAC,eAAe,GAAG,cAAc;IACvC;AAEQ,IAAA,aAAa,CAAC,MAAmB,EAAE,KAAa,EAAE,KAAa,EAAA;QACrE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,QAAA,MAAM,CAAC,WAAW,GAAG,KAAK;AAC1B,QAAA,MAAM,CAAC,KAAK,GAAG,KAAK;AACpB,QAAA,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC;AAC5C,QAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AACrB,QAAA,OAAO,MAAM;IACf;;AAIA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IAClC;AAEA,IAAA,MAAM,CAAC,KAAe,EAAA;QACpB,MAAM,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI;QAChC,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;QAC/B;aAAO;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;QAC9B;IACF;IAEQ,UAAU,GAAA;;QAEhB,IAAI,CAAC,MAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI;QAChC,IAAI,CAAC,MAAO,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI;AAC/B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AACxB,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;AACzB,YAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAC7B;IACF;IAEQ,UAAU,GAAA;;AAEhB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,OAAO,GAAG,OAAO,GAAG,QAAQ;AACvE,QAAA,IAAI,CAAC,MAAO,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,KAAK,OAAO,CAAC;AAC7D,QAAA,IAAI,CAAC,MAAO,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,KAAK,QAAQ,CAAC;IACjE;IAEQ,cAAc,GAAA;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,aAAa;AACzD,QAAA,IAAI,IAAI,KAAK,MAAM,EAAE;YACnB;QACF;QACA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACtE,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;AACnC,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,KAAoB,KAAI;AAC7C,YAAA,IACE,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG;gBAC/B,KAAK,CAAC,MAAM,KAAK,GAAG;gBACpB,KAAK,CAAC,QAAQ,KAAK,KAAK;gBACxB,KAAK,CAAC,OAAO,KAAK,IAAI;AACtB,gBAAA,KAAK,CAAC,OAAO,KAAK,IAAI,EACtB;gBACA,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,MAAM,EAAE;YACf;AACF,QAAA,CAAC;QACD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC;IACzD;IAEQ,gBAAgB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE;YAChC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC;AAC1D,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC5B;IACF;;IAIQ,cAAc,GAAA;;AAEpB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;;AAErB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,KAAiB,KAAI;AACxC,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAc;;;AAGnC,YAAA,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,UAAU,IAAI,MAAM,KAAK,IAAI,EAAE;gBAC/D;YACF;YACA,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;AACvB,YAAA,IAAI,CAAC,WAAW,GAAG,MAAM;AACzB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;YACzB,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;AAC3B,QAAA,CAAC;AACD,QAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC1E;IAEQ,aAAa,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE;AAC9B,YAAA,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3E,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAC1B;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,0BAA0B,CAAC;AAC7E,QAAA,UAAU,EAAE,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC;IACnD;;AAIQ,IAAA,UAAU,CAAC,IAAc,EAAA;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB;QACF;AACA,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAC5B,qBAAqB,CAAC,MAAK;YACzB,IAAI,CAAC,YAAY,EAAE;AACrB,QAAA,CAAC,CAAC;IACJ;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;AACnD,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;YACxB;QACF;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE;AAC5B,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YACtB,IAAI,CAAC,gBAAgB,EAAE;QACzB;AACA,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACvB,IAAI,CAAC,iBAAiB,EAAE;QAC1B;AACA,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YACzB,IAAI,CAAC,mBAAmB,EAAE;QAC5B;IACF;AAEQ,IAAA,UAAU,CAAC,KAAmB,EAAA;QACpC,OAAO,CAAA,EAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAA,CAAE;IAC3C;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAM;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAC/B,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,YAAA,OAAO,IAAI;QACb;QACA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC;AACxF,QAAA,OAAO,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC;IAC3B;IAEQ,gBAAgB,GAAA;AACtB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAM;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAE;AACzC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAa;AACjC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAC/B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;QAEvC,MAAM,CAAC,eAAe,CACpB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;YACtB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;YAC/C,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACrC,YAAA,MAAM,CAAC,WAAW,GAAG,GAAG,KAAK,CAAC,KAAK,CAAA,EAAA,EAAK,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG;YACtE,MAAM,CAAC,QAAQ,GAAG,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;AAC3F,YAAA,OAAO,MAAM;QACf,CAAC,CAAC,CACH;QAED,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;YACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;YAC/D;QACF;QACA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AAClC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,gDAAgD,CAAC,CAAC;;AAE7E,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,CAAC;AAC3C,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC;YACxC;QACF;AACA,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1E;AACA,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,CAAC;AAC3C,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC;IAC1C;AAEA;;;;;;;AAOG;IACK,mBAAmB,CAAC,IAAiB,EAAE,KAAmB,EAAA;QAChE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC;QACzD,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YAChD;QACF;QACA,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AAC5C,QAAA,OAAO,CAAC,SAAS,GAAG,kBAAkB;QACtC,OAAO,CAAC,WAAW,GAAG,CAAA,iBAAA,EAAoB,SAAS,CAAC,MAAM,CAAA,KAAA,EAAQ,SAAS,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAA,CAAA,CAAG;AACtG,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AACpB,QAAA,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE;YAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACtC;IACF;;AAGQ,IAAA,SAAS,CAAC,OAAsC,EAAA;QACtD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,QAAA,GAAG,CAAC,SAAS,GAAG,WAAW;QAC3B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI;AAC/B,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;AAChB,QAAA,IAAI,OAAO,CAAC,OAAO,EAAE;YACnB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC5C,YAAA,KAAK,CAAC,SAAS,GAAG,gBAAgB;AAClC,YAAA,KAAK,CAAC,WAAW,GAAG,SAAS;AAC7B,YAAA,KAAK,CAAC,KAAK,GAAG,4HAA4H;AAC1I,YAAA,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;QACjD;QACA,MAAM,OAAO,GAAa,EAAE;;AAE5B,QAAA,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE;AACpB,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,KAAA,EAAQ,OAAO,CAAC,IAAI,CAAA,QAAA,EAAW,OAAO,CAAC,IAAI,CAAA,CAAE,CAAC;QAC7D;AACA,QAAA,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE;YACrB,OAAO,CAAC,IAAI,CAAC,CAAA,cAAA,EAAiB,OAAO,CAAC,KAAK,CAAA,CAAE,CAAC;QAChD;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACpB,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,KAAA,EAAQ,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA,CAAE,CAAC;QAC3D;QACA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC7C,QAAA,MAAM,CAAC,SAAS,GAAG,QAAQ;QAC3B,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE;AACxE,QAAA,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;AAClB,QAAA,OAAO,GAAG;IACZ;AAEA;;;;;;;;AAQG;IACK,sBAAsB,CAAC,IAAiB,EAAE,KAAmB,EAAA;QACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAM,CAAC,UAAU,CAAC,KAAK,CAAC;QAC9C,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9C;QACF;QACA,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AAC5C,QAAA,OAAO,CAAC,SAAS,GAAG,kBAAkB;QACtC,OAAO,CAAC,WAAW,GAAG,CAAA,UAAA,EAAa,QAAQ,CAAC,MAAM,CAAA,MAAA,EAAS,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAA,CAAA,CAAG;AAC9F,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AACpB,QAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACxC;IACF;;AAGQ,IAAA,WAAW,CAAC,OAAiC,EAAA;QACnD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,QAAA,GAAG,CAAC,SAAS,GAAG,aAAa;QAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC7C,QAAA,MAAM,CAAC,SAAS,GAAG,WAAW;AAC9B,QAAA,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM;QACnC,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC1C,QAAA,GAAG,CAAC,SAAS,GAAG,MAAM;QACtB,GAAG,CAAC,WAAW,GAAG,CAAA,CAAA,EAAI,OAAO,CAAC,YAAY,GAAG;QAC7C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM;;AAEvB,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,SAAS;QACpC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;QACzF,MAAM,OAAO,GAAa,EAAE;AAC5B,QAAA,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,UAAU,EAAE;;YAEtC,OAAO,CAAC,IAAI,CAAC,CAAA,EAAG,KAAK,CAAC,KAAK,KAAK,EAAE,GAAG,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAA,GAAA,EAAM,KAAK,CAAC,KAAK,CAAA,CAAE,CAAC;QACjF;AACA,QAAA,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE;YACrB,OAAO,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,OAAO,CAAC,KAAK,CAAA,CAAE,CAAC;QACnC;QACA,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAClC,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,SAAA,EAAY,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;QAC5D;;;AAGA,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE;AACrC,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,SAAA,EAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;QAChD;QACA,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACjC,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,SAAA,EAAY,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;QAC3D;AACA,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACtB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC7C,YAAA,MAAM,CAAC,SAAS,GAAG,QAAQ;YAC3B,MAAM,CAAC,WAAW,GAAG,CAAA,CAAA,EAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,CAAE;AAC9C,YAAA,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;QACpB;AACA,QAAA,OAAO,GAAG;IACZ;IAEQ,eAAe,CACrB,SAAsB,EACtB,KAAmB,EACnB,GAAiB,EACjB,KAAa,EACb,KAAa,EAAA;AAEb,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAM;AACxB,QAAA,IAAI,KAAc;QAClB,IAAI,QAAQ,GAAG,IAAI;AACnB,QAAA,IAAI;AACF,YAAA,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC;QACtD;AAAE,QAAA,MAAM;YACN,QAAQ,GAAG,KAAK;QAClB;QAEA,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,QAAA,GAAG,CAAC,SAAS,GAAG,UAAU;QAC1B,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,KAAK,GAAG,EAAE,CAAA,EAAA,CAAI;QAEzC,MAAM,UAAU,GAAG,QAAQ,IAAI,YAAY,CAAC,KAAK,CAAC;AAClD,QAAA,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC;AAC1B,QAAA,MAAM,QAAQ,GAAG,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;QAEtD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC7C,QAAA,MAAM,CAAC,SAAS,GAAG,QAAQ;QAC3B,MAAM,CAAC,WAAW,GAAG,UAAU,IAAI,QAAQ,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE;QAC7D,IAAI,UAAU,EAAE;AACd,YAAA,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAK;gBACpC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC3B,oBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;gBAC5B;qBAAO;AACL,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;gBACzB;AACA,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AAC1B,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;QAElB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC9C,QAAA,OAAO,CAAC,SAAS,GAAG,KAAK;AACzB,QAAA,OAAO,CAAC,WAAW,GAAG,CAAA,EAAG,KAAK,GAAG;AACjC,QAAA,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI;AACxB,QAAA,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAK;AACrC,YAAA,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,IAAI;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YACzB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC;AACtC,QAAA,CAAC,CAAC;AACF,QAAA,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;QAEnB,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAChD,QAAA,SAAS,CAAC,SAAS,GAAG,OAAO;QAC7B,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,SAAS,CAAC,WAAW,GAAG,qBAAqB;QAC/C;aAAO;YACL,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;YAC7C,MAAM,QAAQ,GAAG,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;AAC5D,YAAA,IAAI,QAAQ,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC3C,gBAAA,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;AACnC,gBAAA,SAAS,CAAC,KAAK,GAAG,eAAe;AACjC,gBAAA,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAK;AACvC,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC;AACpD,gBAAA,CAAC,CAAC;YACJ;QACF;AACA,QAAA,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;AACrB,QAAA,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;QAErB,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC;AACtD,gBAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE;AAC1C,oBAAA,IAAI,CAAC,eAAe,CAClB,SAAS,EACT,KAAK,EACL,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAA,EAAA,CAAI,EAAE,OAAO,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAC3D,CAAA,CAAA,EAAI,KAAK,GAAG,EACZ,KAAK,GAAG,CAAC,CACV;gBACH;AACA,gBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE;AACxB,oBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAA,EAAA,EAAK,KAAK,CAAC,MAAM,CAAA,OAAA,CAAS,CAAC;AACvD,oBAAA,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAA,EAAG,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI;AAChD,oBAAA,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;gBACxB;YACF;iBAAO;gBACL,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,KAAgC,CAAC,EAAE;AACpE,oBAAA,IAAI,CAAC,eAAe,CAClB,SAAS,EACT,KAAK,EACL,EAAE,IAAI,EAAE,CAAA,EAAG,GAAG,CAAC,IAAI,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,EACzD,QAAQ,EACR,KAAK,GAAG,CAAC,CACV;gBACH;YACF;QACF;IACF;IAEQ,UAAU,CAChB,GAAgB,EAChB,SAAsB,EACtB,KAAmB,EACnB,GAAiB,EACjB,OAAgB,EAAA;QAEhB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,QAAA,KAAK,CAAC,KAAK,GAAG,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QACrE,MAAM,MAAM,GAAG,MAAW;;YAExB,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;AAC9E,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AAC1B,QAAA,CAAC;QACD,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,KAAI;AAC1C,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;AACzB,gBAAA,MAAM,EAAE;YACV;AAAO,iBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;AACjC,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAC1B;AACF,QAAA,CAAC,CAAC;AACF,QAAA,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC;QAClC,KAAK,CAAC,KAAK,EAAE;IACf;IAEQ,iBAAiB,GAAA;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAM;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAE;QAC1C,IAAI,CAAC,eAAe,EAAE;;QAGtB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,aAAa;QAC9B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAU,EAAE;YACrF,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,YAAA,MAAM,CAAC,WAAW,GAAG,KAAK;AAC1B,YAAA,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;AAC7B,gBAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;YAChC;AACA,YAAA,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAK;AACpC,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,gBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;AAC3B,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACrB;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AAEjB,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,EAAE;AACnC,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;YAC9B;QACF;AAEA,QAAA,IAAI,OAAuB;AAC3B,QAAA,IAAI,YAAoB;AACxB,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;YAC7B,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC;AACjD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW;YAC/B,YAAY;AACV,gBAAA,MAAM,YAAY,OAAO,GAAG,CAAA,CAAA,EAAI,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,GAAG,MAAM,CAAC,QAAQ;QACrF;AAAO,aAAA,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE;AACtC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;;YAEvC,OAAO;gBACL,QAAQ,KAAK,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;AAC9F,YAAA,YAAY,GAAG,IAAI,CAAC,aAAa;QACnC;aAAO;AACL,YAAA,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE;YAC7B,YAAY,GAAG,KAAK;QACtB;QAEA,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,CAAA,SAAA,EAAY,YAAY,MAAM,OAAO,CAAC,MAAM,CAAA,aAAA,EAAgB,OAAO,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAA,CAAE;AAChH,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AAEjB,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,YAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;gBAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACrC;YACA;QACF;;;;AAKA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAC7C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;QACvC,MAAM,MAAM,GACV,SAAS,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE;AACjG,QAAA,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACzD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;YACnD;QACF;QACA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC5C,QAAA,MAAM,CAAC,SAAS,GAAG,QAAQ;QAC3B,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC1C,QAAA,GAAG,CAAC,SAAS,GAAG,oBAAoB;AACpC,QAAA,GAAG,CAAC,WAAW,GAAG,SAAS,KAAK,IAAI,GAAG,sBAAsB,GAAG,UAAU;AAC1E,QAAA,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,mDAAmD,CAAC,CAAC;QAChG,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,QAAA,MAAM,CAAC,WAAW,GAAG,QAAQ;AAC7B,QAAA,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAK;YACpC,QAAQ,CAAC,MAAM,EAAE;AACnB,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AACnB,QAAA,IAAI,SAAS,KAAK,IAAI,EAAE;AACtB,YAAA,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;gBAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAChD;QACF;aAAO;AACL,YAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;gBAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACvC;QACF;IACF;AAEA;;;;AAIG;AACK,IAAA,mBAAmB,CAAC,IAAiB,EAAA;AAC3C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAM;AACxB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc;QACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;;;AAG1C,QAAA,MAAM,UAAU,GAAG,KAAK,KAAK;AAC3B,cAAE;cACA,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,kBAAkB,EAAE;AAC3E,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,KAAK;AAChC,cAAE;AACF,cAAE,CAAA,gBAAA,EAAmB,UAAU,CAAA,wCAAA,CAA0C;AAC3E,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;;;AAIjB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;AACvC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC;AAChE,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;YACxD;QACF;AACA,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,YAAA,GAAG,CAAC,SAAS,GAAG,YAAY;YAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,YAAA,IAAI,CAAC,SAAS,GAAG,WAAW;AAC5B,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI;YAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC7C,YAAA,MAAM,CAAC,SAAS,GAAG,WAAW;YAC9B,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,CAAA,EAAG,KAAK,CAAC,MAAM,CAAA,EAAA,EAAK,KAAK,CAAC,KAAK,CAAA,CAAE,GAAG,KAAK,CAAC,MAAM;YACvF,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK;AAC5C,mBAAA,KAAK,CAAC,MAAM,KAAK,iBAAiB,EAAE;;AAEvC,gBAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;YAC9B;AAAO,iBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,sBAAsB,EAAE;;AAElD,gBAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;YAClC;YACA,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC5C,YAAA,KAAK,CAAC,SAAS,GAAG,MAAM;YACxB,KAAK,CAAC,WAAW,GAAG,CAAA,CAAA,EAAI,KAAK,CAAC,IAAI,GAAG;AACrC,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC;AAC7D,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE;;;gBAGvB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,gBAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;gBACzB,IAAI,CAAC,WAAW,GAAG,CAAA,CAAA,EAAI,KAAK,CAAC,IAAI,EAAE;AACnC,gBAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YAClB;AACA,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;QAClB;IACF;;AAGQ,IAAA,qBAAqB,CAAC,KAA2B,EAAA;QACvD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,QAAA,GAAG,CAAC,SAAS,GAAG,YAAY;QAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS,GAAG,oBAAoB;AACrC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM;QAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,QAAQ;QACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM;AACvB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,UAAU,CAAA,CAAA,EAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/F,IAAI,CAAC,WAAW,GAAG,CAAA,EAAG,KAAK,CAAC,aAAa,CAAA,EAAG,OAAO,CAAA,CAAE;QACrD,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;AAC1F,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE;AACvB,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI;AACzB,YAAA,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAK;AACjC,gBAAA,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAChC,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,OAAO,GAAG;IACZ;AAEQ,IAAA,WAAW,CAAC,KAAmB,EAAA;;;AAGrC,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ;AAC/B,QAAA,IACE,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,aAAa;AACxC,YAAA,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,sBAAsB,EACjD;AACA,YAAA,OAAO,QAAiC;QAC1C;AACA,QAAA,OAAO,QAAQ;IACjB;AAEQ,IAAA,UAAU,CAAC,KAAmB,EAAA;QACpC,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,QAAA,GAAG,CAAC,SAAS,GAAG,YAAY;QAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,QAAQ;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC;QAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI;QAC7B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS,GAAG,WAAW;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW;AACpC,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;AACjE,QAAA,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAK;YACjC,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE;AACxC,YAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,gBAAA,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;YAC3D;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,GAAG;IACZ;AAEQ,IAAA,YAAY,CAAC,KAAuB,EAAA;QAC1C,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,QAAA,GAAG,CAAC,SAAS,GAAG,YAAY;QAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS,GAAG,oBAAoB;AACrC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM;QAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,QAAQ;QACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI;QAC7B,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;AAC1F,QAAA,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAK;YACjC,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACvC,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,GAAG;IACZ;IAEQ,mBAAmB,GAAA;AACzB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAM;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAE;AAC5C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;AACnC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,qBAAqB,CAAC;QAClE,MAAM,IAAI,GAAkB,EAAE;AAC9B,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA,EAAA,EAAK,KAAK,CAAA,iBAAA,CAAmB,CAAC,CAAC;QAC1D;AACA,QAAA,KAAK,IAAI,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AACxD,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/C;AACA,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACrB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC9C;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY;IACpC;AAEQ,IAAA,YAAY,CAAC,KAAqB,EAAA;QACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,QAAA,GAAG,CAAC,SAAS,GAAG,cAAc;QAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS,GAAG,GAAG;AACpB,QAAA,IAAI,CAAC,WAAW,GAAG,CAAA,EAAG,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI;QACxD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS,GAAG,gBAAgB;AACjC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI;;AAE7B,QAAA,IAAI,KAAK,CAAC,eAAe,KAAK,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;AAC1B,YAAA,IAAI,CAAC,KAAK,GAAG,6BAA6B;QAC5C;;;AAGA,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE;AACtE,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;AAC1B,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,KAAK;AAC1B,kBAAE;kBACA,0DAA0D;QAChE;;;AAGA,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE;AAC5E,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;AAC1B,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,KAAK;AAC1B,kBAAE;kBACA,8EAA8E;QACpF;;;AAGA,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,uBAAuB,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE;AAC7E,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;AAC1B,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,KAAK;AAC1B,kBAAE;kBACA,2EAA2E;QACjF;QACA,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC5C,QAAA,KAAK,CAAC,SAAS,GAAG,OAAO;QAEzB,KAAK,CAAC,WAAW,GAAG,CAAA,CAAA,EAAI,KAAK,CAAC,KAAK,GAAG;QACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC7C,QAAA,MAAM,CAAC,SAAS,GAAG,QAAQ;AAC3B,QAAA,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM;QACjC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC;AACrC,QAAA,OAAO,GAAG;IACZ;AAEQ,IAAA,SAAS,CAAC,IAAY,EAAA;QAC5B,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,QAAA,GAAG,CAAC,SAAS,GAAG,OAAO;AACvB,QAAA,GAAG,CAAC,WAAW,GAAG,IAAI;AACtB,QAAA,OAAO,GAAG;IACZ;;IAIQ,cAAc,CAAC,KAAmB,EAAE,IAAY,EAAA;AACtD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAM;QACxB,MAAM,KAAK,GAAW,EAAE;AACxB,QAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACvE,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE;AACzC,YAAA,IAAI,OAAO,KAAK,SAAS,EAAE;gBACzB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC;YAC/C;QACF;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;IAC7B;AAEQ,IAAA,eAAe,CAAC,KAAsB,EAAA;;AAE5C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAgB;QACnC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAW;AAC/B,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,MAAM,OAAO,GAAG,IAAI,YAAY,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,aAAa;AACnE,YAAA,IAAI,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBACjE;YACF;AACA,YAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;AACjB,YAAA,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE;YAC5C,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,YAAA,GAAG,CAAC,SAAS,GAAG,QAAQ;YACxB,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAA,EAAA,CAAI;YACjC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA,EAAA,CAAI;YAC/B,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,KAAK,CAAA,EAAA,CAAI;YACnC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAA,EAAA,CAAI;AACrC,YAAA,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;QACnB;;QAEA,UAAU,CAAC,MAAK;YACd,KAAK,CAAC,eAAe,EAAE;QACzB,CAAC,EAAE,IAAI,CAAC;IACV;AACD;;AChoCD;;;;;;;;AAQG;AAIH,MAAM,QAAQ,GAAG,cAAc;AAE/B,SAAS,cAAc,GAAA;IACrB,IAAI,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;QAC7C;IACF;AACA,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC7D;SAEgB,iBAAiB,GAAA;IAC/B,IAAI,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE;QAC5D;IACF;IACA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACjC,QAAA,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC9C;AACA,IAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE;AAC1B,QAAA,cAAc,EAAE;IAClB;SAAO;AACL,QAAA,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC/E;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/protocol/types.ts","../src/protocol/registry.ts","../src/core/formatValue.ts","../src/core/DevtoolsCore.ts","../src/core/declaredScan.ts","../src/shell/WcsDevtools.ts","../src/bootstrapDevtools.ts"],"sourcesContent":["/**\n * protocol/types.ts\n *\n * DevTools Hook Protocol (docs/devtools-hook-protocol.md) の devtools 側型定義。\n *\n * ランタイム(@wcstack/state)側の内部型は import しない — プロトコルは\n * 「文書化された構造」への構造的型付けで両側が独立に実装する(protocol §2)。\n * そのためランタイム内部オブジェクトは *Like インターフェースとして、\n * devtools が実際に触るプロパティだけを宣言する。\n */\n\n/** グローバル registry のプロパティ名 */\nexport const DEVTOOLS_HOOK_GLOBAL = \"__WCSTACK_DEVTOOLS_HOOK__\";\n\n/** プロトコル版。additive change では上げない(protocol §2) */\nexport const DEVTOOLS_PROTOCOL_VERSION = 2;\n\nexport interface IPathInfoLike {\n readonly path: string;\n}\n\nexport interface IAbsolutePathInfoLike {\n readonly stateElement: unknown;\n readonly pathInfo: IPathInfoLike;\n}\n\nexport interface IListIndexLike {\n readonly index: number;\n readonly indexes: number[];\n}\n\nexport interface IAbsoluteAddressLike {\n readonly absolutePathInfo: IAbsolutePathInfoLike;\n readonly listIndex: IListIndexLike | null;\n}\n\nexport interface IBindingLike {\n readonly propName: string;\n readonly statePathName: string;\n readonly bindingType: string;\n readonly node: Node;\n readonly replaceNode: Node;\n}\n\nexport interface IStateElementSummaryLike {\n readonly rootNode: Node;\n readonly element: unknown;\n readonly paths: {\n readonly list: ReadonlySet<string>;\n readonly element: ReadonlySet<string>;\n readonly getter: ReadonlySet<string>;\n readonly setter: ReadonlySet<string>;\n };\n readonly commandTokenNames: ReadonlySet<string>;\n readonly eventTokenNames: ReadonlySet<string>;\n readonly staticDependency: ReadonlyMap<string, readonly string[]>;\n readonly dynamicDependency: ReadonlyMap<string, readonly string[]>;\n /**\n * `$watch` の宣言パス集合(protocol v1 追補・配線カバレッジの宣言面)。\n * 旧ランタイムにはフィールド自体が無いため optional。宣言なしは null。\n */\n readonly watchPaths?: ReadonlySet<string> | null;\n /**\n * `$listKeys` で宣言されたリストパス集合(protocol v1 追補)。ワイルドカード行\n * watch に**リスト書き込み**が届く前提は「for バインド(paths.list)or\n * $listKeys 宣言」なので、前提判定の正確化に paths.list と対で使う\n *(明示 index 書き込みは前提に依らず発火し得る)。旧ランタイムにはフィールド自体が\n * 無いため optional(undefined = $listKeys 側が観測不能)。宣言なしは null。\n */\n readonly keyedListPaths?: ReadonlySet<string> | null;\n}\n\n/**\n * マウント記録 1 件の要約(overlays の要素 — protocol v2・D20 の可視化)。\n * マウントの私有キー・getter はオーバーレイ専用アドレス空間(マーカー `#m<id>`)に\n * 住み、状態ツリーの keys/read には現れないため、これが唯一の可視面になる。\n */\nexport interface IMountOverlaySummaryLike {\n /** D20 の予約セグメント(`#m<id>`) */\n readonly marker: string;\n /** マウントされたコンポーネントのタグ名(小文字) */\n readonly componentTag: string;\n readonly stateProp: string;\n /** マウント表: 内側接頭辞(空 = ルートエントリ)→ 外側パス */\n readonly mountTable: readonly { readonly inner: string; readonly outer: string }[];\n /** `$n` 補正の Δ(ルート接頭辞のワイルドカード数) */\n readonly delta: number;\n /** 私有キー(オーバーレイ空間に住む own data key) */\n readonly privateKeys: readonly string[];\n /**\n * 公開 getter の公開パス(親スコープから読める — docs/state-overlay-export-design.md)。\n * オーバーレイ export より前の v2 ランタイムにはフィールド自体が無いため optional\n * (protocol §3 の `summary.exports ?? []`)。\n */\n readonly exports?: readonly string[];\n /** マーカーパスに載る getter のキー */\n readonly getterKeys: readonly string[];\n}\n\n/**\n * 鍵付き購読(`$eq` / `$eqPath` / `$eqIndex`)の path 1 つ分の要約(keyedSubscriptions の要素 —\n * protocol v2 追補・要件 D17)。取り出した時点の数え。\n */\nexport interface IKeyedSubscriptionSummaryLike {\n /** `$eq` 系の第 1 引数(選択を持つパス) */\n readonly path: string;\n /** path が getter 由来で鍵付きで購読できず、追跡付きの読みに落ちた(変わるたびに読む getter が全部再評価される) */\n readonly tracked: boolean;\n /** 行ごとの購読の数 */\n readonly rows: number;\n /** 行ごとの購読が使っている鍵の数 */\n readonly keys: number;\n /** `$eqIndex` の最内段のリスト単位の監視の数 */\n readonly lists: number;\n /** path の最後に見た値(見ていなければ undefined)。生値 */\n readonly lastValue: unknown;\n}\n\n/**\n * 宣言されたフィルタ 1 件(ランタイム `IFilterInfo` の構造的サブセット)。\n * `literals`(引数の型付きの値・要件 B9)は原文 `args` と別物で、フィルタの鍵\n * (`filterKey.ts` の `filter.literals ?? filter.args`)と `eq` / `ne` / `defaults` の\n * 比較が読む。宣言が無いと、独自 source を TS で書く採用者が `{ filterName, args }`\n * だけのオブジェクトを渡し、型は通るのに鍵が縮退する(`\"1\"` と `1` が同じ鍵になる)。\n */\nexport interface IDeclaredFilterLike {\n readonly filterName: string;\n readonly args: readonly string[];\n readonly literals?: readonly unknown[];\n}\n\n/**\n * 宣言レベルのバインディング 1 件(getDeclaredBindings の要素・protocol v1 追補)。\n * ランタイム正本パーサの結果が構造的に流れる。宣言タプルで dedupe 済みの\n * 「宣言の集合」であり、レンダリング行数に比例したインスタンス列ではない。\n */\nexport interface IDeclaredBindingLike {\n /** 代表ノード(fragment 由来 = 構造テンプレート内部は null)。 */\n readonly node: Node | null;\n readonly propName: string;\n readonly statePathName: string;\n readonly bindingType: string;\n readonly inFilters: readonly IDeclaredFilterLike[];\n readonly outFilters: readonly IDeclaredFilterLike[];\n readonly origin: \"attribute\" | \"comment\" | \"fragment\";\n readonly raw: string;\n}\n\nexport type DevtoolsEventLike =\n | {\n readonly type: \"state:element-registered\";\n readonly rootNode: Node;\n readonly element: unknown;\n }\n | {\n readonly type: \"state:element-unregistered\";\n readonly rootNode: Node;\n readonly element: unknown;\n }\n | {\n readonly type: \"state:write\";\n readonly absoluteAddress: IAbsoluteAddressLike;\n readonly value: unknown;\n readonly oldValue: unknown;\n readonly hasOldValue: boolean;\n }\n | {\n readonly type: \"state:update-batch\";\n readonly addresses: ReadonlySet<IAbsoluteAddressLike>;\n }\n | {\n readonly type: \"state:binding-added\";\n readonly absoluteAddress: IAbsoluteAddressLike;\n readonly binding: IBindingLike;\n }\n | {\n readonly type: \"state:binding-removed\";\n readonly absoluteAddress: IAbsoluteAddressLike;\n readonly binding: IBindingLike;\n }\n | {\n readonly type: \"state:binding-cleared\";\n readonly absoluteAddress: IAbsoluteAddressLike;\n }\n | {\n readonly type: \"state:token-emit\";\n readonly kind: \"command\" | \"event\";\n readonly tokenName: string;\n readonly args: readonly unknown[];\n readonly subscriberCount: number;\n /**\n * 発火元ツリーの state 要素(protocol v2 追補 2026-09-05・additive)。\n * 旧ランタイム・registry 非経由の token の payload には無い(optional)—\n * 無い emit の実測はツリー別に分けられないため、全ツリーの照会へ合算で残す。\n */\n readonly stateElement?: unknown;\n }\n | {\n // `$watch` の実行中の throw。watch は例外を自分で閉じる(drain と他機能を\n // 巻き添えにしないため)ので、これが無いと失敗が devtools から見えない。\n readonly type: \"state:watch-error\";\n // `$scan`(state の scan/scanReport.ts。path は \"$scan.<output>\")は \"evaluate\"(source /\n // 出力の読み)・\"fold\"(fold の throw・Promise の戻り値・接ぎ木で getter になった from)・\n // \"write\"(出力の書き込み)を使う。\n readonly phase: \"prime\" | \"evaluate\" | \"handler\" | \"fold\" | \"write\";\n readonly path: string;\n readonly error: unknown;\n }\n | {\n // watch 起点の書き込み連鎖が深さ上限で打ち切られた。\n readonly type: \"state:watch-chain-limit\";\n readonly maxDepth: number;\n readonly paths: readonly string[];\n }\n | {\n // 描画起点の書き込み連鎖(binding の適用中の書き込みが次のバッチを起こす)が深さ上限で\n // 打ち切られた(additive・#338)。そのバッチの binding は適用されず、値は巻き戻らない。\n readonly type: \"state:render-chain-limit\";\n readonly maxDepth: number;\n readonly paths: readonly string[];\n }\n | {\n // `$watch` ハンドラの正常発火(protocol v1 追補・配線カバレッジの実測面)。\n // 値は載せない — 「宣言したのに一度も発火しない」の検出には発火の事実で足りる。\n readonly type: \"state:watch-fired\";\n readonly path: string;\n /**\n * 発火元ツリーの state 要素(protocol v2 追補 2026-09-05・additive)。\n * 複数ツリーが同名 watch パスを宣言するページで実測台帳をツリー別に分ける。\n * 旧ランタイムの payload には無い(optional)— 無い発火は全ツリーの照会へ\n * 合算で残す。\n */\n readonly stateElement?: unknown;\n }\n | {\n // バインド / `$watch` の対象パスが state 上で解決しないと確定した。\n // ランタイムは console.warn で続行するので、これが無いと「配線したのに\n // 黙って死んでいる」が devtools から見えない。\n readonly type: \"state:path-unresolved\";\n readonly source: \"binding\" | \"watch\" | \"scan\";\n readonly path: string;\n readonly missingSegment: string;\n }\n | {\n // binding 適用の throw。バッチの残りを守るためランタイムが隔離するので、\n // watch-error と同じくこれが無いと失敗がどこにも現れない。\n readonly type: \"state:binding-apply-error\";\n readonly path: string;\n readonly bindingType: string;\n readonly error: unknown;\n }\n | {\n // two-way エコーの辺単位抑止(enablePropagationContext 時のみ流れる)。\n readonly type: \"propagation:suppressed\";\n readonly reason: \"confirmation\" | \"visited-edge\";\n readonly transactionId: number;\n readonly edgeId: number;\n readonly node: Node;\n readonly member: string;\n }\n | {\n readonly type: \"propagation:coalesced\";\n readonly absoluteAddress: IAbsoluteAddressLike;\n readonly droppedTransactionId: number;\n readonly winnerTransactionId: number;\n }\n | {\n readonly type: \"propagation:hop-limit\";\n readonly absoluteAddress: IAbsoluteAddressLike;\n readonly transactionId: number;\n readonly hop: number;\n }\n | {\n // sidecar manifest から 1 コンポーネント契約を読んだ(opt-in contract analyzer)。\n readonly type: \"contract:manifest-read\";\n readonly tag: string;\n readonly loaded: boolean;\n }\n | {\n readonly type: \"contract:unsupported-extension\";\n readonly namespace: string;\n }\n | {\n // sidecar と live wcBindable 宣言の drift。live 宣言が正本。\n readonly type: \"contract:drift\";\n readonly reason: \"component-not-loaded\" | \"missing-member\" | \"event-mismatch\";\n readonly tag: string;\n readonly member?: string;\n readonly sidecarEvent?: string;\n readonly liveEvent?: string;\n };\n\nexport type DevtoolsSinkLike = (event: DevtoolsEventLike) => void;\n\nexport interface IDevtoolsSourceLike {\n readonly id: string;\n readonly kind: string;\n readonly packageVersion: string;\n getStateElements(): IStateElementSummaryLike[];\n /** protocol v1 追補 API。古いランタイムには無い可能性があるため optional 扱いで呼ぶ */\n keys?(rootNode: Node): string[];\n /**\n * protocol v2 API(optional 扱いで呼ぶ)。rootNode のツリーに載っている\n * マウント記録の列挙(D20 の可視化)。マウントが無ければ空配列。\n * v2 より前のランタイムには無いため、無ければ UI はセクションごと出さない。\n */\n overlays?(rootNode: Node): IMountOverlaySummaryLike[];\n /**\n * protocol v2 追補 API(optional 扱いで呼ぶ・要件 D17)。rootNode のツリーの鍵付き購読の\n * path ごとの要約。`$eq` 系が一度も評価されていなければ空配列。3.0 より前の state には無いため、\n * 無ければ UI はセクションごと出さない。\n */\n keyedSubscriptions?(rootNode: Node): IKeyedSubscriptionSummaryLike[];\n read(rootNode: Node, path: string, indexes?: number[]): unknown;\n write(rootNode: Node, path: string, value: unknown, indexes?: number[]): void;\n /**\n * protocol v1 追補 API(optional 扱いで呼ぶ)。ランタイム正本パーサによる\n * 宣言レベルバインディングの集合(declaredScan の簡易パーサを置き換える正本)。\n */\n getDeclaredBindings?(rootNode: Node): IDeclaredBindingLike[];\n _setSink(sink: DevtoolsSinkLike | null): void;\n}\n\nexport interface IDevtoolsListenerLike {\n onSourceRegistered?(source: IDevtoolsSourceLike): void;\n onSourceUnregistered?(sourceId: string): void;\n onEvent?(sourceId: string, event: DevtoolsEventLike): void;\n}\n\nexport interface IDevtoolsHookRegistryLike {\n readonly version: number;\n readonly sources: Map<string, IDevtoolsSourceLike>;\n register(source: IDevtoolsSourceLike): void;\n unregister(sourceId: string): void;\n addListener(listener: IDevtoolsListenerLike): () => void;\n}\n","/**\n * protocol/registry.ts\n *\n * registry 最小実装の devtools 側コピー(protocol §2)。\n * ロード順非依存にするため、ランタイム側(@wcstack/state の bridge)と\n * devtools 側の両方が同一仕様の最小実装を持ち、先にロードされた方が\n * globalThis に置く(先勝ち・振る舞い差し替えなし)。\n */\n\nimport {\n DEVTOOLS_HOOK_GLOBAL,\n DEVTOOLS_PROTOCOL_VERSION,\n IDevtoolsHookRegistryLike,\n IDevtoolsListenerLike,\n IDevtoolsSourceLike,\n} from \"./types\";\n\nfunction createMinimalRegistry(): IDevtoolsHookRegistryLike {\n const sources = new Map<string, IDevtoolsSourceLike>();\n const listeners = new Set<IDevtoolsListenerLike>();\n const applySink = (source: IDevtoolsSourceLike): void => {\n if (listeners.size === 0) {\n source._setSink(null);\n return;\n }\n const sourceId = source.id;\n source._setSink((event) => {\n for (const listener of listeners) {\n listener.onEvent?.(sourceId, event);\n }\n });\n };\n return {\n version: DEVTOOLS_PROTOCOL_VERSION,\n sources,\n register(source: IDevtoolsSourceLike): void {\n if (sources.has(source.id)) {\n return;\n }\n sources.set(source.id, source);\n applySink(source);\n for (const listener of listeners) {\n listener.onSourceRegistered?.(source);\n }\n },\n unregister(sourceId: string): void {\n const source = sources.get(sourceId);\n if (source === undefined) {\n return;\n }\n source._setSink(null);\n sources.delete(sourceId);\n for (const listener of listeners) {\n listener.onSourceUnregistered?.(sourceId);\n }\n },\n addListener(listener: IDevtoolsListenerLike): () => void {\n listeners.add(listener);\n for (const source of sources.values()) {\n applySink(source);\n listener.onSourceRegistered?.(source);\n }\n return () => {\n if (!listeners.delete(listener)) {\n return;\n }\n for (const source of sources.values()) {\n applySink(source);\n }\n };\n },\n };\n}\n\nexport function getOrCreateHookRegistry(): IDevtoolsHookRegistryLike {\n const globals = globalThis as unknown as Record<string, unknown>;\n const existing = globals[DEVTOOLS_HOOK_GLOBAL] as IDevtoolsHookRegistryLike | undefined;\n if (existing !== undefined) {\n if (existing.version !== DEVTOOLS_PROTOCOL_VERSION) {\n // 先勝ち固定。振る舞いは差し替えない(protocol §2)\n console.warn(\n `[wcstack/devtools] hook registry version mismatch: found ${existing.version}, expected ${DEVTOOLS_PROTOCOL_VERSION}. Keeping the existing registry (first-wins).`\n );\n }\n return existing;\n }\n const registry = createMinimalRegistry();\n globals[DEVTOOLS_HOOK_GLOBAL] = registry;\n return registry;\n}\n","/**\n * core/formatValue.ts\n *\n * 値フォーマッタ(devtools-tag-design.md §6)。\n *\n * 規範:\n * - primitive はそのまま(文字列は引用 + 80 文字上限)\n * - 配列 / plain object は深さ制限 + 要素数制限つきの要約\n * - それ以外(MediaStream, Blob, Element, class インスタンス等)は\n * `[[ClassName]]` タグ表示のみ\n * - structuredClone / JSON.stringify を全値に無差別適用しない\n * (生ハンドル・循環・巨大値対策。camera G1 との共存)\n */\n\nconst MAX_STRING = 80;\nconst MAX_ITEMS = 3;\n\nfunction isPlainObject(value: object): boolean {\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nfunction className(value: object): string {\n const ctor = (value as { constructor?: { name?: string } }).constructor;\n const name = ctor?.name;\n return typeof name === \"string\" && name.length > 0 ? name : \"Object\";\n}\n\n/**\n * 任意の値を表示用の短い文字列へ変換する。\n * @param value 対象値\n * @param depth 再帰許容深さ(既定 2。0 で複合値は要約タグのみ)\n */\nexport function formatValue(value: unknown, depth: number = 2): string {\n switch (typeof value) {\n case \"string\": {\n const body = value.length > MAX_STRING ? value.slice(0, MAX_STRING) + \"…\" : value;\n return `\"${body}\"`;\n }\n case \"number\":\n case \"boolean\":\n case \"bigint\":\n return String(value);\n case \"symbol\":\n return value.toString();\n case \"undefined\":\n return \"undefined\";\n case \"function\":\n return \"[[Function]]\";\n default:\n break;\n }\n if (value === null) {\n return \"null\";\n }\n const objectValue = value as object;\n if (Array.isArray(objectValue)) {\n if (depth <= 0) {\n return `[[Array(${objectValue.length})]]`;\n }\n const shown = objectValue.slice(0, MAX_ITEMS).map((item) => formatValue(item, depth - 1));\n const rest = objectValue.length > MAX_ITEMS ? `, …(${objectValue.length})` : \"\";\n return `[${shown.join(\", \")}${rest}]`;\n }\n if (isPlainObject(objectValue)) {\n if (depth <= 0) {\n return \"[[Object]]\";\n }\n const keys = Object.keys(objectValue);\n const shown = keys.slice(0, MAX_ITEMS).map(\n (key) => `${key}: ${formatValue((objectValue as Record<string, unknown>)[key], depth - 1)}`\n );\n const rest = keys.length > MAX_ITEMS ? `, …(${keys.length})` : \"\";\n return `{${shown.join(\", \")}${rest}}`;\n }\n // DOM ノード・生ハンドル・class インスタンス等はタグ表示のみ\n return `[[${className(objectValue)}]]`;\n}\n\n/**\n * throw された値の要約。\n *\n * `formatValue` は class インスタンスを `[[ClassName]]` に畳むため、Error に\n * そのまま使うと **最も知りたい message が消える**(`[[Error]]` だけになる)。\n * Error 形(name / message を持つ)だけは `Name: message` に開く。\n * 非 Error の throw(文字列・オブジェクト等)は通常の要約へ倒す。\n */\nexport function formatError(error: unknown): string {\n if (error !== null && typeof error === \"object\") {\n const { name, message } = error as { name?: unknown; message?: unknown };\n if (typeof message === \"string\") {\n const label = typeof name === \"string\" && name.length > 0 ? name : className(error as object);\n const body = message.length > MAX_STRING ? message.slice(0, MAX_STRING) + \"…\" : message;\n return body.length > 0 ? `${label}: ${body}` : label;\n }\n }\n return formatValue(error, 1);\n}\n\n/**\n * token 引数の要約(先頭 3 引数 × 各 80 文字上限、devtools-tag-design.md §6)。\n */\nexport function formatArgs(args: readonly unknown[]): string {\n if (args.length === 0) {\n return \"\";\n }\n const shown = args.slice(0, MAX_ITEMS).map((arg) => {\n const text = formatValue(arg, 1);\n return text.length > MAX_STRING ? text.slice(0, MAX_STRING) + \"…\" : text;\n });\n const rest = args.length > MAX_ITEMS ? `, …(${args.length})` : \"\";\n return `${shown.join(\", \")}${rest}`;\n}\n","/**\n * core/DevtoolsCore.ts\n *\n * hook client(devtools-tag-design.md §1)。DOM 非依存の純ロジック層。\n *\n * - registry への addListener / 解除(connect / disconnect)\n * - source 管理と roster(state 要素一覧)の維持\n * - 配線台帳(binding-added/removed イベントから構築。binding は WeakRef 保持)\n * - タイムライン ring buffer(既定 500 件 FIFO)\n * - 予約 prefix `wcs-devtools` の自己除外(protocol §5)\n *\n * 台帳はすべて devtools 側に置く(protocol 原則 2)。disconnect で\n * sources / roster / wiring をクリアし、残留参照を持たない。\n */\n\nimport { getOrCreateHookRegistry } from \"../protocol/registry\";\nimport {\n DevtoolsEventLike,\n IAbsoluteAddressLike,\n IBindingLike,\n IDeclaredBindingLike,\n IDevtoolsSourceLike,\n IKeyedSubscriptionSummaryLike,\n IMountOverlaySummaryLike,\n IStateElementSummaryLike,\n} from \"../protocol/types\";\nimport { formatArgs, formatError, formatValue } from \"./formatValue\";\n\nconst DEFAULT_TIMELINE_CAPACITY = 500;\n\nexport type TimelineKind =\n | \"write\"\n | \"batch\"\n | \"command\"\n | \"event\"\n | \"element-registered\"\n | \"element-unregistered\"\n | \"watch-error\"\n | \"watch-chain-limit\"\n | \"render-chain-limit\"\n | \"path-unresolved\"\n | \"binding-apply-error\"\n | \"propagation-suppressed\"\n | \"propagation-coalesced\"\n | \"propagation-hop-limit\"\n | \"contract-drift\";\n\nexport interface ITimelineEntry {\n readonly seq: number;\n readonly time: number;\n readonly sourceId: string;\n readonly kind: TimelineKind;\n readonly label: string;\n readonly detail: string;\n readonly subscriberCount: number | null;\n}\n\nexport interface IRosterEntry {\n readonly sourceId: string;\n /** 表示・選択用のルート由来ラベル(document / ホストタグ、重複は #n を付ける) */\n readonly label: string;\n readonly rootNode: Node;\n readonly summary: IStateElementSummaryLike;\n}\n\nexport interface IWiringEntry {\n readonly sourceId: string;\n readonly path: string;\n readonly propName: string;\n readonly bindingType: string;\n readonly bindingRef: WeakRef<IBindingLike>;\n /**\n * 属する state 要素(absoluteAddress.absolutePathInfo.stateElement)。v2 は名前次元が\n * 無いため、複数ツリーの同名パスは要素同一性で区別する(getWiringForPath のスコープ)。\n * WeakRef なのはこの台帳が要素の寿命を延ばさないため。payload に無ければ null。\n */\n readonly stateElementRef: WeakRef<object> | null;\n}\n\nexport type CoreChangeKind = \"sources\" | \"roster\" | \"wiring\" | \"timeline\" | \"coverage\";\nexport type CoreChangeListener = (kind: CoreChangeKind) => void;\n\n/**\n * 配線カバレッジ 1 行(static-wiring-dx-design.md §4 — 宣言 × 実測の突合)。\n * - watch: `fired`(count 回)/ `never` / `prerequisite-missing`\n * (ワイルドカード行 watch は「for バインド or $listKeys 宣言」が無いと\n * リスト書き込みが行へ届かない — 「未発火」と区別しないと誤警告になる)\n * - command / eventToken: `emitted`(count 回)/ `never` /\n * `emitted-unheard`(全 emit が subscriberCount 0 = 空撃ち。§4 の突合対象)\n * - binding: canonical declared がある場合のみ。`attached` / `never-attached`\n * (attached は「観測開始以降に一度でも attach された」— live 台帳は WeakRef\n * pruning で縮むため、瞬間値で判定すると attached が never-attached へ戻る)\n */\nexport type CoverageStatus =\n | \"fired\" | \"emitted\" | \"emitted-unheard\" | \"attached\"\n | \"never\" | \"prerequisite-missing\" | \"never-attached\";\n\nexport interface ICoverageEntry {\n readonly kind: \"watch\" | \"command\" | \"eventToken\" | \"binding\";\n readonly name: string;\n readonly status: CoverageStatus;\n readonly count: number;\n readonly note: string | null;\n}\n\nexport interface IDevtoolsCoreOptions {\n /** タイムライン ring buffer 件数(既定 500) */\n timelineCapacity?: number;\n}\n\n/** 台帳キーの区切り文字(state 名・パスに現れ得ない NUL)。\n * エスケープ表記でなく生成式にしているのは、ツーリングがソース中の\n * `エスケープ列` リテラルを生バイトへ壊す事故が実際に起きたため。 */\nconst NUL = String.fromCharCode(0);\n\nfunction pathKeyOf(path: string): string {\n return path;\n}\n\nfunction tokenKeyOf(kind: string, name: string): string {\n return kind + NUL + name;\n}\n\n/** 宣言(path+propName)単位の attach キー。NUL 区切りは tokenKeyOf と同じ理由 */\nfunction attachKeyOf(path: string, propName: string): string {\n return path + NUL + propName;\n}\n\n/** roster 表示用のルート由来ラベル(v2: name 次元が無いのでルートで識別する) */\nfunction rootLabelOf(rootNode: Node): string {\n if (typeof ShadowRoot !== \"undefined\" && rootNode instanceof ShadowRoot) {\n return `<${rootNode.host.tagName.toLowerCase()}>`;\n }\n if (rootNode.nodeType === 9 /* DOCUMENT_NODE */) {\n return \"document\";\n }\n return rootNode.nodeName.toLowerCase();\n}\n\n/** token emit の実測(カバレッジ台帳の集計値)。zeroSubscriberCount = 空撃ち回数 */\ninterface ITokenEmitStat {\n count: number;\n zeroSubscriberCount: number;\n}\n\n/**\n * watch / token 実測台帳の 1 区分(ツリー別 — protocol v2 追補)。\n * `stateElementRef === null` は「payload にツリー識別が無かった」旧 payload の\n * 合算区分で、どのツリーの照会にも常に合算で残す(欠測を欠落にしない — wiring\n * 台帳の stateElementRef と同じ流儀)。WeakRef なのはこの台帳が state 要素の\n * 寿命を延ばさないため。watch は count のみ使い、zeroSubscriberCount は token 用。\n */\ninterface IMeasuredStat {\n readonly stateElementRef: WeakRef<object> | null;\n count: number;\n zeroSubscriberCount: number;\n}\n\n/** token カバレッジ 1 行の判定(§4: 空撃ちのみ / 一部空撃ち / 正常 / 未発火) */\nfunction tokenCoverageOf(\n kind: \"command\" | \"eventToken\",\n name: string,\n stat: ITokenEmitStat | undefined,\n): ICoverageEntry {\n if (stat === undefined) {\n return { kind, name, status: \"never\", count: 0, note: null };\n }\n if (stat.zeroSubscriberCount === stat.count) {\n return {\n kind, name, status: \"emitted-unheard\", count: stat.count,\n note: `all ${stat.count} emit(s) had 0 subscribers`,\n };\n }\n return {\n kind, name, status: \"emitted\", count: stat.count,\n note: stat.zeroSubscriberCount > 0\n ? `${stat.zeroSubscriberCount}/${stat.count} emit(s) had 0 subscribers`\n : null,\n };\n}\n\nexport class DevtoolsCore {\n private _timelineCapacity: number;\n private _removeListener: (() => void) | null = null;\n private _sources: Map<string, IDevtoolsSourceLike> = new Map();\n private _roster: Map<string, IRosterEntry[]> = new Map();\n private _wiringByPathKey: Map<string, Set<IWiringEntry>> = new Map();\n private _wiringEntryByBinding: WeakMap<IBindingLike, IWiringEntry> = new WeakMap();\n private _timeline: ITimelineEntry[] = [];\n private _seq: number = 0;\n private _paused: boolean = false;\n private _changeListeners: Set<CoreChangeListener> = new Set();\n /** 観測開始時刻(connect 時の performance.now。未接続は null)。 */\n private _observingSince: number | null = null;\n /** watch 発火実測(path → ツリー別区分列)。カバレッジの実測面。\n * protocol v2 追補で payload がツリー識別(stateElement)を持つようになり、\n * 複数ツリーが同名 watch パスを宣言するページでもツリー別に数えられる。\n * 識別の無い旧 payload は null 区分に積み、どのツリーの照会にも合算で残す\n * (slice 29 non-blocking 記録の解消)。 */\n private _watchFiredStats: Map<string, IMeasuredStat[]> = new Map();\n /** token emit 実測(kind + NUL + name → ツリー別区分列)。上の追補注記と同じ。 */\n private _tokenEmitStats: Map<string, IMeasuredStat[]> = new Map();\n /** 観測開始以降に一度でも attach を観測した宣言キー(attachKeyOf)。\n * live 配線台帳は WeakRef pruning / binding-removed で縮むため、binding\n * カバレッジの attached 判定はこちらで行う(瞬間値で判定すると行の\n * 破棄・GC のたびに attached が never-attached へ逆戻りする)。 */\n private _everAttachedKeys: Set<string> = new Set();\n\n constructor(options?: IDevtoolsCoreOptions) {\n this._timelineCapacity = options?.timelineCapacity ?? DEFAULT_TIMELINE_CAPACITY;\n }\n\n get connected(): boolean {\n return this._removeListener !== null;\n }\n\n get paused(): boolean {\n return this._paused;\n }\n\n set paused(value: boolean) {\n this._paused = value;\n }\n\n connect(): void {\n if (this._removeListener !== null) {\n return;\n }\n // カバレッジは「観測開始以降」の実測。台帳の過去は再構成できない(protocol §6)\n // ため、UI はこの時刻を常時表示して非対称を明示する。\n this._observingSince = performance.now();\n const registry = getOrCreateHookRegistry();\n this._removeListener = registry.addListener({\n onSourceRegistered: (source) => {\n this._sources.set(source.id, source);\n this._refreshRosterOf(source);\n this._notify(\"sources\");\n },\n onSourceUnregistered: (sourceId) => {\n this._sources.delete(sourceId);\n this._roster.delete(sourceId);\n this._notify(\"sources\");\n this._notify(\"roster\");\n },\n onEvent: (sourceId, event) => {\n this._ingest(sourceId, event);\n },\n });\n }\n\n /** 購読解除 + 台帳クリア(タイムラインは保持。protocol §7-2 の残留ゼロ) */\n disconnect(): void {\n if (this._removeListener === null) {\n return;\n }\n this._removeListener();\n this._removeListener = null;\n this._sources.clear();\n this._roster.clear();\n this._wiringByPathKey.clear();\n this._wiringEntryByBinding = new WeakMap();\n this._observingSince = null;\n this._watchFiredStats.clear();\n this._tokenEmitStats.clear();\n this._everAttachedKeys.clear();\n this._notify(\"sources\");\n this._notify(\"roster\");\n this._notify(\"wiring\");\n this._notify(\"coverage\");\n }\n\n /** 観測開始時刻(performance.now 基準。未接続は null)。 */\n get observingSince(): number | null {\n return this._observingSince;\n }\n\n onChange(listener: CoreChangeListener): () => void {\n this._changeListeners.add(listener);\n return () => {\n this._changeListeners.delete(listener);\n };\n }\n\n getSources(): IDevtoolsSourceLike[] {\n return [...this._sources.values()];\n }\n\n getRoster(): IRosterEntry[] {\n const entries: IRosterEntry[] = [];\n for (const list of this._roster.values()) {\n entries.push(...list);\n }\n return entries;\n }\n\n /** 全 source の state 要素一覧を pull で取り直す */\n refreshRoster(): void {\n for (const source of this._sources.values()) {\n this._refreshRosterOf(source);\n }\n this._notify(\"roster\");\n }\n\n getTimeline(): readonly ITimelineEntry[] {\n return this._timeline;\n }\n\n clearTimeline(): void {\n this._timeline = [];\n this._notify(\"timeline\");\n }\n\n /**\n * 指定パスに束縛された配線(生存している binding のみ)。\n * stateElement を渡すとそのツリーの配線だけに絞る(v2 は名前次元が無いため、\n * 複数ツリーの同名パスは要素同一性で区別する)。stateElement を持たない\n * 旧 payload 由来の entry は絞り込みでも残す(欠測を欠落にしない)。\n */\n getWiringForPath(path: string, stateElement?: unknown): IWiringEntry[] {\n const set = this._wiringByPathKey.get(pathKeyOf(path));\n if (set === undefined) {\n return [];\n }\n const alive = this._collectAlive(set);\n if (stateElement === undefined) {\n return alive;\n }\n return alive.filter((entry) =>\n entry.stateElementRef === null || entry.stateElementRef.deref() === stateElement);\n }\n\n /** 全配線のスナップショット(生存している binding のみ) */\n getAllWiring(): IWiringEntry[] {\n const result: IWiringEntry[] = [];\n for (const set of this._wiringByPathKey.values()) {\n result.push(...this._collectAlive(set));\n }\n return result;\n }\n\n /** 指定ノード(またはその子孫のバインドノード)に載る配線 */\n getWiringForNode(node: Node): IWiringEntry[] {\n const result: IWiringEntry[] = [];\n for (const set of this._wiringByPathKey.values()) {\n for (const entry of this._collectAlive(set)) {\n const binding = entry.bindingRef.deref()!;\n if (\n binding.node === node ||\n binding.replaceNode === node ||\n node.contains(binding.node) ||\n node.contains(binding.replaceNode)\n ) {\n result.push(entry);\n }\n }\n }\n return result;\n }\n\n /**\n * ランタイム正本パーサによる宣言バインディング集合(protocol v1 追補)。\n * getDeclaredBindings を実装した source が 1 つも無ければ null(消費側は\n * declaredScan の簡易パーサへフォールバックする)。root は roster の rootNode\n * を source ごとに重複排除して渡す。\n */\n getCanonicalDeclared(): IDeclaredBindingLike[] | null {\n let supported = false;\n const out: IDeclaredBindingLike[] = [];\n // source をまたぐ重複(同じ root を複数 source が走査した場合)を宣言タプルで排除\n const seen = new Set<string>();\n for (const [sourceId, source] of this._sources) {\n if (typeof source.getDeclaredBindings !== \"function\") {\n continue;\n }\n supported = true;\n const roots = new Set<Node>();\n for (const entry of this._roster.get(sourceId) ?? []) {\n roots.add(entry.rootNode);\n }\n for (const root of roots) {\n for (const declared of source.getDeclaredBindings(root)) {\n const key = [declared.statePathName, declared.propName,\n declared.bindingType, declared.origin, declared.raw].join(NUL);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n out.push(declared);\n }\n }\n }\n return supported ? out : null;\n }\n\n /**\n * 配線カバレッジ(§4): 宣言面(watchPaths / token 宣言 / canonical declared)と\n * 実測面(watch-fired・token-emit の台帳・live 配線台帳)の突合。\n * 「観測開始以降」の実測であることは observingSince を UI が常時表示して明示する。\n *\n * watch / token の実測は各行の属するツリー(roster entry の element)でスコープする\n * (protocol v2 追補 — 複数ツリーの同名宣言を合算しない)。ツリー識別の無い\n * 旧 payload 由来の実測はどの行にも合算で残す(欠測を欠落にしない)。\n * stateElement を渡すとそのツリーの宣言行だけに絞る(getWiringForPath と同じ流儀)。\n * binding 節(canonical declared × ever-attach)は宣言・実測ともツリー識別を\n * 持たないため絞り込みの対象外。\n */\n getCoverageReport(stateElement?: unknown): ICoverageEntry[] {\n const out: ICoverageEntry[] = [];\n\n for (const entry of this.getRoster()) {\n const summary = entry.summary;\n if (stateElement !== undefined && summary.element !== stateElement) {\n continue;\n }\n // --- watch: 宣言(watchPaths)× 実測(watch-fired 台帳・自ツリー + 旧 payload 合算) ---\n for (const path of summary.watchPaths ?? []) {\n const count =\n this._measuredFor(this._watchFiredStats, pathKeyOf(path), summary.element)?.count ?? 0;\n if (count > 0) {\n out.push({ kind: \"watch\", name: path, status: \"fired\", count, note: null });\n continue;\n }\n // ワイルドカード行 watch に**リスト書き込み**が届く前提 = 各 `.*` 階層の\n // リストが「for バインド(paths.list)or `$listKeys` 宣言(keyedListPaths)」\n // されていること(watch 設計 §6-3)。未成立は「未発火」と区別する。\n // 前提はリスト置換経路に限る主張 — 明示 index 書き込み(`$resolve` /\n // `items.0.price` 代入。$getAll で listIndex 台帳が生えた後)は前提に\n // 依らず発火し得るため、「一度も発火しない」とは断定できない(実測済み)。\n // keyedListPaths は protocol v1 追補 — フィールドを持たない旧ランタイム\n // では $listKeys 側が観測できないため、note はさらに観測形に落とす 2 段。\n const keyedKnown = summary.keyedListPaths !== undefined;\n let missingList: string | null = null;\n for (let star = path.indexOf(\".*\"); star !== -1; star = path.indexOf(\".*\", star + 2)) {\n const listPath = path.slice(0, star);\n const satisfied = summary.paths.list.has(listPath)\n || (summary.keyedListPaths?.has(listPath) ?? false);\n if (!satisfied) {\n missingList = listPath;\n break;\n }\n }\n if (missingList !== null) {\n out.push({\n kind: \"watch\", name: path, status: \"prerequisite-missing\", count: 0,\n note: keyedKnown\n ? `list \"${missingList}\" has no for binding and no $listKeys declaration — list writes never reach its rows (only explicit-index writes can fire this watch)`\n : `no for binding observed for list \"${missingList}\" (a $listKeys declaration would still let list writes fire it)`,\n });\n continue;\n }\n out.push({ kind: \"watch\", name: path, status: \"never\", count: 0, note: null });\n }\n // --- token: 宣言(commandTokenNames / eventTokenNames)× 実測(emit 台帳)。\n // subscriberCount 0 = 空撃ち(§4): 全 emit が空撃ちなら emitted-unheard として\n // 警告する(emit 側だけ配線されて受け手が一つも居ない構成ミスの検出)。 ---\n for (const name of summary.commandTokenNames) {\n out.push(tokenCoverageOf(\"command\", name,\n this._measuredFor(this._tokenEmitStats, tokenKeyOf(\"command\", name), summary.element)));\n }\n for (const name of summary.eventTokenNames) {\n out.push(tokenCoverageOf(\"eventToken\", name,\n this._measuredFor(this._tokenEmitStats, tokenKeyOf(\"event\", name), summary.element)));\n }\n }\n\n // --- binding: canonical declared(宣言)× live 配線台帳(実測)。canonical が\n // 取れないランタイムではこの節を出さない(declaredScan は集合でないため突合しない)。\n const declared = this.getCanonicalDeclared();\n if (declared !== null) {\n const seen = new Set<string>();\n for (const decl of declared) {\n // 構造ディレクティブは行の実体化そのもの・eventToken は token 節が担当\n if (decl.bindingType === \"for\" || decl.bindingType === \"if\"\n || decl.bindingType === \"elseif\" || decl.bindingType === \"else\") continue;\n if (decl.propName.startsWith(\"eventToken.\")) continue;\n const key = attachKeyOf(decl.statePathName, decl.propName);\n if (seen.has(key)) continue;\n seen.add(key);\n // 「一度でも attach を観測したか」で判定(ever 台帳)。live 台帳は行の\n // 破棄や GC(WeakRef pruning)で縮むため、瞬間値だと逆戻りする。\n const attached = this._everAttachedKeys.has(key);\n out.push({\n kind: \"binding\",\n name: `${decl.propName} ← ${decl.statePathName}`,\n status: attached ? \"attached\" : \"never-attached\",\n count: attached ? 1 : 0,\n note: decl.origin === \"fragment\" ? \"template interior (attaches when rows materialize)\" : null,\n });\n }\n }\n\n return out;\n }\n\n /** roster entry の state からトップレベルキーを列挙(keys 未実装ランタイムは空) */\n keysOf(entry: IRosterEntry): string[] {\n const source = this._sources.get(entry.sourceId);\n if (source === undefined || typeof source.keys !== \"function\") {\n return [];\n }\n return source.keys(entry.rootNode);\n }\n\n /**\n * roster entry のツリーに載るマウント記録(overlays — protocol v2・D20 の可視化)。\n * overlays を実装しないランタイム(v2 より前)では null — UI はセクションごと\n * 出さない(後方互換)。マウントが無いツリーは空配列。\n */\n overlaysOf(entry: IRosterEntry): IMountOverlaySummaryLike[] | null {\n const source = this._sources.get(entry.sourceId);\n if (source === undefined || typeof source.overlays !== \"function\") {\n return null;\n }\n return source.overlays(entry.rootNode);\n }\n\n /**\n * roster entry のツリーの鍵付き購読(keyedSubscriptions — protocol v2 追補・要件 D17)。\n * 実装しないランタイム(3.0 より前の state)では null — UI はセクションごと出さない。\n */\n keyedSubscriptionsOf(entry: IRosterEntry): IKeyedSubscriptionSummaryLike[] | null {\n const source = this._sources.get(entry.sourceId);\n if (source === undefined || typeof source.keyedSubscriptions !== \"function\") {\n return null;\n }\n return source.keyedSubscriptions(entry.rootNode);\n }\n\n readValue(entry: IRosterEntry, path: string, indexes?: number[]): unknown {\n const source = this._sources.get(entry.sourceId);\n if (source === undefined) {\n return undefined;\n }\n return source.read(entry.rootNode, path, indexes);\n }\n\n writeValue(entry: IRosterEntry, path: string, value: unknown, indexes?: number[]): void {\n const source = this._sources.get(entry.sourceId);\n if (source === undefined) {\n return;\n }\n source.write(entry.rootNode, path, value, indexes);\n }\n\n // --- internal ---\n\n private _notify(kind: CoreChangeKind): void {\n for (const listener of this._changeListeners) {\n listener(kind);\n }\n }\n\n private _refreshRosterOf(source: IDevtoolsSourceLike): void {\n const entries: IRosterEntry[] = [];\n const labelCounts = new Map<string, number>();\n for (const summary of source.getStateElements()) {\n const base = rootLabelOf(summary.rootNode);\n const seen = (labelCounts.get(base) ?? 0) + 1;\n labelCounts.set(base, seen);\n entries.push({\n sourceId: source.id,\n label: seen === 1 ? base : `${base}#${seen}`,\n rootNode: summary.rootNode,\n summary,\n });\n }\n this._roster.set(source.id, entries);\n }\n\n /**\n * key の実測台帳から stateElement 区分の stat を探すか作る(ingest 用)。\n * payload の stateElement がオブジェクトでない(旧 payload / 直接生成 token)\n * ときは null 区分 = 全ツリー合算面に積む。\n */\n private _statFor(map: Map<string, IMeasuredStat[]>, key: string, stateElement: unknown): IMeasuredStat {\n let entries = map.get(key);\n if (entries === undefined) {\n entries = [];\n map.set(key, entries);\n }\n const element = typeof stateElement === \"object\" && stateElement !== null ? stateElement : null;\n for (const entry of entries) {\n if (element === null ? entry.stateElementRef === null : entry.stateElementRef?.deref() === element) {\n return entry;\n }\n }\n const created: IMeasuredStat = {\n stateElementRef: element === null ? null : new WeakRef(element),\n count: 0,\n zeroSubscriberCount: 0,\n };\n entries.push(created);\n return created;\n }\n\n /**\n * key の実測を element のツリーへスコープして集計する(照会用)。\n * null 区分(ツリー識別の無い旧 payload)は常に合算に含める。GC 済みツリーの\n * 区分は遅延剪定(wiring 台帳の WeakRef pruning と同じ)。実測ゼロは undefined\n * (= 宣言だけあって一度も観測していない)に畳む。\n */\n private _measuredFor(\n map: Map<string, IMeasuredStat[]>,\n key: string,\n element: unknown,\n ): ITokenEmitStat | undefined {\n const entries = map.get(key);\n if (entries === undefined) {\n return undefined;\n }\n let count = 0;\n let zeroSubscriberCount = 0;\n for (let i = entries.length - 1; i >= 0; i--) {\n const ref = entries[i].stateElementRef;\n if (ref !== null && ref.deref() === undefined) {\n entries.splice(i, 1);\n continue;\n }\n if (ref === null || ref.deref() === element) {\n count += entries[i].count;\n zeroSubscriberCount += entries[i].zeroSubscriberCount;\n }\n }\n if (entries.length === 0) {\n map.delete(key);\n }\n return count === 0 ? undefined : { count, zeroSubscriberCount };\n }\n\n private _collectAlive(set: Set<IWiringEntry>): IWiringEntry[] {\n const alive: IWiringEntry[] = [];\n for (const entry of set) {\n if (entry.bindingRef.deref() === undefined) {\n // GC 済み binding は遅延剪定(detach 漏れで DOM を残さないための WeakRef 側)\n set.delete(entry);\n continue;\n }\n alive.push(entry);\n }\n return alive;\n }\n\n private _appendTimeline(entry: Omit<ITimelineEntry, \"seq\" | \"time\">): void {\n if (this._paused) {\n return;\n }\n this._timeline.push({\n ...entry,\n seq: this._seq++,\n time: performance.now(),\n });\n const overflow = this._timeline.length - this._timelineCapacity;\n if (overflow > 0) {\n this._timeline.splice(0, overflow);\n }\n this._notify(\"timeline\");\n }\n\n private _labelOf(address: IAbsoluteAddressLike): string {\n const indexes = address.listIndex?.indexes;\n const path = address.absolutePathInfo.pathInfo.path;\n return indexes !== undefined ? `${path}[${indexes.join(\",\")}]` : path;\n }\n\n private _ingest(sourceId: string, event: DevtoolsEventLike): void {\n switch (event.type) {\n case \"state:element-registered\": {\n const source = this._sources.get(sourceId);\n if (source !== undefined) {\n this._refreshRosterOf(source);\n this._notify(\"roster\");\n }\n this._appendTimeline({\n sourceId,\n kind: \"element-registered\",\n label: rootLabelOf(event.rootNode),\n detail: \"\",\n subscriberCount: null,\n });\n return;\n }\n case \"state:element-unregistered\": {\n const source = this._sources.get(sourceId);\n if (source !== undefined) {\n this._refreshRosterOf(source);\n this._notify(\"roster\");\n }\n this._appendTimeline({\n sourceId,\n kind: \"element-unregistered\",\n label: rootLabelOf(event.rootNode),\n detail: \"\",\n subscriberCount: null,\n });\n return;\n }\n case \"state:write\": {\n const detail = event.hasOldValue\n ? `${formatValue(event.value)} (was ${formatValue(event.oldValue)})`\n : formatValue(event.value);\n this._appendTimeline({\n sourceId,\n kind: \"write\",\n label: this._labelOf(event.absoluteAddress),\n detail,\n subscriberCount: null,\n });\n return;\n }\n case \"state:update-batch\": {\n const labels: string[] = [];\n let total = 0;\n for (const address of event.addresses) {\n total++;\n if (labels.length < 3) {\n labels.push(this._labelOf(address));\n }\n }\n if (total === 0) {\n return;\n }\n const rest = total > labels.length ? `, …(${total})` : \"\";\n this._appendTimeline({\n sourceId,\n kind: \"batch\",\n label: `${total} address${total === 1 ? \"\" : \"es\"}`,\n detail: `${labels.join(\", \")}${rest}`,\n subscriberCount: null,\n });\n return;\n }\n case \"state:binding-added\": {\n const path = event.absoluteAddress.absolutePathInfo.pathInfo.path;\n const key = pathKeyOf(path);\n let set = this._wiringByPathKey.get(key);\n if (set === undefined) {\n set = new Set();\n this._wiringByPathKey.set(key, set);\n }\n const stateElement = event.absoluteAddress.absolutePathInfo.stateElement;\n const entry: IWiringEntry = {\n sourceId,\n path,\n propName: event.binding.propName,\n bindingType: event.binding.bindingType,\n bindingRef: new WeakRef(event.binding),\n stateElementRef: typeof stateElement === \"object\" && stateElement !== null\n ? new WeakRef(stateElement)\n : null,\n };\n set.add(entry);\n this._wiringEntryByBinding.set(event.binding, entry);\n // カバレッジの実測面(B2): attach の観測を ever 台帳へ積む(remove では消さない)\n this._everAttachedKeys.add(attachKeyOf(path, event.binding.propName));\n this._notify(\"wiring\");\n this._notify(\"coverage\");\n return;\n }\n case \"state:binding-removed\": {\n const entry = this._wiringEntryByBinding.get(event.binding);\n if (entry === undefined) {\n return;\n }\n this._wiringEntryByBinding.delete(event.binding);\n const key = pathKeyOf(entry.path);\n const set = this._wiringByPathKey.get(key);\n if (set !== undefined) {\n set.delete(entry);\n if (set.size === 0) {\n this._wiringByPathKey.delete(key);\n }\n }\n this._notify(\"wiring\");\n return;\n }\n case \"state:binding-cleared\": {\n const path = event.absoluteAddress.absolutePathInfo.pathInfo.path;\n const key = pathKeyOf(path);\n if (this._wiringByPathKey.delete(key)) {\n this._notify(\"wiring\");\n }\n return;\n }\n case \"state:token-emit\": {\n // カバレッジの実測面: emit 回数と空撃ち回数を、発火元ツリー\n // (payload の stateElement — protocol v2 追補)別の区分に積む(§4)。\n // 識別の無い旧 payload は null 区分 = 全ツリー合算面へ。\n const stat = this._statFor(\n this._tokenEmitStats, tokenKeyOf(event.kind, event.tokenName), event.stateElement);\n stat.count += 1;\n if (event.subscriberCount === 0) {\n stat.zeroSubscriberCount += 1;\n }\n this._notify(\"coverage\");\n this._appendTimeline({\n sourceId,\n kind: event.kind,\n label: event.tokenName,\n detail: formatArgs(event.args),\n subscriberCount: event.subscriberCount,\n });\n return;\n }\n case \"state:watch-fired\": {\n // timeline 行にはしない(発火は高頻度になりうる活動でありカバレッジが受け皿)。\n // 発火元ツリー(payload の stateElement — protocol v2 追補)別に数える。\n this._statFor(this._watchFiredStats, pathKeyOf(event.path), event.stateElement).count += 1;\n this._notify(\"coverage\");\n return;\n }\n case \"state:watch-error\": {\n // ランタイム側は例外を握って drain を守るため、ここに出ないと失敗が\n // どこにも現れない(console を見ていない限り)。phase を detail の先頭に\n // 置くのは、getter の評価失敗とハンドラの失敗で直し方が違うため。\n this._appendTimeline({\n sourceId,\n kind: \"watch-error\",\n label: event.path,\n detail: `${event.phase}: ${formatError(event.error)}`,\n subscriberCount: null,\n });\n return;\n }\n case \"state:watch-chain-limit\": {\n this._appendTimeline({\n sourceId,\n kind: \"watch-chain-limit\",\n // 打ち切りはバッチ単位(複数ツリーのアドレスが載りうる)— 行の主語は深さ上限\n label: `depth > ${event.maxDepth}`,\n detail: event.paths.join(\", \"),\n subscriberCount: null,\n });\n return;\n }\n case \"state:render-chain-limit\": {\n // 描画の循環(#338)。watch-chain-limit と同じくバッチ単位の打ち切りなので同じ形で並べる\n this._appendTimeline({\n sourceId,\n kind: \"render-chain-limit\",\n label: `depth > ${event.maxDepth}`,\n detail: event.paths.join(\", \"),\n subscriberCount: null,\n });\n return;\n }\n case \"state:path-unresolved\": {\n // ランタイムは warn で続行する(既存ページを止めないため)。lint を\n // 走らせていない相手には、ここが「配線が死んでいる」唯一の可視面になる。\n this._appendTimeline({\n sourceId,\n kind: \"path-unresolved\",\n label: event.path,\n detail: `${event.source}: \"${event.missingSegment}\" is not declared`,\n subscriberCount: null,\n });\n return;\n }\n case \"state:binding-apply-error\": {\n // 隔離された適用失敗。bindingType を detail 先頭に置くのは、構造\n // (for / if)の失敗と値の失敗で影響範囲が違うため。\n this._appendTimeline({\n sourceId,\n kind: \"binding-apply-error\",\n label: event.path,\n detail: `${event.bindingType}: ${formatError(event.error)}`,\n subscriberCount: null,\n });\n return;\n }\n case \"propagation:suppressed\": {\n // two-way エコーの辺単位抑止(主語は node + member — パスではない)\n this._appendTimeline({\n sourceId,\n kind: \"propagation-suppressed\",\n label: event.member,\n detail: `${event.reason} (tx ${event.transactionId}, edge ${event.edgeId})`,\n subscriberCount: null,\n });\n return;\n }\n case \"propagation:coalesced\": {\n this._appendTimeline({\n sourceId,\n kind: \"propagation-coalesced\",\n label: this._labelOf(event.absoluteAddress),\n detail: `tx ${event.droppedTransactionId} dropped (winner tx ${event.winnerTransactionId})`,\n subscriberCount: null,\n });\n return;\n }\n case \"propagation:hop-limit\": {\n this._appendTimeline({\n sourceId,\n kind: \"propagation-hop-limit\",\n label: this._labelOf(event.absoluteAddress),\n detail: `hop ${event.hop} (tx ${event.transactionId})`,\n subscriberCount: null,\n });\n return;\n }\n case \"contract:drift\": {\n // sidecar と live wcBindable の乖離。live が正本(wcstack-manifest-schema.md)。\n // sidecarEvent / liveEvent は型上 optional(reason と結合されていない構造的\n // 型付け)のため、欠落 payload でも \"undefined\" を表示しない防御を入れる。\n const memberPart = event.member !== undefined ? `: ${event.member}` : \"\";\n const eventPart =\n event.reason === \"event-mismatch\"\n ? ` (sidecar ${event.sidecarEvent ?? \"?\"} / live ${event.liveEvent ?? \"?\"})`\n : \"\";\n this._appendTimeline({\n sourceId,\n kind: \"contract-drift\",\n label: event.tag,\n detail: `${event.reason}${memberPart}${eventPart}`,\n subscriberCount: null,\n });\n return;\n }\n case \"contract:manifest-read\":\n case \"contract:unsupported-extension\": {\n // 情報イベント。contract analyzer の戻り値 API から取得でき、timeline は\n // 活動ログに絞る(static-wiring-dx-design.md §6 の行 4 種)。union に\n // 載せることで「型に無いイベントを黙って捨てる」状態だけを解消する。\n return;\n }\n }\n // 全 union メンバーは上の case で return する。ここに到達するのは union 外の\n // 未知イベント(新しいランタイム)だけで、additive プロトコルの意図どおり素通し。\n // union にメンバーを足して case を書き忘れると、この代入が型エラーで止める\n // (watch 2 種 → PR#161、propagation/contract 6 種 → 本修正、の再々発防止)。\n const _exhaustive: never = event;\n void _exhaustive;\n }\n}\n","/**\n * core/declaredScan.ts\n *\n * 遅延アタッチ時の declared ビュー(protocol §6)。\n *\n * binding 台帳はフック接続前の分を復元できないため、DOM に残っている\n * `data-wcs` 属性と `<!--wcs-*: -->` コメントを再スキャンして\n * 「宣言レベルの配線ビュー」を組む。ライブ台帳と違い binding 実体・\n * 接続状態は分からない(UI では \"declared\" バッジで区別する)。\n *\n * パースは表示目的の簡易版(`prop[#mod]: path[|filters]` を\n * `;` 区切りで分解するだけ)。正確なセマンティクスの正本は\n * @wcstack/state の bindTextParser であり、ここでは追随しない。\n */\n\nexport interface IDeclaredBinding {\n /** 宣言が載っている要素(コメント由来の場合は親要素) */\n readonly element: Element;\n readonly propName: string;\n readonly path: string;\n readonly filters: readonly string[];\n /** 宣言ソース: data-wcs 属性か comment ノードか */\n readonly origin: \"attribute\" | \"comment\";\n readonly raw: string;\n}\n\nconst DEFAULT_BIND_ATTRIBUTE = \"data-wcs\";\nconst COMMENT_PREFIXES = [\"wcs-text\", \"wcs-for\", \"wcs-if\", \"wcs-elseif\", \"wcs-else\"];\n\nfunction parseEntry(\n element: Element,\n raw: string,\n origin: \"attribute\" | \"comment\"\n): IDeclaredBinding | null {\n const trimmed = raw.trim();\n if (trimmed.length === 0) {\n return null;\n }\n const colon = trimmed.indexOf(\":\");\n if (colon < 0) {\n return null;\n }\n const propName = trimmed.slice(0, colon).trim();\n const rhs = trimmed.slice(colon + 1).trim();\n if (propName.length === 0 || rhs.length === 0) {\n return null;\n }\n const [pathPart, ...filterParts] = rhs.split(\"|\").map((part) => part.trim());\n // v2: `@name` セレクタは撤去済み(ランタイムは parse error にする)。\n // 簡易パーサはパスをそのまま流す — 壊れた宣言の可視化はランタイム側の役目。\n const path = pathPart;\n return {\n element,\n propName,\n path,\n filters: filterParts.filter((part) => part.length > 0),\n origin,\n raw: trimmed,\n };\n}\n\n/**\n * rootNode 配下の宣言配線を列挙する。\n * @param root 走査起点(Document / ShadowRoot / Element)\n * @param bindAttributeName バインド属性名(既定 data-wcs。setConfig で変えたページ用)\n */\nexport function scanDeclaredBindings(\n root: ParentNode,\n bindAttributeName: string = DEFAULT_BIND_ATTRIBUTE\n): IDeclaredBinding[] {\n const result: IDeclaredBinding[] = [];\n\n // data-wcs 属性(template の for/if 宣言もこの属性に載る)\n for (const element of root.querySelectorAll(`[${bindAttributeName}]`)) {\n // querySelectorAll の一致条件上、属性は必ず存在する\n const raw = element.getAttribute(bindAttributeName)!;\n for (const part of raw.split(\";\")) {\n const entry = parseEntry(element, part, \"attribute\");\n if (entry !== null) {\n result.push(entry);\n }\n }\n }\n\n // <!--wcs-text: path--> 等のコメントノード(mustache 展開後の姿)\n const document = root.ownerDocument ?? (root as Document);\n const walker = document.createTreeWalker(root as Node, NodeFilter.SHOW_COMMENT);\n let comment = walker.nextNode();\n while (comment !== null) {\n // コメントノードの textContent は常に文字列\n const text = comment.textContent!.trim();\n const prefix = COMMENT_PREFIXES.find(\n (candidate) => text === candidate || text.startsWith(candidate + \":\")\n );\n if (prefix !== undefined) {\n const parentElement =\n comment.parentNode instanceof Element ? comment.parentNode : null;\n if (parentElement !== null) {\n const body = text === prefix ? \"\" : text.slice(prefix.length + 1).trim();\n if (body.length > 0) {\n const propName = prefix === \"wcs-text\" ? \"textContent\" : prefix.slice(\"wcs-\".length);\n // propName / body とも非空のため parseEntry は必ず成功する\n result.push(parseEntry(parentElement, `${propName}: ${body}`, \"comment\")!);\n }\n }\n }\n comment = walker.nextNode();\n }\n\n return result;\n}\n","/**\n * shell/WcsDevtools.ts\n *\n * `<wcs-devtools>` — ページ内オーバーレイ DevTools 本体(devtools-tag-design.md)。\n *\n * - ShadowRoot 内で完結(ページの CSS/DOM を変更しない)\n * - ハイライトはページ要素の style/class を触らず、fixed 配置の\n * オーバーレイ枠で描く(devtools-tag-design.md §2)\n * - UI レンダリングは vanilla DOM(記録済み決定: inspected ランタイムの\n * updater キューに devtools 描画負荷を混ぜない = 観測者効果の排除。\n * wcs-state ドッグフーディングは Phase 2 で再評価)\n * - 描画は Core の change 通知を rAF で 1 回に合流(イベント毎 DOM 追加禁止、\n * devtools-tag-design.md §3.3)\n */\n\nimport { DevtoolsCore, IRosterEntry, ITimelineEntry, IWiringEntry } from \"../core/DevtoolsCore\";\nimport { formatValue } from \"../core/formatValue\";\nimport { IDeclaredBinding, scanDeclaredBindings } from \"../core/declaredScan\";\nimport { IDeclaredBindingLike, IKeyedSubscriptionSummaryLike, IMountOverlaySummaryLike } from \"../protocol/types\";\n\nconst STYLE_TEXT = /* css */ `\n:host {\n all: initial;\n position: fixed;\n z-index: 2147483647;\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 12px;\n inset: auto 0 0 auto;\n}\n* { box-sizing: border-box; }\n.badge {\n position: fixed;\n right: 12px;\n bottom: 12px;\n width: 40px;\n height: 40px;\n border-radius: 20px;\n border: 1px solid #2b4f78;\n background: #10263f;\n color: #9fd0ff;\n font-weight: 700;\n cursor: pointer;\n}\n.panel {\n position: fixed;\n display: flex;\n flex-direction: column;\n background: #0d1b2a;\n color: #d7e3f4;\n border: 1px solid #2b4f78;\n box-shadow: 0 0 24px rgba(0,0,0,.5);\n}\n.panel.dock-bottom { left: 0; right: 0; bottom: 0; height: 45vh; }\n.panel.dock-right { top: 0; right: 0; bottom: 0; width: 420px; }\n.panel[hidden] { display: none; }\nheader {\n display: flex;\n gap: 6px;\n align-items: center;\n padding: 6px 8px;\n border-bottom: 1px solid #2b4f78;\n background: #10263f;\n}\nheader .title { font-weight: 700; color: #9fd0ff; margin-right: 4px; }\nheader select, header button {\n font: inherit;\n background: #16324f;\n color: #d7e3f4;\n border: 1px solid #2b4f78;\n border-radius: 4px;\n padding: 2px 8px;\n cursor: pointer;\n}\nheader button[aria-pressed=\"true\"] { background: #2b5d8f; }\nheader .spacer { flex: 1; }\n.panes { display: flex; flex: 1; min-height: 0; }\n.pane { flex: 1; min-width: 0; overflow: auto; padding: 6px 8px; border-right: 1px solid #1d3a5c; }\n.pane:last-child { border-right: none; }\n.pane h3 {\n margin: 0 0 6px;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: .08em;\n color: #7ba7d4;\n}\n.tree-row { display: flex; gap: 6px; padding: 1px 0; align-items: baseline; white-space: nowrap; }\n.tree-row .toggle { width: 14px; cursor: pointer; color: #7ba7d4; user-select: none; }\n.tree-row .key { color: #9fd0ff; cursor: pointer; }\n.tree-row .value { color: #ffd9a0; overflow: hidden; text-overflow: ellipsis; }\n.tree-row .value.editable { cursor: pointer; }\n.tree-row input { font: inherit; background: #16324f; color: #ffd9a0; border: 1px solid #2b4f78; }\n.badge-tag {\n display: inline-block;\n padding: 0 4px;\n border-radius: 3px;\n font-size: 10px;\n background: #26456a;\n color: #a8c6e8;\n}\n.badge-tag.warn { background: #6a3326; color: #ffb3a0; }\n.badge-tag.declared { background: #4a4426; color: #efe3a0; }\n.wiring-row, .timeline-row { padding: 1px 0; white-space: nowrap; }\n.wiring-row .prop { color: #b7f0c0; }\n.wiring-row .path { color: #9fd0ff; }\n.timeline-row .t { color: #6f88a3; }\n.timeline-row .label { color: #9fd0ff; }\n.timeline-row .detail { color: #ffd9a0; }\n.timeline-row .kind { display: inline-block; min-width: 52px; text-align: center; }\n.empty { color: #6f88a3; font-style: italic; padding: 4px 0; }\n.notice { color: #efe3a0; padding: 2px 0 6px; }\n.notice button { font: inherit; margin-left: 6px; cursor: pointer; }\n.wiring-row .detail { color: #6f88a3; }\n.overlays-heading { margin-top: 10px; }\n.overlay-row { padding: 1px 0; white-space: nowrap; }\n.overlay-row .prop { color: #b7f0c0; }\n.overlay-row .path { color: #9fd0ff; }\n.overlay-row .detail { color: #6f88a3; }\n.keyed-row { padding: 1px 0; white-space: nowrap; }\n.keyed-row .path { color: #9fd0ff; }\n.keyed-row .detail { color: #6f88a3; }\n.wiring-tabs { padding: 0 0 4px; }\n.wiring-tabs button { font: inherit; cursor: pointer; margin-right: 4px; opacity: 0.6; }\n.wiring-tabs button.active { opacity: 1; font-weight: bold; }\n.hl-box {\n position: fixed;\n pointer-events: none;\n border: 1px solid #58c2ff;\n background: rgba(88,194,255,.18);\n}\n`;\n\ntype PaneName = \"state\" | \"wiring\" | \"timeline\";\n\n/** タイムラインの DOM 描画上限(buffer とは別。§3.3 のバースト圧縮の一部) */\nconst TIMELINE_RENDER_LIMIT = 200;\n/** リスト展開の 1 階層あたり表示件数上限 */\nconst LIST_CHILD_LIMIT = 20;\n\ninterface ITreeNodeRef {\n readonly path: string;\n readonly indexes: number[];\n}\n\nfunction nodeKeyOf(ref: ITreeNodeRef): string {\n return `${ref.path}#${ref.indexes.join(\",\")}`;\n}\n\nfunction isExpandable(value: unknown): boolean {\n if (Array.isArray(value)) {\n return true;\n }\n if (value === null || typeof value !== \"object\") {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nfunction coerceInput(text: string): unknown {\n const trimmed = text.trim();\n try {\n return JSON.parse(trimmed);\n } catch {\n return text;\n }\n}\n\nexport class WcsDevtools extends HTMLElement {\n static get observedAttributes(): string[] {\n return [\"open\", \"dock\", \"hotkey\"];\n }\n\n private _core: DevtoolsCore | null = null;\n private _removeCoreListener: (() => void) | null = null;\n private _panel: HTMLElement | null = null;\n private _badge: HTMLButtonElement | null = null;\n private _stateSelect: HTMLSelectElement | null = null;\n private _paneElements: Partial<Record<PaneName, HTMLElement>> = {};\n /** Wiring ペインの表示モード(配線一覧 / カバレッジ突合)。 */\n private _wiringView: \"wiring\" | \"coverage\" = \"wiring\";\n private _highlightLayer: HTMLElement | null = null;\n private _dirtyPanes: Set<PaneName> = new Set();\n private _renderScheduled: boolean = false;\n private _selectedRosterKey: string | null = null;\n private _selectedPath: string | null = null;\n private _pickedNode: Node | null = null;\n private _pickMode: boolean = false;\n private _expanded: Set<string> = new Set();\n private _hotkeyHandler: ((event: KeyboardEvent) => void) | null = null;\n private _pickHandler: ((event: MouseEvent) => void) | null = null;\n\n get core(): DevtoolsCore | null {\n return this._core;\n }\n\n connectedCallback(): void {\n // SSR では不活性(protocol 原則 6)\n if (document.documentElement.hasAttribute(\"data-wcs-server\")) {\n return;\n }\n if (this.shadowRoot === null) {\n this._buildShadow();\n }\n const capacity = Number(this.getAttribute(\"buffer\") ?? \"\");\n this._core = new DevtoolsCore({\n timelineCapacity: Number.isFinite(capacity) && capacity > 0 ? capacity : undefined,\n });\n this._removeCoreListener = this._core.onChange((kind) => {\n if (kind === \"roster\" || kind === \"sources\") {\n this._markDirty(\"state\");\n this._markDirty(\"wiring\");\n } else if (kind === \"wiring\") {\n this._markDirty(\"wiring\");\n } else if (kind === \"coverage\") {\n // カバレッジは Wiring ペインのタブとして描画される\n if (this._wiringView === \"coverage\") {\n this._markDirty(\"wiring\");\n }\n } else {\n this._markDirty(\"timeline\");\n }\n });\n this._core.connect();\n this._applyDock();\n this._applyOpen();\n this._installHotkey();\n this._markDirty(\"state\");\n this._markDirty(\"wiring\");\n this._markDirty(\"timeline\");\n }\n\n disconnectedCallback(): void {\n this._removeCoreListener?.();\n this._removeCoreListener = null;\n this._core?.disconnect();\n this._core = null;\n this._uninstallHotkey();\n this._exitPickMode();\n }\n\n attributeChangedCallback(name: string): void {\n if (this.shadowRoot === null) {\n return;\n }\n if (name === \"open\") {\n this._applyOpen();\n } else if (name === \"dock\") {\n this._applyDock();\n } else if (name === \"hotkey\") {\n this._uninstallHotkey();\n this._installHotkey();\n }\n }\n\n /** テスト用: rAF を待たずに保留中の描画を実行する */\n __flushRenderForTest(): void {\n this._renderDirty();\n }\n\n // --- shadow construction ---\n\n private _buildShadow(): void {\n const shadow = this.attachShadow({ mode: \"open\" });\n const style = document.createElement(\"style\");\n style.textContent = STYLE_TEXT;\n shadow.append(style);\n\n const badge = document.createElement(\"button\");\n badge.className = \"badge\";\n badge.title = \"wcstack DevTools\";\n badge.textContent = \"WCS\";\n badge.addEventListener(\"click\", () => this.toggle());\n shadow.append(badge);\n this._badge = badge;\n\n const panel = document.createElement(\"div\");\n panel.className = \"panel dock-bottom\";\n panel.hidden = true;\n\n const header = document.createElement(\"header\");\n const title = document.createElement(\"span\");\n title.className = \"title\";\n title.textContent = \"wcstack devtools\";\n header.append(title);\n\n const stateSelect = document.createElement(\"select\");\n stateSelect.title = \"state element\";\n stateSelect.addEventListener(\"change\", () => {\n this._selectedRosterKey = stateSelect.value || null;\n this._selectedPath = null;\n this._expanded.clear();\n this._markDirty(\"state\");\n this._markDirty(\"wiring\");\n });\n header.append(stateSelect);\n this._stateSelect = stateSelect;\n\n const pickButton = this._headerButton(header, \"⌖ pick\", \"pick a page element\");\n pickButton.addEventListener(\"click\", () => {\n if (this._pickMode) {\n this._exitPickMode();\n } else {\n this._enterPickMode();\n }\n pickButton.setAttribute(\"aria-pressed\", String(this._pickMode));\n });\n pickButton.dataset[\"role\"] = \"pick\";\n\n const pauseButton = this._headerButton(header, \"⏸\", \"pause timeline\");\n pauseButton.addEventListener(\"click\", () => {\n const core = this._core;\n if (core === null) {\n return;\n }\n core.paused = !core.paused;\n pauseButton.setAttribute(\"aria-pressed\", String(core.paused));\n });\n pauseButton.dataset[\"role\"] = \"pause\";\n\n const clearButton = this._headerButton(header, \"🗑\", \"clear timeline\");\n clearButton.addEventListener(\"click\", () => {\n this._core?.clearTimeline();\n });\n clearButton.dataset[\"role\"] = \"clear\";\n\n const spacer = document.createElement(\"span\");\n spacer.className = \"spacer\";\n header.append(spacer);\n\n const dockButton = this._headerButton(header, \"dock\", \"toggle dock position\");\n dockButton.addEventListener(\"click\", () => {\n const next = (this.getAttribute(\"dock\") ?? \"bottom\") === \"bottom\" ? \"right\" : \"bottom\";\n this.setAttribute(\"dock\", next);\n });\n dockButton.dataset[\"role\"] = \"dock\";\n\n const closeButton = this._headerButton(header, \"×\", \"close\");\n closeButton.addEventListener(\"click\", () => this.toggle(false));\n closeButton.dataset[\"role\"] = \"close\";\n\n panel.append(header);\n\n const panes = document.createElement(\"div\");\n panes.className = \"panes\";\n for (const [name, heading] of [\n [\"state\", \"State\"],\n [\"wiring\", \"Wiring\"],\n [\"timeline\", \"Timeline\"],\n ] as const) {\n const pane = document.createElement(\"section\");\n pane.className = `pane pane-${name}`;\n const h3 = document.createElement(\"h3\");\n h3.textContent = heading;\n const body = document.createElement(\"div\");\n body.className = \"pane-body\";\n pane.append(h3, body);\n panes.append(pane);\n this._paneElements[name] = body;\n }\n panel.append(panes);\n shadow.append(panel);\n this._panel = panel;\n\n const highlightLayer = document.createElement(\"div\");\n highlightLayer.className = \"hl-layer\";\n shadow.append(highlightLayer);\n this._highlightLayer = highlightLayer;\n }\n\n private _headerButton(header: HTMLElement, label: string, title: string): HTMLButtonElement {\n const button = document.createElement(\"button\");\n button.textContent = label;\n button.title = title;\n button.setAttribute(\"aria-pressed\", \"false\");\n header.append(button);\n return button;\n }\n\n // --- open/close/dock/hotkey ---\n\n get open(): boolean {\n return this.hasAttribute(\"open\");\n }\n\n toggle(force?: boolean): void {\n const next = force ?? !this.open;\n if (next) {\n this.setAttribute(\"open\", \"\");\n } else {\n this.removeAttribute(\"open\");\n }\n }\n\n private _applyOpen(): void {\n // shadowRoot 構築後にしか呼ばれない(attributeChangedCallback 側でガード済み)\n this._panel!.hidden = !this.open;\n this._badge!.hidden = this.open;\n if (this.open) {\n this._markDirty(\"state\");\n this._markDirty(\"wiring\");\n this._markDirty(\"timeline\");\n }\n }\n\n private _applyDock(): void {\n // shadowRoot 構築後にしか呼ばれない(attributeChangedCallback 側でガード済み)\n const dock = this.getAttribute(\"dock\") === \"right\" ? \"right\" : \"bottom\";\n this._panel!.classList.toggle(\"dock-right\", dock === \"right\");\n this._panel!.classList.toggle(\"dock-bottom\", dock === \"bottom\");\n }\n\n private _installHotkey(): void {\n const spec = this.getAttribute(\"hotkey\") ?? \"Alt+Shift+D\";\n if (spec === \"none\") {\n return;\n }\n const parts = spec.split(\"+\").map((part) => part.trim().toLowerCase());\n const key = parts[parts.length - 1];\n const alt = parts.includes(\"alt\");\n const shift = parts.includes(\"shift\");\n const ctrl = parts.includes(\"ctrl\");\n const meta = parts.includes(\"meta\");\n this._hotkeyHandler = (event: KeyboardEvent) => {\n if (\n event.key.toLowerCase() === key &&\n event.altKey === alt &&\n event.shiftKey === shift &&\n event.ctrlKey === ctrl &&\n event.metaKey === meta\n ) {\n event.preventDefault();\n this.toggle();\n }\n };\n window.addEventListener(\"keydown\", this._hotkeyHandler);\n }\n\n private _uninstallHotkey(): void {\n if (this._hotkeyHandler !== null) {\n window.removeEventListener(\"keydown\", this._hotkeyHandler);\n this._hotkeyHandler = null;\n }\n }\n\n // --- pick mode ---\n\n private _enterPickMode(): void {\n // 呼び出し元(pick ボタン)が toggle 済みのため、ここでは常に開始でよい\n this._pickMode = true;\n // click を capture で奪う(誤操作防止、devtools-tag-design.md G-U2 の既定側)\n this._pickHandler = (event: MouseEvent) => {\n const target = event.target as Node;\n // devtools 自身(実ブラウザでは retarget されて host、shadow 非 retarget 環境では\n // shadow 内ノード)は pick 対象外\n if (target.getRootNode() === this.shadowRoot || target === this) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this._pickedNode = target;\n this._selectedPath = null;\n this._exitPickMode();\n this._markDirty(\"wiring\");\n };\n document.addEventListener(\"click\", this._pickHandler, { capture: true });\n }\n\n private _exitPickMode(): void {\n if (this._pickHandler !== null) {\n document.removeEventListener(\"click\", this._pickHandler, { capture: true });\n this._pickHandler = null;\n }\n this._pickMode = false;\n const pickButton = this.shadowRoot?.querySelector('button[data-role=\"pick\"]');\n pickButton?.setAttribute(\"aria-pressed\", \"false\");\n }\n\n // --- rendering ---\n\n private _markDirty(pane: PaneName): void {\n this._dirtyPanes.add(pane);\n if (this._renderScheduled) {\n return;\n }\n this._renderScheduled = true;\n requestAnimationFrame(() => {\n this._renderDirty();\n });\n }\n\n private _renderDirty(): void {\n this._renderScheduled = false;\n if (this._core === null || this.shadowRoot === null) {\n this._dirtyPanes.clear();\n return;\n }\n const dirty = this._dirtyPanes;\n this._dirtyPanes = new Set();\n if (dirty.has(\"state\")) {\n this._renderStatePane();\n }\n if (dirty.has(\"wiring\")) {\n this._renderWiringPane();\n }\n if (dirty.has(\"timeline\")) {\n this._renderTimelinePane();\n }\n }\n\n private _rosterKey(entry: IRosterEntry): string {\n return `${entry.sourceId}:${entry.label}`;\n }\n\n private _selectedRoster(): IRosterEntry | null {\n const core = this._core!;\n const roster = core.getRoster();\n if (roster.length === 0) {\n return null;\n }\n const found = roster.find((entry) => this._rosterKey(entry) === this._selectedRosterKey);\n return found ?? roster[0];\n }\n\n private _renderStatePane(): void {\n const core = this._core!;\n const body = this._paneElements[\"state\"]!;\n const select = this._stateSelect!;\n const roster = core.getRoster();\n const selected = this._selectedRoster();\n\n select.replaceChildren(\n ...roster.map((entry) => {\n const option = document.createElement(\"option\");\n option.value = this._rosterKey(entry);\n option.textContent = `${entry.label} (${entry.sourceId.slice(0, 12)})`;\n option.selected = selected !== null && this._rosterKey(entry) === this._rosterKey(selected);\n return option;\n })\n );\n\n body.replaceChildren();\n if (selected === null) {\n body.append(this._emptyRow(\"no <wcs-state> elements observed\"));\n return;\n }\n this._selectedRosterKey = this._rosterKey(selected);\n const keys = core.keysOf(selected);\n if (keys.length === 0) {\n body.append(this._emptyRow(\"no readable keys (runtime without keys() API?)\"));\n // keys が読めないランタイムでも overlays は独立に読める可能性があるため出す\n this._renderOverlaysSection(body, selected);\n this._renderKeyedSection(body, selected);\n return;\n }\n for (const key of keys) {\n this._renderTreeNode(body, selected, { path: key, indexes: [] }, key, 0);\n }\n this._renderOverlaysSection(body, selected);\n this._renderKeyedSection(body, selected);\n }\n\n /**\n * 選択ツリーの鍵付き購読セクション(keyedSubscriptions — protocol v2 追補・要件 D17)。\n * `$eq` / `$eqPath` / `$eqIndex` の購読は依存グラフの動的な変化で、上の状態ツリーにも\n * Wiring の台帳にも現れない。path ごとに購読の数と最後の値を出し、getter 由来の path で\n * 追跡付きの読みに落ちたもの(変わるたびに読む getter が全部再評価される)を warn で目立たせる。\n * 未提供の旧ランタイム(null)と `$eq` 系が一度も評価されていないツリー(空配列)では出さない。\n * pull の時機は Overlays と同じく State ペインの再描画に乗る。\n */\n private _renderKeyedSection(body: HTMLElement, entry: IRosterEntry): void {\n const summaries = this._core!.keyedSubscriptionsOf(entry);\n if (summaries === null || summaries.length === 0) {\n return;\n }\n const heading = document.createElement(\"h3\");\n heading.className = \"overlays-heading\";\n heading.textContent = `Keyed selection (${summaries.length} path${summaries.length === 1 ? \"\" : \"s\"})`;\n body.append(heading);\n for (const summary of summaries) {\n body.append(this._keyedRow(summary));\n }\n }\n\n /** 鍵付き購読 1 path の描画(path・購読の数・最後の値、または追跡付きへの落ち)。 */\n private _keyedRow(summary: IKeyedSubscriptionSummaryLike): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"keyed-row\";\n const path = document.createElement(\"span\");\n path.className = \"path\";\n path.textContent = summary.path;\n row.append(path);\n if (summary.tracked) {\n const badge = document.createElement(\"span\");\n badge.className = \"badge-tag warn\";\n badge.textContent = \"tracked\";\n badge.title = \"the path is a getter or under one, so $eq cannot subscribe by key: every getter that reads it re-evaluates when it changes\";\n row.append(document.createTextNode(\" \"), badge);\n }\n const details: string[] = [];\n // 空になった鍵は台帳から消えるので、鍵があれば行もある\n if (summary.rows > 0) {\n details.push(`rows ${summary.rows} · keys ${summary.keys}`);\n }\n if (summary.lists > 0) {\n details.push(`list watchers ${summary.lists}`);\n }\n if (!summary.tracked) {\n details.push(`last ${formatValue(summary.lastValue, 1)}`);\n }\n const detail = document.createElement(\"span\");\n detail.className = \"detail\";\n detail.textContent = details.length > 0 ? ` ${details.join(\" · \")}` : \"\";\n row.append(detail);\n return row;\n }\n\n /**\n * 選択ツリーのマウント記録セクション(overlays — protocol v2・D20 の可視化)。\n * マウントの私有キー・getter はオーバーレイ専用アドレス空間(マーカー `#m<id>`)に\n * 住み、上の状態ツリー(keys/read)には現れないため、ここが唯一の可視面。\n * overlays 未提供の旧ランタイム(null)ではセクションごと出さない(後方互換)。\n * マウント無し(空配列)も見出しだけ残さない。pull は State ペインの再描画\n * (roster / sources 変更・ツリー切替)にそのまま乗る — 専用 polling は足さない\n * (観測者効果の排除、devtools-tag-design.md の rAF 合流と同じ姿勢)。\n */\n private _renderOverlaysSection(body: HTMLElement, entry: IRosterEntry): void {\n const overlays = this._core!.overlaysOf(entry);\n if (overlays === null || overlays.length === 0) {\n return;\n }\n const heading = document.createElement(\"h3\");\n heading.className = \"overlays-heading\";\n heading.textContent = `Overlays (${overlays.length} mount${overlays.length === 1 ? \"\" : \"s\"})`;\n body.append(heading);\n for (const overlay of overlays) {\n body.append(this._overlayRow(overlay));\n }\n }\n\n /** マウント記録 1 件の描画(マーカー・コンポーネント・マウント表・私有面)。 */\n private _overlayRow(overlay: IMountOverlaySummaryLike): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"overlay-row\";\n const marker = document.createElement(\"span\");\n marker.className = \"badge-tag\";\n marker.textContent = overlay.marker;\n const tag = document.createElement(\"span\");\n tag.className = \"prop\";\n tag.textContent = `<${overlay.componentTag}>`;\n const prop = document.createElement(\"span\");\n prop.className = \"path\";\n // stateProp はホスト側の `state[.sub]:` 宣言の書き手語彙\n prop.textContent = overlay.stateProp;\n row.append(marker, document.createTextNode(\" \"), tag, document.createTextNode(\" \"), prop);\n const details: string[] = [];\n for (const entry of overlay.mountTable) {\n // 内側接頭辞が空 = ルートエントリ。外側パスへの対応で読ませる\n details.push(`${entry.inner === \"\" ? \"(root)\" : entry.inner} → ${entry.outer}`);\n }\n if (overlay.delta > 0) {\n details.push(`Δ${overlay.delta}`);\n }\n if (overlay.privateKeys.length > 0) {\n details.push(`private: ${overlay.privateKeys.join(\", \")}`);\n }\n // 公開 getter の公開パス。オーバーレイ export より前の v2 ランタイムは\n // フィールドを持たないので `?? []` で受ける(protocol §3)\n const exports = overlay.exports ?? [];\n if (exports.length > 0) {\n details.push(`exports: ${exports.join(\", \")}`);\n }\n if (overlay.getterKeys.length > 0) {\n details.push(`getters: ${overlay.getterKeys.join(\", \")}`);\n }\n if (details.length > 0) {\n const detail = document.createElement(\"span\");\n detail.className = \"detail\";\n detail.textContent = ` ${details.join(\" · \")}`;\n row.append(detail);\n }\n return row;\n }\n\n private _renderTreeNode(\n container: HTMLElement,\n entry: IRosterEntry,\n ref: ITreeNodeRef,\n label: string,\n depth: number\n ): void {\n const core = this._core!;\n let value: unknown;\n let readable = true;\n try {\n value = core.readValue(entry, ref.path, ref.indexes);\n } catch {\n readable = false;\n }\n\n const row = document.createElement(\"div\");\n row.className = \"tree-row\";\n row.style.paddingLeft = `${depth * 14}px`;\n\n const expandable = readable && isExpandable(value);\n const key = nodeKeyOf(ref);\n const expanded = expandable && this._expanded.has(key);\n\n const toggle = document.createElement(\"span\");\n toggle.className = \"toggle\";\n toggle.textContent = expandable ? (expanded ? \"▾\" : \"▸\") : \"\";\n if (expandable) {\n toggle.addEventListener(\"click\", () => {\n if (this._expanded.has(key)) {\n this._expanded.delete(key);\n } else {\n this._expanded.add(key);\n }\n this._markDirty(\"state\");\n });\n }\n row.append(toggle);\n\n const keySpan = document.createElement(\"span\");\n keySpan.className = \"key\";\n keySpan.textContent = `${label}:`;\n keySpan.title = ref.path;\n keySpan.addEventListener(\"click\", () => {\n this._selectedPath = ref.path;\n this._pickedNode = null;\n this._markDirty(\"wiring\");\n this._highlightPath(entry, ref.path);\n });\n row.append(keySpan);\n\n const valueSpan = document.createElement(\"span\");\n valueSpan.className = \"value\";\n if (!readable) {\n valueSpan.textContent = \"(unreadable getter)\";\n } else {\n valueSpan.textContent = formatValue(value, 1);\n const editable = value === null || typeof value !== \"object\";\n if (editable && typeof value !== \"function\") {\n valueSpan.classList.add(\"editable\");\n valueSpan.title = \"click to edit\";\n valueSpan.addEventListener(\"click\", () => {\n this._beginEdit(row, valueSpan, entry, ref, value);\n });\n }\n }\n row.append(valueSpan);\n container.append(row);\n\n if (expanded) {\n if (Array.isArray(value)) {\n const limit = Math.min(value.length, LIST_CHILD_LIMIT);\n for (let index = 0; index < limit; index++) {\n this._renderTreeNode(\n container,\n entry,\n { path: `${ref.path}.*`, indexes: [...ref.indexes, index] },\n `[${index}]`,\n depth + 1\n );\n }\n if (value.length > limit) {\n const more = this._emptyRow(`…(${value.length} items)`);\n more.style.paddingLeft = `${(depth + 1) * 14}px`;\n container.append(more);\n }\n } else {\n for (const childKey of Object.keys(value as Record<string, unknown>)) {\n this._renderTreeNode(\n container,\n entry,\n { path: `${ref.path}.${childKey}`, indexes: ref.indexes },\n childKey,\n depth + 1\n );\n }\n }\n }\n }\n\n private _beginEdit(\n row: HTMLElement,\n valueSpan: HTMLElement,\n entry: IRosterEntry,\n ref: ITreeNodeRef,\n current: unknown\n ): void {\n const input = document.createElement(\"input\");\n input.value = typeof current === \"string\" ? current : String(current);\n const commit = (): void => {\n // 編集は通常のリアクティブパイプラインを通る(devtools-tag-design.md §3.1)\n this._core?.writeValue(entry, ref.path, coerceInput(input.value), ref.indexes);\n this._markDirty(\"state\");\n };\n input.addEventListener(\"keydown\", (event) => {\n if (event.key === \"Enter\") {\n commit();\n } else if (event.key === \"Escape\") {\n this._markDirty(\"state\");\n }\n });\n row.replaceChild(input, valueSpan);\n input.focus();\n }\n\n private _renderWiringPane(): void {\n const core = this._core!;\n const body = this._paneElements[\"wiring\"]!;\n body.replaceChildren();\n\n // 配線一覧 / カバレッジのビュートグル(devtools-tag-design.md §3.2 / 設計 §4)\n const tabs = document.createElement(\"div\");\n tabs.className = \"wiring-tabs\";\n for (const [view, label] of [[\"wiring\", \"wiring\"], [\"coverage\", \"coverage\"]] as const) {\n const button = document.createElement(\"button\");\n button.textContent = label;\n if (this._wiringView === view) {\n button.classList.add(\"active\");\n }\n button.addEventListener(\"click\", () => {\n this._wiringView = view;\n this._markDirty(\"wiring\");\n });\n tabs.append(button);\n }\n body.append(tabs);\n\n if (this._wiringView === \"coverage\") {\n this._renderCoverageView(body);\n return;\n }\n\n let entries: IWiringEntry[];\n let contextLabel: string;\n if (this._pickedNode !== null) {\n entries = core.getWiringForNode(this._pickedNode);\n const target = this._pickedNode;\n contextLabel =\n target instanceof Element ? `<${target.tagName.toLowerCase()}>` : target.nodeName;\n } else if (this._selectedPath !== null) {\n const selected = this._selectedRoster();\n // 選択中のツリーでスコープ(複数ツリーの同名パスを混ぜない)\n entries =\n selected !== null ? core.getWiringForPath(this._selectedPath, selected.summary.element) : [];\n contextLabel = this._selectedPath;\n } else {\n entries = core.getAllWiring();\n contextLabel = \"all\";\n }\n\n const info = document.createElement(\"div\");\n info.textContent = `context: ${contextLabel} — ${entries.length} live binding${entries.length === 1 ? \"\" : \"s\"}`;\n body.append(info);\n\n if (entries.length > 0) {\n for (const entry of entries) {\n body.append(this._wiringRow(entry));\n }\n return;\n }\n\n // ライブ台帳が空 → declared ビューへフォールバック(protocol §6)。\n // ランタイムが getDeclaredBindings を実装していれば正本パーサの宣言集合を使い、\n // 旧ランタイムだけ簡易パーサ(declaredScan — bindTextParser 非追随)に落ちる。\n const canonical = core.getCanonicalDeclared();\n const selected = this._selectedRoster();\n const legacy =\n canonical === null && selected !== null ? scanDeclaredBindings(this._scanRootOf(selected)) : [];\n if ((canonical?.length ?? 0) === 0 && legacy.length === 0) {\n body.append(this._emptyRow(\"no bindings observed\"));\n return;\n }\n const notice = document.createElement(\"div\");\n notice.className = \"notice\";\n const tag = document.createElement(\"span\");\n tag.className = \"badge-tag declared\";\n tag.textContent = canonical !== null ? \"declared (canonical)\" : \"declared\";\n notice.append(tag, document.createTextNode(\" attached late — reload to capture live bindings \"));\n const reload = document.createElement(\"button\");\n reload.textContent = \"reload\";\n reload.addEventListener(\"click\", () => {\n location.reload();\n });\n notice.append(reload);\n body.append(notice);\n if (canonical !== null) {\n for (const entry of canonical) {\n body.append(this._canonicalDeclaredRow(entry));\n }\n } else {\n for (const entry of legacy) {\n body.append(this._declaredRow(entry));\n }\n }\n }\n\n /**\n * カバレッジビュー: 宣言(watchPaths / token 宣言 / canonical declared)×\n * 実測(発火・emit・attach)の突合表。観測開始以降の実測であることを常時明示する\n * (protocol §6 — 台帳の過去は再構成できない)。\n */\n private _renderCoverageView(body: HTMLElement): void {\n const core = this._core!;\n const since = core.observingSince;\n const info = document.createElement(\"div\");\n // 壁時計表示(performance.now 原点からの換算)。「ページ内経過秒」だと\n // devtools を後から開いたときに観測開始点として読めない。\n const sinceLabel = since === null\n ? null\n : new Date(Date.now() - (performance.now() - since)).toLocaleTimeString();\n info.textContent = sinceLabel === null\n ? \"not observing\"\n : `observing since ${sinceLabel} (declared vs measured after this point)`;\n body.append(info);\n\n // 選択中のツリーでスコープ(複数ツリーの同名 watch パス / token 名を混ぜない —\n // wiring のパス文脈と同じ流儀。protocol v2 追補のツリー識別が実測面を分ける)\n const selected = this._selectedRoster();\n const report = core.getCoverageReport(selected?.summary.element);\n if (report.length === 0) {\n body.append(this._emptyRow(\"nothing declared to cover\"));\n return;\n }\n for (const entry of report) {\n const row = document.createElement(\"div\");\n row.className = \"wiring-row\";\n const kind = document.createElement(\"span\");\n kind.className = \"badge-tag\";\n kind.textContent = entry.kind;\n const status = document.createElement(\"span\");\n status.className = \"badge-tag\";\n status.textContent = entry.count > 1 ? `${entry.status} ×${entry.count}` : entry.status;\n if (entry.status === \"never\" || entry.status === \"never-attached\"\n || entry.status === \"emitted-unheard\") {\n // 「宣言したのに一度も効いていない」= このビューの主役。空撃ちも同列の warn\n status.classList.add(\"warn\");\n } else if (entry.status === \"prerequisite-missing\") {\n // 発火前提が未成立(未発火とは別問題)— declared 系の淡色で区別\n status.classList.add(\"declared\");\n }\n const label = document.createElement(\"span\");\n label.className = \"path\";\n label.textContent = ` ${entry.name} `;\n row.append(kind, document.createTextNode(\" \"), label, status);\n if (entry.note !== null) {\n // note はホバー頼み(title)にせず常時表示する — 前提未成立の理由は\n // このビューの本文情報で、ツールチップだと存在に気づけない\n const note = document.createElement(\"span\");\n note.className = \"detail\";\n note.textContent = ` ${entry.note}`;\n row.append(note);\n }\n body.append(row);\n }\n }\n\n /** canonical declared(正本パーサ由来・宣言集合)の 1 行。 */\n private _canonicalDeclaredRow(entry: IDeclaredBindingLike): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"wiring-row\";\n const type = document.createElement(\"span\");\n type.className = \"badge-tag declared\";\n type.textContent = entry.origin;\n const prop = document.createElement(\"span\");\n prop.className = \"prop\";\n prop.textContent = entry.propName;\n const path = document.createElement(\"span\");\n path.className = \"path\";\n const filters = entry.outFilters.map((f) => ` | ${f.filterName}(${f.args.join(\",\")})`).join(\"\");\n path.textContent = `${entry.statePathName}${filters}`;\n row.append(type, document.createTextNode(\" \"), prop, document.createTextNode(\" ← \"), path);\n if (entry.node !== null) {\n const target = entry.node;\n row.addEventListener(\"click\", () => {\n this._highlightNodes([target]);\n });\n }\n return row;\n }\n\n private _scanRootOf(entry: IRosterEntry): ParentNode {\n // instanceof はテスト環境(happy-dom)の Document 実体と一致しないことがあるため\n // nodeType で判定する(DOCUMENT_FRAGMENT_NODE は ShadowRoot を含む)\n const rootNode = entry.rootNode;\n if (\n rootNode.nodeType === Node.DOCUMENT_NODE ||\n rootNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE\n ) {\n return rootNode as unknown as ParentNode;\n }\n return document;\n }\n\n private _wiringRow(entry: IWiringEntry): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"wiring-row\";\n const prop = document.createElement(\"span\");\n prop.className = \"prop\";\n prop.textContent = entry.propName;\n const arrow = document.createTextNode(\" ← \");\n const path = document.createElement(\"span\");\n path.className = \"path\";\n path.textContent = entry.path;\n const type = document.createElement(\"span\");\n type.className = \"badge-tag\";\n type.textContent = entry.bindingType;\n row.append(type, document.createTextNode(\" \"), prop, arrow, path);\n row.addEventListener(\"click\", () => {\n const binding = entry.bindingRef.deref();\n if (binding !== undefined) {\n this._highlightNodes([binding.node, binding.replaceNode]);\n }\n });\n return row;\n }\n\n private _declaredRow(entry: IDeclaredBinding): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"wiring-row\";\n const type = document.createElement(\"span\");\n type.className = \"badge-tag declared\";\n type.textContent = entry.origin;\n const prop = document.createElement(\"span\");\n prop.className = \"prop\";\n prop.textContent = entry.propName;\n const path = document.createElement(\"span\");\n path.className = \"path\";\n path.textContent = entry.path;\n row.append(type, document.createTextNode(\" \"), prop, document.createTextNode(\" ← \"), path);\n row.addEventListener(\"click\", () => {\n this._highlightNodes([entry.element]);\n });\n return row;\n }\n\n private _renderTimelinePane(): void {\n const core = this._core!;\n const body = this._paneElements[\"timeline\"]!;\n const timeline = core.getTimeline();\n const start = Math.max(0, timeline.length - TIMELINE_RENDER_LIMIT);\n const rows: HTMLElement[] = [];\n if (start > 0) {\n rows.push(this._emptyRow(`…(${start} earlier entries)`));\n }\n for (let index = start; index < timeline.length; index++) {\n rows.push(this._timelineRow(timeline[index]));\n }\n if (rows.length === 0) {\n rows.push(this._emptyRow(\"no activity yet\"));\n }\n body.replaceChildren(...rows);\n body.scrollTop = body.scrollHeight;\n }\n\n private _timelineRow(entry: ITimelineEntry): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"timeline-row\";\n const time = document.createElement(\"span\");\n time.className = \"t\";\n time.textContent = `${(entry.time / 1000).toFixed(3)}s `;\n const kind = document.createElement(\"span\");\n kind.className = \"badge-tag kind\";\n kind.textContent = entry.kind;\n // subscriber 0 の command/event 空撃ちは警告表示(devtools-tag-design.md §3.2)\n if (entry.subscriberCount === 0) {\n kind.classList.add(\"warn\");\n kind.title = \"emitted with no subscribers\";\n }\n // `$watch` の失敗はランタイムが握って drain を守るため、ここが唯一の\n // 「気づける場所」になる。空撃ちと同じ warn 表示に乗せる。\n if (entry.kind === \"watch-error\" || entry.kind === \"watch-chain-limit\") {\n kind.classList.add(\"warn\");\n kind.title = entry.kind === \"watch-error\"\n ? \"a $watch or $scan failure (read, handler, fold or write — see the phase in the detail); the runtime isolated it (console.error only)\"\n : \"a $watch write chain hit the depth limit and was cut off\";\n }\n // 描画の循環の打ち切り(#338)もランタイムは console に出すだけで続行する(バッチの binding は未適用)\n if (entry.kind === \"render-chain-limit\") {\n kind.classList.add(\"warn\");\n kind.title = \"writes made while rendering kept starting new batches; the chain hit the depth limit and this batch was not rendered\";\n }\n // 配線の死(解決しないパス)と隔離された適用失敗も、ランタイムが console に\n // 出すだけで続行する = 見ていなければ気づけない種類なので warn に乗せる。\n if (entry.kind === \"path-unresolved\" || entry.kind === \"binding-apply-error\") {\n kind.classList.add(\"warn\");\n kind.title = entry.kind === \"path-unresolved\"\n ? \"a wired path does not resolve on the state; its updates are dropped\"\n : \"a binding threw while applying; the runtime isolated it (console.error only)\";\n }\n // 伝播の打ち切りと契約 drift も「黙って起きる異常」なので warn に乗せる。\n // suppressed / coalesced は定常動作(エコー抑止・合流)のため通常表示。\n if (entry.kind === \"propagation-hop-limit\" || entry.kind === \"contract-drift\") {\n kind.classList.add(\"warn\");\n kind.title = entry.kind === \"propagation-hop-limit\"\n ? \"a two-way propagation chain hit the hop limit and was cut off\"\n : \"sidecar manifest drifted from the live wcBindable declaration (live wins)\";\n }\n const label = document.createElement(\"span\");\n label.className = \"label\";\n\n label.textContent = ` ${entry.label} `;\n const detail = document.createElement(\"span\");\n detail.className = \"detail\";\n detail.textContent = entry.detail;\n row.append(time, kind, label, detail);\n return row;\n }\n\n private _emptyRow(text: string): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"empty\";\n row.textContent = text;\n return row;\n }\n\n // --- highlight ---\n\n private _highlightPath(entry: IRosterEntry, path: string): void {\n const core = this._core!;\n const nodes: Node[] = [];\n for (const wiring of core.getWiringForPath(path, entry.summary.element)) {\n const binding = wiring.bindingRef.deref();\n if (binding !== undefined) {\n nodes.push(binding.node, binding.replaceNode);\n }\n }\n this._highlightNodes(nodes);\n }\n\n private _highlightNodes(nodes: readonly Node[]): void {\n // shadowRoot 構築後にしか呼ばれない(各リスナーは _buildShadow 内で配線される)\n const layer = this._highlightLayer!;\n layer.replaceChildren();\n const seen = new Set<Element>();\n for (const node of nodes) {\n const element = node instanceof Element ? node : node.parentElement;\n if (element === null || seen.has(element) || !element.isConnected) {\n continue;\n }\n seen.add(element);\n const rect = element.getBoundingClientRect();\n const box = document.createElement(\"div\");\n box.className = \"hl-box\";\n box.style.left = `${rect.left}px`;\n box.style.top = `${rect.top}px`;\n box.style.width = `${rect.width}px`;\n box.style.height = `${rect.height}px`;\n layer.append(box);\n }\n // 2 秒後に自動で消す(追従はしない — クリック時スナップショット表示)\n setTimeout(() => {\n layer.replaceChildren();\n }, 2000);\n }\n}\n","/**\n * bootstrapDevtools.ts\n *\n * `<wcs-devtools>` の登録と自動挿入(devtools-tag-design.md §2)。\n * - 既に定義済みなら再定義しない\n * - ページに `<wcs-devtools>` が無ければ body 末尾に 1 つ挿入\n * (手動で書かれていれば挿入しない)\n * - SSR では何もしない\n */\n\nimport { WcsDevtools } from \"./shell/WcsDevtools\";\n\nconst TAG_NAME = \"wcs-devtools\";\n\nfunction insertIfAbsent(): void {\n if (document.querySelector(TAG_NAME) !== null) {\n return;\n }\n document.body.appendChild(document.createElement(TAG_NAME));\n}\n\nexport function bootstrapDevtools(): void {\n if (document.documentElement.hasAttribute(\"data-wcs-server\")) {\n return;\n }\n if (!customElements.get(TAG_NAME)) {\n customElements.define(TAG_NAME, WcsDevtools);\n }\n if (document.body !== null) {\n insertIfAbsent();\n } else {\n document.addEventListener(\"DOMContentLoaded\", insertIfAbsent, { once: true });\n }\n}\n"],"names":[],"mappings":"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"}
|