diff --git a/docs/requirements/handoff-HEL-910.json b/docs/requirements/handoff-HEL-910.json new file mode 100644 index 0000000..8816c20 --- /dev/null +++ b/docs/requirements/handoff-HEL-910.json @@ -0,0 +1,51 @@ +{ + "baseline_version": "1.12", + "read_commit": "958c6962fb1f2a4462a6df794d893aee1fcb0667", + "task": "HEL-910:按白栖知批准的《HEL-797-交谈修复复测安排》(主卡评论 01a18753-8c70-7181-9758-5bab4685ba9f「继续测」)对候选 958c696 做两次真实通话复测:真实网页原发送入口的文字打断(在播时机+final待播间隙)、python 同钟时间轴的等待链与回放打断、思考隔离真实端点检查;隔离部署 8360/8361/8363/8082 + 共享 TTS 9880 按快照临时恢复,全程批准上限内执行并清理恢复。", + "requirement_ids": [ + "CG-006", + "CG-009", + "CG-010", + "CG-013", + "CG-014", + "CG-015", + "CG-016", + "CG-018", + "CG-019", + "CG-020", + "CG-021", + "AM-001", + "GOV-001", + "GOV-002", + "GOV-003", + "GOV-004", + "GOV-005", + "GOV-006", + "DEL-001" + ], + "deliverable": "docs/rework/hel910/(window-record.md 窗口记录、window/ 逐通证据含 call2 同钟字幕/帧时间轴/回流音频/DB终态/ASR账本/前后快照/日志、web/ 真网页逐步截图、tools/ 本窗部署与测量脚本及配置);服务器证据包 /opt/cybergril-hel910/hel910-evidence-20261029.tar.gz(sha256 83363576…d7a3f0)。实测结论:真实网页发文字(真 Enter 键)在她语音在播时发送——旧声停止(浏览器能量 ≤~1.4s 持续静默、本地 hush 静音即时)、文字获完整回复并落库、旧轮不复活无幽灵行、被打断轮回执正确缺席、后续语音轮正常出声并完整回执(两次确认恢复);输入结束→实际第一声实测 9.53s(user_final 后 7.10s、生成开始后 3.44s,>5s 关注线,如实交回);全部真实回复零思考泄漏但真实端点未出现带 形状(覆盖范围如实限定,离线证据在 HEL-909);时机A(生成中被文字取消)因网页侧检测失误与 API 直发竞速反向未获正面样本(文字轮被更新语音轮正常取消:行 cancelled+SSE 幂等 chat.cancelled 终态帧,恰为 HEL-908 R1 修复路径的真实表现),随后语音轮撞 10/10 预算硬闸诚实 φ 失败;可闻旧声期间的回放打断样本因时机错过未取得(如实,与 HEL-907 同项均未取得)。用量:LLM 10/10 触线(30,398/40,000 tokens)、建房 4/4 触线、通话 2/2、TTS 6/20、ASR 350.63/720s(保守=确证、重试 0)、窗口 23.6/45 分、登记/上传/转写/试听/嵌入/付费全 0。清理:窗口端口与专属进程全停(精确 PID)、LiveKit 房间空、voices.json 哈希前后一致 cg- 零残留、共享 TTS 按快照停回、面板 8090 全程未启用、8300/8310/8320/8350/7880/10095 未动、GPU 回 747MiB。", + "acceptance": [ + "部署核验:服务器源码树与 git archive 958c696 逐文件 sha256 一致(仅多 REVISION 标记);web/dist 含 cg.interrupt 接线;models.yaml 三档 reasoning: buffer_turn 与候选一致仅预算块不同;cap=0 fail-closed 预检(persona 拒绝、chat 诚实 error 零出站、voice 503 不建房)通过后才布防", + "真实网页链路:自签证书按用户姿态逐 origin 接受;语音通话从真实 UI 开启;文字从真实输入框+真实 Enter 键发送(hush→cg.interrupt 真实链路,未绕开网页修复);逐步截图 9 张留证", + "时机B(在播时发文字):旧声停止(浏览器能量探测 ~1.4s 内持续静默+本地静音即时)、T1 完整回复落库 sent、R1 不复活、后续语音轮正常出声并完整回执", + "final待播间隙(网页入口):U3 回复文本完整落库(音频截断、回执正确缺席)、T2 完整回复、再次语音轮正常出声回执", + "等待链(同钟毫秒):input_end→user_final 2.43s→生成开始 4.10s→实际第一声 9.53s→字幕全文/落库 12.10s→回执 ack;数字与 wav 能量对齐方法留证", + "思考隔离:18 条 companion 行/字幕/TTS 文本零思考;如实声明真实端点未出现带 closer 形状", + "上限与封账:全部类别在上限内或触线即停并如实记录;失败/取消均计入(call1 挂断后 U4 轮、call2 竞速取消轮与预算 φ 轮)", + "清理恢复:端口/房间/PID/声音列表/哈希/GPU 前后核对留证;隔离目录与证据包保留;未触碰任何既有实例与真实档案" + ], + "deferred": [ + "真实用户麦克风打断时延与可闻旧声期间的语音打断停声样本(两轮工程窗口均未取得,需真人同轴或下轮工程窗口以她实际有声为门控重试)", + "时机A(生成中文字取消)正面样本(需文字在语音轮服务端激活后、生成完成前到达;本轮竞速反向+预算封顶)", + "真实端点带 形状的分离复现(本轮真实回复未出现该形状;离线证据 HEL-909)", + "首声等待是否经常>5s 需多样本(本轮 1 精确样本+1 量级相近);停声时延的帧级精测(本轮为浏览器能量粗粒度 ≤~1.4s)", + "真机/手机麦克风、Safari(D3 用户动作)", + "R1–R7 完整功能未完成项继续按主卡承接;本轮不改变任何需求与验收状态" + ], + "requirement_changes": [], + "verification": [ + "python3 scripts/check_requirements.py --base-ref origin/main(及 --base-ref 958c696)+ --handoff docs/requirements/handoff-HEL-910.json 全部通过(结构检查,不代替原话核对与体验验收)", + "证据:docs/rework/hel910/window/(call2.subtitles.jsonl 逐事件毫秒时间戳、call2.frames.json 帧到达时间轴、call2.agent.wav 回流音频、db-final.json 全部 20 行含状态与回执账、asr-usage.jsonl、tts-window.log 6 段、api/worker 日志、前后快照);web/ 截图;tools/ 全套部署与测量脚本", + "未验证:真人麦克风、手机真机、真实端点思考形状、多样本首声统计——见 deferred,不冒充" + ] +} diff --git a/docs/rework/hel910/tools/api_ctl.sh b/docs/rework/hel910/tools/api_ctl.sh new file mode 100644 index 0000000..98a0c9b --- /dev/null +++ b/docs/rework/hel910/tools/api_ctl.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash +# HEL-910 测试窗口:统一实例(8360 HTTP + 8361 HTTPS 同进程双入口)启动/停止 +# 用法: bash api_ctl.sh start|stop|status (models.yaml 由调用方先摆好:failclosed 或 armed) +set -u +BASE=/opt/cybergril-hel910 +CODE=$BASE/current +LOG=$BASE/logs/api.log +PIDF=$BASE/logs/api.pid +PAT='cybergril-hel910.*serve_dual_8360_8361' + +stop() { + if [ -f "$PIDF" ]; then + P=$(cat "$PIDF") + if [ "$P" != "$$" ] && kill -0 "$P" 2>/dev/null; then kill "$P"; sleep 3; fi + if [ "$P" != "$$" ] && kill -0 "$P" 2>/dev/null; then kill -9 "$P"; fi + rm -f "$PIDF" + fi + for p in $(pgrep -f "$PAT"); do + [ "$p" = "$$" ] && continue + kill "$p" 2>/dev/null + done + echo "api stopped" +} + +case "${1:-}" in + stop) stop; exit 0 ;; + status) + pgrep -af "$PAT" || echo "not running" + exit 0 ;; +esac + +stop +cd "$CODE" +set -a +export CYBERGRIL_DB=$BASE/data/companion.db +export CYBERGRIL_SEMANTIC=stub +export CYBERGRIL_R2_ENABLED=1 +export CYBERGRIL_MODELS=$BASE/etc/models.yaml +export CYBERGRIL_VOICE_CONFIG=$BASE/etc/voice.yaml +export CYBERGRIL_WEB=$CODE/web/dist +export PYTHONPATH=$CODE/src +set +a +nohup /opt/cybergril-hel879/current/.venv311/bin/python deploy/voice/serve_dual_8360_8361.py \ + --http-port 8360 --https-port 8361 \ + --cert /opt/cybergril-voice-certs/cybergril-voice.pem \ + --key /opt/cybergril-voice-certs/cybergril-voice.key \ + > "$LOG" 2>&1 & +echo $! > "$PIDF" +echo "api starting (pid $(cat $PIDF))" +sleep 6 +curl -s --max-time 3 http://127.0.0.1:8360/api/health >/dev/null && echo "OK: 8360 healthy" || { echo "FAIL:"; tail -20 "$LOG"; exit 1; } +curl -sk --max-time 3 https://127.0.0.1:8361/api/health >/dev/null && echo "OK: 8361 healthy" || { echo "FAIL 8361:"; tail -20 "$LOG"; exit 1; } diff --git a/docs/rework/hel910/tools/asr-arm.env b/docs/rework/hel910/tools/asr-arm.env new file mode 100644 index 0000000..8e99be9 --- /dev/null +++ b/docs/rework/hel910/tools/asr-arm.env @@ -0,0 +1,4 @@ +# HEL-910 ASR 窗口布防(2026-10-29):新窗口 id,720 秒保守预记,每通重连≤2 +CYBERGRIL_ASR_WINDOW_ID=hel910-20261029-a +CYBERGRIL_ASR_WINDOW_MAX_AUDIO_SECONDS=720 +CYBERGRIL_ASR_MAX_CONNECT_RETRIES_PER_CALL=2 diff --git a/docs/rework/hel910/tools/bridge_ctl.sh b/docs/rework/hel910/tools/bridge_ctl.sh new file mode 100644 index 0000000..2e7911d --- /dev/null +++ b/docs/rework/hel910/tools/bridge_ctl.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash +# HEL-910 测试窗口:WSS TLS 桥 8363 -> 127.0.0.1:7880 启动/停止 +set -u +BASE=/opt/cybergril-hel910 +LOG=$BASE/logs/bridge.log +PIDF=$BASE/logs/bridge.pid +PAT='cybergril-hel910.*wss_bridge' + +stop() { + if [ -f "$PIDF" ]; then + P=$(cat "$PIDF") + if [ "$P" != "$$" ] && kill -0 "$P" 2>/dev/null; then kill "$P"; sleep 2; fi + rm -f "$PIDF" + fi + for p in $(pgrep -f "$PAT"); do + [ "$p" = "$$" ] && continue + kill "$p" 2>/dev/null + done + echo "bridge stopped" +} + +case "${1:-}" in + stop) stop; exit 0 ;; + status) + pgrep -af "$PAT" || echo "not running" + exit 0 ;; +esac + +stop +nohup /usr/bin/python3 $BASE/current/deploy/voice/wss_bridge.example.py \ + --listen 0.0.0.0:8363 --upstream 127.0.0.1:7880 \ + --cert /opt/cybergril-voice-certs/cybergril-voice.pem \ + --key /opt/cybergril-voice-certs/cybergril-voice.key \ + > "$LOG" 2>&1 & +echo $! > "$PIDF" +echo "bridge starting (pid $(cat $PIDF))" +sleep 3 +timeout 8 openssl s_client -connect 127.0.0.1:8363 -servername 192.168.200.12 /dev/null | grep -q "Protocol.*TLSv1.3\|New, TLSv1.3" && echo "OK: bridge TLS up" || { echo "WARN: TLS probe inconclusive, check $LOG"; tail -5 "$LOG"; } diff --git a/docs/rework/hel910/tools/build_fake_wavs.py b/docs/rework/hel910/tools/build_fake_wavs.py new file mode 100644 index 0000000..b1d0bd2 --- /dev/null +++ b/docs/rework/hel910/tools/build_fake_wavs.py @@ -0,0 +1,132 @@ +#!/usr/bin/env python3 +"""Build Chromium fake-audio-capture WAVs for HEL-910 (offline, workstation-local). + +Pure stdlib (array/audioop-free) — resample by linear interpolation, mix to mono, +place utterances on a fixed schedule padded with silence; Chromium loops the file. +Usage: build_fake_wavs.py +""" +from __future__ import annotations + +import json +import sys +import wave +from pathlib import Path + +RATE = 16000 + + +def read_mono_16k(path: str) -> bytes: + with wave.open(path, "rb") as w: + raw = w.readframes(w.getnframes()) + rate, ch, width = w.getframerate(), w.getnchannels(), w.getsampwidth() + assert width == 2, path + total = len(raw) // (2 * ch) + # de-interleave + average channels + acc = [0.0] * total + for c in range(ch): + off = c + for i in range(total): + s = raw[(i * ch + off) * 2] | (raw[(i * ch + off) * 2 + 1] << 8) + if s >= 32768: + s -= 65536 + acc[i] += s + mono = [int(round(a / ch)) for a in acc] + if rate == RATE: + return b"".join(max(-32768, min(32767, s)).to_bytes(2, "little", signed=True) for s in mono) + n_out = int(len(mono) * RATE / rate) + out = bytearray() + step = rate / RATE + for j in range(n_out): + x = j * step + i = int(x) + frac = x - i + s = mono[i] * (1 - frac) + (mono[i + 1] if i + 1 < len(mono) else mono[i]) * frac + v = max(-32768, min(32767, int(round(s)))) + out += v.to_bytes(2, "little", signed=True) + return bytes(out) + + +def trim_silence(pcm: bytes, thresh: float = 0.05) -> bytes: + # trim leading/trailing near-silence (50ms windows) — keep speech core + n = len(pcm) // 2 + vals = [pcm[i * 2] | (pcm[i * 2 + 1] << 8) for i in range(n)] + vals = [v - 65536 if v >= 32768 else v for v in vals] + win = 800 + nw = n // win + peak = 1 + for w0 in range(nw): + m = max(abs(v) for v in vals[w0 * win:(w0 + 1) * win]) or 0 + peak = max(peak, m) + t = peak * thresh + first, last = 0, nw - 1 + for w0 in range(nw): + if max(abs(v) for v in vals[w0 * win:(w0 + 1) * win]) > t: + first = w0 + break + for w0 in range(nw - 1, -1, -1): + if max(abs(v) for v in vals[w0 * win:(w0 + 1) * win]) > t: + last = w0 + break + lo, hi = max(0, first - 2) * win, min(n, (last + 3) * win) + out = bytearray() + for v in vals[lo:hi]: + out += max(-32768, min(32767, v)).to_bytes(2, "little", signed=True) + return bytes(out) + + +def silence(seconds: float) -> bytes: + return b"\x00\x00" * int(RATE * seconds) + + +def write_wav(path: Path, pcm: bytes, rate: int = RATE) -> None: + with wave.open(str(path), "wb") as w: + w.setnchannels(1) + w.setsampwidth(2) + w.setframerate(rate) + w.writeframes(pcm) + + +def main() -> None: + outdir = Path(sys.argv[1] if len(sys.argv) > 1 else ".") + outdir.mkdir(parents=True, exist_ok=True) + src = Path("/tmp/multica-task-2856608943/opencode") + u_hai = trim_silence(read_mono_16k(str(src / "haimianbaobao.wav"))) + u_baj = trim_silence(read_mono_16k(str(src / "bajie.wav"))) + u_xiao = trim_silence(read_mono_16k(str(src / "xiaoyun.wav"))) + meta: dict[str, dict] = {} + secs = lambda p: len(p) / (2 * RATE) + + # call1 browser schedule: U1@0 (reply R1), U2@60 (gen-cancel target), + # U3@120 (voice recovery). Cycle 240s so a 4th utterance never arrives inside + # the ~170s planned call. + c1 = bytearray() + c1 += u_hai + c1 += silence(60 - secs(u_hai)) + c1 += u_baj + c1 += silence(120 - 60 - secs(u_baj)) + c1 += u_hai + c1 += silence(240 - 120 - secs(u_hai)) + write_wav(outdir / "hel910_call1_fake.wav", bytes(c1)) + meta["call1"] = { + "u1_haimianbaobao_s": [0.0, round(secs(u_hai), 2)], + "u2_bajie_s": [60.0, round(60 + secs(u_baj), 2)], + "u3_haimianbaobao_s": [120.0, round(120 + secs(u_hai), 2)], + "cycle_s": 240, + } + + # offline probe wav for the local fake-capture feasibility check: 3s speech, 8s silence + t = bytearray() + t += u_hai[: RATE * 3 * 2] + t += silence(8.0) + write_wav(outdir / "probe_fake.wav", bytes(t)) + meta["probe"] = {"speech_s": [0.0, round(min(secs(u_hai), 3.0), 2)], "cycle_s": round(min(secs(u_hai), 3.0) + 8.0, 2)} + + for name, pcm in (("u_haimianbaobao", u_hai), ("u_bajie", u_baj), ("u_xiaoyun", u_xiao)): + write_wav(outdir / f"{name}.trim.wav", pcm) + meta[name] = {"seconds": round(secs(pcm), 2)} + (outdir / "fake-wav-meta.json").write_text(json.dumps(meta, ensure_ascii=False, indent=1)) + print(json.dumps(meta, ensure_ascii=False)) + + +if __name__ == "__main__": + main() diff --git a/docs/rework/hel910/tools/force_end.sh b/docs/rework/hel910/tools/force_end.sh new file mode 100644 index 0000000..09afef4 --- /dev/null +++ b/docs/rework/hel910/tools/force_end.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +# HEL-910 窗口截止保护:45 分钟硬顶到点强制收尾(也供 watchdog 与异常路径调用)。 +# 只动本窗专属句柄(pid 文件里的精确 PID)与本窗房间;绝不按程序名/端口扫杀, +# 绝不触碰 8300/8310/8320/8350、7880/7881、10095、8081 等共享服务。 +set -u +BASE=/opt/cybergril-hel910 +LOG=$BASE/logs/force_end.log +ts() { date -u +%FT%TZ; } +{ + echo "[$(ts)] force_end begin" + # 1) 结清本窗房间(实例自己的登记账;DELETE 走统一实例所有者路径) + for sid in $(python3 - "$BASE/data" <<'EOF' 2>/dev/null +import json, sys, pathlib +p = pathlib.Path(sys.argv[1]) / "companion-voice-sessions.json" +try: + d = json.loads(p.read_text()) +except Exception: + raise SystemExit +state = d.get("state", d) +def walk(o): + if isinstance(o, dict): + for k, v in o.items(): + if k in ("sessions", "active") and isinstance(v, dict): + for sid, sess in v.items(): + print(sid) + else: + walk(v) + elif isinstance(o, list): + for i in o: + walk(i) +walk(state) +EOF +); do + code=$(curl -s -o /dev/null -w '%{http_code}' --max-time 8 -X DELETE "http://127.0.0.1:8360/api/voice/session/$sid" || echo err) + echo "[$(ts)] DELETE session $sid -> $code" + done + # 2) 停专属组件(每步都幂等) + bash $BASE/ctl/worker_ctl.sh stop 2>&1 | sed 's/^/ worker: /' + bash $BASE/ctl/api_ctl.sh stop 2>&1 | sed 's/^/ api: /' + bash $BASE/ctl/bridge_ctl.sh stop 2>&1 | sed 's/^/ bridge: /' + # 3) 共享 TTS 9880:只停我们启动的那个 PID + bash $BASE/ctl/tts_ctl.sh stop 2>&1 | sed 's/^/ tts: /' + echo "[$(ts)] force_end done" +} >> "$LOG" 2>&1 diff --git a/docs/rework/hel910/tools/hel910_call1.mjs b/docs/rework/hel910/tools/hel910_call1.mjs new file mode 100644 index 0000000..b7f2ba2 --- /dev/null +++ b/docs/rework/hel910/tools/hel910_call1.mjs @@ -0,0 +1,274 @@ +// HEL-910 call1: REAL web page drives the whole scenario (workstation-local Chromium, real HTTPS entry). +// - cert interstitials accepted exactly like a user (高级→继续) on 8361 AND 8363 (WSS bridge) +// - voice call started from the real UI (voice-button → 开始语音) +// - user voice = Chromium fake mic fed with the scheduled WAV (U1 haimianbaobao @0s, +// U2 bajie @60s, U3 haimianbaobao @120s; built offline from existing engineering samples) +// - TEXT interrupts are typed into the real composer textarea and sent with a REAL Enter key: +// T1 while her R1 answer is AUDIBLY playing (timing B, hush→cg.interrupt path) +// T2 while her R2 answer is STILL GENERATING (timing A, server turn-gate path) +// - in-page probes (single page clock): stream energy 50ms, el.muted transitions, voice phase, +// heard-final text, chat DOM rows, fetch network marks, MediaRecorder of the received stream +// Usage: node hel910_call1.mjs +import { spawn } from 'node:child_process'; +import { mkdirSync, writeFileSync } from 'node:fs'; +import { join } from 'node:path'; +import { tmpdir } from 'node:os'; + +const [chrome, fakeWav, out, baseArg] = process.argv.slice(2); +const base = baseArg || 'https://192.168.200.12:8361'; +const wssOrigin = 'https://192.168.200.12:8363'; +mkdirSync(out, { recursive: true }); +const cdpPort = 9713; +const T1_TEXT = '先停下,我用打字跟你说:把你刚才那句还没说完的话作废,改用文字告诉我,你今天想拉我一起做的第一件事是什么?'; +const T2_TEXT = '等一下,先别把刚才那段长回答说完,我打字补充:只用一句话告诉我你现在的心情,然后安静等我。'; + +const INIT = `(() => { + if (window.__cg) return; + const cg = window.__cg = { anchor: [Date.now(), performance.now()], energy: [], muted: [], phase: [], heard: [], chat: [], net: [], marks: {}, rec: { started: 0, bytes: 0 }, errs: [] }; + const pnow = () => Math.round(performance.now()); + // 1) fetch wrapper — exact page-clock network marks + const of = window.fetch.bind(window); + window.fetch = async (...a) => { + const url = typeof a[0] === 'string' ? a[0] : a[0]?.url || ''; + const t0 = pnow(); + try { + const r = await of(...a); + if (url.includes('/api/')) cg.net.push({ t: t0, url: url.slice(0, 80), method: (a[1] && a[1].method) || 'GET', status: r.status, tHeaders: pnow() }); + return r; + } catch (e) { if (url.includes('/api/')) cg.net.push({ t: t0, url: url.slice(0, 80), method: (a[1] && a[1].method) || 'GET', status: 'err:' + String(e).slice(0, 40) }); throw e; } + }; + // 2) energy + muted probe on her audio holder (50ms), starts whenever elements appear + let ctx = null, analysers = new Map(), lastMuted = null; + const ensureCtx = () => { if (!ctx) { try { ctx = new AudioContext(); } catch (e) { cg.errs.push('ctx:' + e); } } if (ctx && ctx.state === 'suspended') ctx.resume().catch(() => {}); return ctx; }; + const hook = el => { + if (!el || !el.srcObject || analysers.has(el)) return; + const c = ensureCtx(); if (!c) return; + try { + const an = c.createAnalyser(); an.fftSize = 512; + c.createMediaStreamSource(el.srcObject).connect(an); + analysers.set(el, an); + if (!cg.rec.started) { + try { + const mr = new MediaRecorder(el.srcObject, { mimeType: 'audio/webm;codecs=opus' }); + const chunks = []; mr.ondataavailable = ev => { chunks.push(ev.data); cg.rec.bytes += ev.data.size; }; + mr.onstop = () => { cg.rec.chunks = chunks; }; + mr.start(1000); cg.rec.started = pnow(); cg.rec.mr = mr; + } catch (e) { cg.errs.push('rec:' + e); } + } + } catch (e) { cg.errs.push('hook:' + e); } + }; + setInterval(() => { + ensureCtx(); + document.querySelectorAll("div[data-voice='her'] audio, div[data-voice='her'] video").forEach(hook); + let rms = 0; + const buf = new Uint8Array(512); + for (const an of analysers.values()) { + an.getByteTimeDomainData(buf); + let acc = 0; for (const v of buf) { const d = (v - 128) / 128; acc += d * d; } + rms = Math.max(rms, Math.sqrt(acc / buf.length)); + } + const els = [...document.querySelectorAll("div[data-voice='her'] audio, div[data-voice='her'] video")]; + const muted = els.length ? els.every(el => el.muted) : null; + if (muted !== lastMuted) { cg.muted.push([pnow(), muted]); lastMuted = muted; } + cg.energy.push([pnow(), Math.round(rms * 100000) / 100000, els.length]); + }, 50); + // 3) voice phase + heard text (100ms poll, log changes) + let lastPhase = null, lastHeard = null, lastSaid = null; + setInterval(() => { + const row = document.querySelector('.voice-row.real'); + const phase = row ? row.dataset.phase : null; + const heard = document.querySelector('.voice-heard:not(.said)')?.textContent || ''; + const said = document.querySelector('.voice-heard.said')?.textContent || ''; + if (phase !== lastPhase) { cg.phase.push([pnow(), phase]); lastPhase = phase; } + if (heard !== lastHeard) { cg.heard.push([pnow(), 'draft', heard.slice(0, 60)]); lastHeard = heard; } + if (said !== lastSaid) { cg.heard.push([pnow(), 'final', said.slice(0, 60)]); lastSaid = said; } + }, 100); + // 4) chat DOM rows (conversation + record views) + const seen = new Set(); + const scan = () => { + document.querySelectorAll('.message').forEach(m => { + const key = m.dataset.mid || (m.dataset.role + ':' + m.textContent.slice(0, 40)); + if (seen.has(key)) return; seen.add(key); + cg.chat.push({ t: pnow(), role: m.dataset.role, mid: m.dataset.mid, text: (m.textContent || '').slice(0, 90), incomplete: !!m.querySelector('.incomplete') }); + }); + }; + setInterval(scan, 120); + // 5) marks helper + window.__mark = (k) => { cg.marks[k] = pnow(); }; + cg.mark = window.__mark; +})()`; + +const sleep = ms => new Promise(r => setTimeout(r, ms)); +const browser = spawn(chrome, [ + '--headless=new', `--remote-debugging-port=${cdpPort}`, `--user-data-dir=${join(tmpdir(), `hel910-call1-${Date.now()}`)}`, + '--no-first-run', '--hide-scrollbars', '--force-color-profile=srgb', + '--use-fake-device-for-media-stream', '--use-fake-ui-for-media-stream', + `--use-file-for-fake-audio-capture=${fakeWav}`, + '--autoplay-policy=no-user-gesture-required', 'about:blank', +], { stdio: 'ignore', env: { ...process.env, LD_LIBRARY_PATH: `${process.env.HOME}/chromium-libs/root/usr/lib/x86_64-linux-gnu:${process.env.HOME}/chromium-libs/root/usr/lib` } }); +let targets; +for (let i = 0; i < 60 && !targets; i++) { try { targets = await (await fetch(`http://127.0.0.1:${cdpPort}/json`)).json(); } catch { await sleep(250); } } +if (!targets) { console.error('chromium did not start'); process.exit(1); } +const ws = new WebSocket(targets.find(t => t.type === 'page').webSocketDebuggerUrl); +await new Promise(r => ws.addEventListener('open', r, { once: true })); +let id = 0; const waiting = new Map(); const events = []; +ws.addEventListener('message', ({ data }) => { + const m = JSON.parse(data); + if (m.id && waiting.has(m.id)) { const { ok, ko } = waiting.get(m.id); waiting.delete(m.id); m.error ? ko(new Error(m.error.message)) : ok(m.result); } + else if (m.method) events.push(m); +}); +const cdp = (method, params = {}) => new Promise((ok, ko) => { const n = ++id; waiting.set(n, { ok, ko }); ws.send(JSON.stringify({ id: n, method, params })); }); +const js = async expr => { const r = await cdp('Runtime.evaluate', { expression: expr, returnByValue: true, awaitPromise: true }); if (r.exceptionDetails) throw new Error(r.exceptionDetails.exception?.description?.slice(0, 400) || 'js error'); return r.result.value; }; +const shot = async name => { const { data } = await cdp('Page.captureScreenshot', { format: 'png', captureBeyondViewport: false }); writeFileSync(join(out, `${name}.png`), Buffer.from(data, 'base64')); }; + +async function typeThisIsUnsafe() { + for (const ch of 'thisisunsafe') { + await cdp('Input.dispatchKeyEvent', { type: 'keyDown', key: ch, text: ch, windowsVirtualKeyCode: ch.charCodeAt(0), unmodifiedText: ch }); + await cdp('Input.dispatchKeyEvent', { type: 'keyUp', key: ch, windowsVirtualKeyCode: ch.charCodeAt(0) }); + await sleep(30); + } +} + +async function goto(url) { + await cdp('Page.navigate', { url }); + let privacySeen = 0; + for (let i = 0; i < 150; i++) { + await sleep(200); + const st = await js('document.readyState + "|" + (document.title || "") + "|" + (document.body ? document.body.textContent.slice(0, 40) : "")').catch(() => ''); + if (!st.includes('Privacy') && !st.includes('not private') && st.startsWith('complete|')) return st; + // certificate interstitial: proceed through it exactly the way the interstitial itself accepts (its own key sequence) + if (st.includes('Privacy') || st.includes('not private')) { + privacySeen++; + await typeThisIsUnsafe(); + } + } + return js('document.readyState + "|" + (document.title || "")').catch(() => 'unknown'); +} + +const click = async (selector, text = '') => js(`(() => { const el = [...document.querySelectorAll(${JSON.stringify(selector)})].find(e => e.offsetParent !== null && e.textContent.includes(${JSON.stringify(text)})); if (!el) return false; el.scrollIntoView({ block: 'center' }); el.click(); return true; })()`); +const until = async (fn, ms, every = 200) => { const end = Date.now() + ms; while (Date.now() < end) { const v = await fn(); if (v) return v; await sleep(every); } return null; }; +const snap = () => js('JSON.stringify({e: window.__cg.energy.length ? window.__cg.energy.slice(-40) : [], ph: window.__cg.phase.slice(-6), hd: window.__cg.heard.slice(-6), mu: window.__cg.muted.slice(-6), ch: window.__cg.chat.slice(-8), mk: window.__cg.marks, rec: window.__cg.rec, err: window.__cg.errs, anchor: window.__cg.anchor})').then(JSON.parse); +const phaseNow = () => js(`document.querySelector('.voice-row.real')?.dataset.phase || null`); +const energyRecent = (n = 8) => js(`window.__cg.energy.slice(-${n})`).then(a => a || []); + +async function sendText(label, text) { + await js(`(() => { window.__mark(${JSON.stringify(label + '_pre')}); const el = document.querySelector('.composer textarea'); if (!el) return false; el.focus(); const proto = HTMLTextAreaElement.prototype; Object.getOwnPropertyDescriptor(proto, 'value').set.call(el, ${JSON.stringify(text)}); el.dispatchEvent(new Event('input', { bubbles: true })); return true; })()`); + await sleep(120); + await cdp('Input.dispatchKeyEvent', { type: 'rawKeyDown', key: 'Enter', code: 'Enter', windowsVirtualKeyCode: 13, nativeVirtualKeyCode: 13 }); + await cdp('Input.dispatchKeyEvent', { type: 'keyUp', key: 'Enter', code: 'Enter', windowsVirtualKeyCode: 13, nativeVirtualKeyCode: 13 }); + await sleep(80); + await js(`window.__mark(${JSON.stringify(label + '_sent')})`); +} + +const started = Date.now(); +const R = { log: [], notes: [] }; +const note = s => { R.log.push([Date.now() - started, s]); console.log(`[${((Date.now() - started) / 1000).toFixed(1)}] ${s}`); }; + +await cdp('Page.addScriptToEvaluateOnNewDocument', { source: INIT }); +await cdp('Page.enable'); await cdp('Network.enable'); + +// 0) user-posture cert acceptance on both origins +note('accept cert 8361: ' + (await goto(base)).slice(0, 40)); +note('accept cert 8363: ' + (await goto(wssOrigin)).slice(0, 40)); +await goto(base); +await sleep(2500); +await shot('01-page-loaded'); +note('page ready; companion=' + String(await js(`fetch('/api/companion').then(r => r.ok).catch(() => false)`))); +// enter the conversation view from the home window +const entered = await click('button', '和她说话'); +note('clicked talk entry: ' + !!entered); +const composer = await until(async () => js(`!!document.querySelector('.composer textarea')`), 10000, 300); +if (!composer) { + note('FAIL: composer textarea not found — page state: ' + String(await js(`document.body.textContent.slice(0, 200)`))); + await finish('fail-nocomposer'); +} +if (!(await js(`!!document.querySelector('.voice-button')`))) { + note('FAIL: voice button not found — page state: ' + String(await js(`document.body.textContent.slice(0, 200)`))); + await finish('fail-novoicebtn'); +} + +// 1) start the voice call from the real UI +if (!(await click('.voice-button'))) { note('FAIL: voice button not found'); await finish('fail-novoicebtn'); } +await sleep(600); +if (!(await click('.modal button', '开始语音'))) { note('FAIL: voice modal confirm not found'); await finish('fail-nomodal'); } +await js(`window.__mark('voice_start_click')`); +note('voice start clicked'); +await until(async () => (await phaseNow()) !== null, 20000); +await until(async () => ['listening', 'thinking'].includes(await phaseNow()), 25000); +await shot('02-voice-listening'); +note('voice row phase=' + (await phaseNow())); + +// U1 @0-7.1s: she hears haimianbaobao → thinking → speaking (audible R1) +await until(async () => (await js(`window.__cg.heard.some(h => h[1] === 'final')`)), 30000); +note('U1 heard final'); +const th1 = await until(async () => (await phaseNow()) === 'thinking', 40000); +note('phase thinking (R1 generating)'); +// timing A rehearsal happens on U2; on U1 we wait for audible playback (timing B target) +const spk1 = await until(async () => { + const ph = await phaseNow(); if (ph !== 'speaking') return false; + const e = await energyRecent(12); return e.filter(x => x[1] > 0.02).length >= 8; +}, 60000); +note('R1 audible speaking: ' + !!spk1); +await sleep(1600); // let plenty of old audio remain +await shot('03-r1-speaking'); +// T1 — timing B: text while old answer audibly playing (real composer + real Enter) +await sendText('T1', T1_TEXT); +note('T1 sent during playback'); +await sleep(1200); +await shot('04-after-T1'); + +// watch old-voice stop + T1 text reply +await until(async () => { const e = await energyRecent(16); return e.length && e.filter(x => x[1] > 0.015).length === 0; }, 15000).then(v => note('stream quiet after T1: ' + !!v)); +await until(async () => (await js(`window.__cg.chat.some(c => c.role === 'companion' && c.t > (window.__cg.marks.T1_sent || 0))`)), 90000, 300).then(v => note('T1 companion reply visible: ' + !!v)); +await shot('05-T1-reply'); + +// U2 @60-73.3s: prefill T2, fire Enter the moment thinking starts for the bajie answer +await until(async () => (await js(`window.__cg.heard.some(h => h[1] === 'final' && h[2].includes('取经'))`)), 90000).then(v => note('U2 heard final (bajie): ' + !!v)); +await js(`(() => { const el = document.querySelector('.composer textarea'); if (el) { el.focus(); const proto = HTMLTextAreaElement.prototype; Object.getOwnPropertyDescriptor(proto, 'value').set.call(el, ${JSON.stringify(T2_TEXT)}); el.dispatchEvent(new Event('input', { bubbles: true })); } })()`); +const t2fired = await until(async () => (await phaseNow()) === 'thinking', 30000, 80); +if (t2fired) { + await js(`window.__mark('T2_thinking_seen')`); + await cdp('Input.dispatchKeyEvent', { type: 'rawKeyDown', key: 'Enter', code: 'Enter', windowsVirtualKeyCode: 13, nativeVirtualKeyCode: 13 }); + await cdp('Input.dispatchKeyEvent', { type: 'keyUp', key: 'Enter', code: 'Enter', windowsVirtualKeyCode: 13, nativeVirtualKeyCode: 13 }); + await js(`window.__mark('T2_sent')`); + note('T2 sent during thinking (generation in flight)'); +} else { + note('T2 NOT fired: thinking phase not observed in time'); +} +await sleep(1500); +await shot('06-after-T2'); +// R2 must never become audible: no energy while T2 reply streams as text +const quiet = await until(async () => { const e = await energyRecent(10); return e.length && e.every(x => x[1] <= 0.015); }, 20000); +note('no R2 audio after T2: ' + !!quiet); +await until(async () => (await js(`window.__cg.chat.filter(c => c.role === 'companion' && c.t > (window.__cg.marks.T2_sent || 0)).length >= 1`)), 90000, 300).then(v => note('T2 companion reply visible: ' + !!v)); +await shot('07-T2-reply'); + +// U3 @120-127.1s: voice recovery — she must speak normally again +await until(async () => (await js(`window.__cg.heard.filter(h => h[1] === 'final').length >= 3`)), 90000).then(v => note('U3 heard final: ' + !!v)); +const spk3 = await until(async () => { + const ph = await phaseNow(); if (ph !== 'speaking') return false; + const e = await energyRecent(12); return e.filter(x => x[1] > 0.02).length >= 8; +}, 90000); +note('R3 voice recovery audible: ' + !!spk3); +await shot('08-R3-speaking'); +await until(async () => ['listening', 'thinking'].includes(await phaseNow()), 120000, 300).then(async v => note('R3 finished, back to ' + (await phaseNow()))); +await shot('09-R3-done'); + +// end the call from the real UI +if (await click('.voice-end')) { await js(`window.__mark('voice_end_click')`); note('voice ended via UI'); } +await sleep(3000); +await finish('done'); + +async function finish(status) { + R.status = status; + try { + await js(`(() => { try { window.__cg.rec.mr && window.__cg.rec.mr.state !== 'inactive' && window.__cg.rec.mr.stop(); } catch (e) {} })()`); + await sleep(800); + const full = await js(`(async () => { const cg = window.__cg; let rec = null; try { if (cg.rec.chunks && cg.rec.chunks.length) { const blob = new Blob(cg.rec.chunks, { type: 'audio/webm' }); const buf = await blob.arrayBuffer(); const bytes = new Uint8Array(buf); let bin = ''; for (let i = 0; i < bytes.length; i += 32768) bin += String.fromCharCode(...bytes.subarray(i, i + 32768)); rec = { bytes: blob.size, b64: bin }; } } catch (e) {} return { anchor: cg.anchor, energy: cg.energy, muted: cg.muted, phase: cg.phase, heard: cg.heard, chat: cg.chat, net: cg.net, marks: cg.marks, recMeta: { started: cg.rec.started, bytes: cg.rec.bytes }, errs: cg.errs, recB64: rec && rec.b64 }; })()`); + writeFileSync(join(out, 'call1-probe.json'), JSON.stringify({ ...R, probe: { ...full, recB64: undefined } })); + if (full.recB64) writeFileSync(join(out, 'call1-received.webm'), Buffer.from(full.recB64, 'base64')); + note('probe saved: energy=' + full.energy.length + ' chat=' + full.chat.length + ' recBytes=' + (full.recMeta.bytes || 0)); + } catch (e) { note('probe save FAILED: ' + e); } + browser.kill(); + process.exit(0); +} diff --git a/docs/rework/hel910/tools/hel910_client.py b/docs/rework/hel910/tools/hel910_client.py new file mode 100644 index 0000000..b29529f --- /dev/null +++ b/docs/rework/hel910/tools/hel910_client.py @@ -0,0 +1,475 @@ +#!/usr/bin/env python3 +"""HEL-910 real-window voice test client (runs on .12, agent venv). + +继承 HEL-907 hel907_client 的真链框架(预录音频回放经真实 WebRTC -> +LiveKit -> FunASR -> 统一 /api/chat(LLM) -> CosyVoice -> WebRTC 回流), +为本卡改造:dry(建房即删的挂断核验)、call2(稍长问题的首文/首声时延 + +回放打断停声同钟量测 + 思考泄漏取证)。所有时间戳同一客户端时钟(毫秒)。 +文字打断的「真实网页原发送入口」场景在本机浏览器驱动脚本里,不在本文件。 + +Usage: hel910_client.py +phases: dry | call2 | status +""" +from __future__ import annotations + +import asyncio +import json +import sys +import time +import wave +from pathlib import Path + +import httpx +from livekit import api, rtc + +API = "http://127.0.0.1:8360" +LK_INTERNAL = "http://127.0.0.1:7880" +KEY = "devkey" +SECRET = "voiceagent-local-secret-2026" +SAMPLES = Path("/opt/voice-agent/cosyvoice/voice_samples") +TRIM = Path("/opt/cybergril-hel910/etc/trim") +DB = "/opt/cybergril-hel910/data/companion.db" +OUT = Path(sys.argv[2] if len(sys.argv) > 2 else "/opt/cybergril-hel910/evidence") +OUT.mkdir(parents=True, exist_ok=True) +T0 = time.time() + + +def log(msg: str) -> None: + print(f"[{time.time()-T0:8.2f}] {msg}", flush=True) + + +def now_ms() -> int: + return int(time.time() * 1000) + + +def load_wav_16k_mono(p: Path) -> bytes: + with wave.open(str(p), "rb") as w: + raw = w.readframes(w.getnframes()) + rate, ch, width = w.getframerate(), w.getnchannels(), w.getsampwidth() + assert width == 2 and ch == 1 and rate == 16000, f"{p}: {rate}Hz ch{ch} w{width}" + return raw + + +async def list_rooms() -> list[str]: + lk = api.LiveKitAPI(url=LK_INTERNAL, api_key=KEY, api_secret=SECRET) + try: + res = await lk.room.list_rooms(api.ListRoomsRequest()) + return [r.name for r in res.rooms] + finally: + await lk.aclose() + + +def safe_json(r: httpx.Response): + try: + return r.json() + except Exception: + return r.text[:200] + + +class Call: + """One voice call through the real product API; full frame timeline kept.""" + + def __init__(self, tag: str): + self.tag = tag + self.http = httpx.AsyncClient(timeout=15) + self.room: rtc.Room | None = None + self.session: dict = {} + self.source: rtc.AudioSource | None = None + self.track: rtc.LocalAudioTrack | None = None + self.subtitles: list[dict] = [] + self.frames: list[tuple[int, int]] = [] # (arrival_ms, bytes) + self.agent_audio = bytearray() + self.audio_rate = 48000 + self.agent_joined_ms: int | None = None + self._speaking = False + self._keeper: asyncio.Task | None = None + self._first_pub_ms: int | None = None + + async def open(self) -> dict: + r = await self.http.post(f"{API}/api/voice/session") + r.raise_for_status() + self.session = r.json() + log(f"[{self.tag}] session room={self.session['room']} voice={self.session.get('voice')} epoch={self.session['epoch']}") + return self.session + + async def connect(self) -> None: + url = self.session["url"] + self.room = rtc.Room() + self.room.on("data_received", self._on_data) + self.room.on("track_subscribed", self._on_track) + self.room.on("participant_connected", self._on_participant) + await self.room.connect(url, self.session["token"]) + self.source = rtc.AudioSource(16000, 1) + self.track = rtc.LocalAudioTrack.create_audio_track("mic", self.source) + opt = rtc.TrackPublishOptions() + opt.source = rtc.TrackSource.SOURCE_MICROPHONE + await self.room.local_participant.publish_track(self.track, opt) + log(f"[{self.tag}] connected via {url} mic published") + self._keeper = asyncio.create_task(self._keep_silent()) + + async def _keep_silent(self) -> None: + silence = b"\x00" * 3200 + while self.source is not None: + if not self._speaking: + try: + await self.source.capture_frame( + rtc.AudioFrame(silence, 16000, 1, 1600)) + except Exception: + return + await asyncio.sleep(0.1) + + def _on_data(self, msg: rtc.DataPacket) -> None: + try: + payload = json.loads(msg.data.decode("utf-8")) + except Exception: + return + payload["_at_ms"] = now_ms() + self.subtitles.append(payload) + text = str(payload.get("text", ""))[:40] + log(f"[{self.tag}][sub] seq={payload.get('seq')} kind={payload.get('kind')} " + f"role={payload.get('role')} {text}") + + def _on_participant(self, p: rtc.RemoteParticipant) -> None: + log(f"[{self.tag}] joined: {p.identity}") + if "agent" in p.identity: + self.agent_joined_ms = now_ms() + + def _on_track(self, track: rtc.Track, pub, participant) -> None: + if track.kind != rtc.TrackKind.KIND_AUDIO: + return + log(f"[{self.tag}] agent audio track: {track.sid}") + + async def read(): + stream = rtc.AudioStream(track) + async for ev in stream: + frame = ev.frame + self.audio_rate = frame.sample_rate + self.frames.append((now_ms(), len(bytes(frame.data)))) + self.agent_audio.extend(bytes(frame.data)) + + asyncio.create_task(read()) + + async def _publish_pcm(self, pcm: bytes, label: str) -> dict: + self._speaking = True + started = now_ms() + self._first_pub_ms = self._first_pub_ms or started + step = 3200 + try: + for i in range(0, len(pcm), step): + chunk = pcm[i:i + step] + if len(chunk) < step: + chunk = chunk + b"\x00" * (step - len(chunk)) + await self.source.capture_frame(rtc.AudioFrame(chunk, 16000, 1, 1600)) + await asyncio.sleep(0.1) + finally: + self._speaking = False + ended = now_ms() + log(f"[{self.tag}] played {label} {len(pcm)/32000:.1f}s ({started}->{ended})") + return {"label": label, "start_ms": started, "end_ms": ended} + + async def speak(self, pcm: bytes, label: str) -> dict: + return await self._publish_pcm(pcm, label) + + async def wait_kind(self, kinds: tuple[str, ...], timeout: float, after_idx: int = 0) -> tuple[int, dict] | None: + deadline = time.time() + timeout + while time.time() < deadline: + await asyncio.sleep(0.05) + for i, s in enumerate(self.subtitles[after_idx:], start=after_idx): + if s.get("kind") in kinds: + return i, s + return None + + async def wait_reply(self, timeout: float = 60.0) -> dict: + start_len = len(self.subtitles) + deadline = time.time() + timeout + seen_speech: str | None = None + while time.time() < deadline: + await asyncio.sleep(0.2) + for s in self.subtitles[start_len:]: + if s.get("kind") == "turn_start": + seen_speech = s.get("speech_id") + if s.get("kind") in ("turn_end", "turn_cancel") and ( + seen_speech is None or s.get("speech_id") == seen_speech): + return {"kind": s["kind"], "speech_id": s.get("speech_id"), + "reason": s.get("reason")} + return {"kind": "timeout", "speech_id": seen_speech} + + async def speak_and_wait(self, pcm: bytes, label: str, timeout: float = 60.0) -> dict: + play = asyncio.create_task(self._publish_pcm(pcm, label)) + reply = await self.wait_reply(timeout) + await play + return {"play_label": label, "reply": reply} + + async def wait_frames(self, min_seconds: float = 2.0, timeout: float = 40.0) -> int | None: + """Wait until agent audio frames have been arriving for min_seconds.""" + deadline = time.time() + timeout + while time.time() < deadline: + await asyncio.sleep(0.1) + if len(self.frames) >= 2: + cutoff = self.frames[-1][0] - int(min_seconds * 1000) + earliest_in_window = next((t for t, _ in reversed(self.frames) if t < cutoff), None) + if earliest_in_window is not None: + return now_ms() + # fewer than min_seconds of frames recorded at all + if self.frames[-1][0] - self.frames[0][0] >= int(min_seconds * 1000) - 300: + return now_ms() + return None + + async def barge_interrupt(self, pcm: bytes) -> dict: + """她长回复实际有声时,用预录响亮短句回放打断(真实 WebRTC 发布)。 + + T0 = 打断音频首帧发布;T1 = 旧语音最后一帧到达(≥1s 帧间隙分界)。 + 声源为预录 WAV 回放(工程输入),非真实用户麦克风。 + """ + base_subs = len(self.subtitles) + ready = await self.wait_frames(min_seconds=3.0, timeout=45.0) + if ready is None: + return {"outcome": "no-audible-old-voice"} + barge = asyncio.create_task(self.speak(pcm, "barge-xiaoyun")) + # 打断首帧真正发布时刻由 speak 返回;此处先记发起 + cancel_ms = None + deadline = time.time() + 25 + while time.time() < deadline: + await asyncio.sleep(0.05) + for s in self.subtitles[base_subs:]: + if s.get("kind") == "turn_cancel": + cancel_ms = s["_at_ms"] + break + if cancel_ms: + break + await asyncio.sleep(14.0) # 观察旧声停止 + 新回复起播 + await barge + timeline = [t for (t, _) in self.frames] + last_old = None + for i, t in enumerate(timeline): + if i + 1 < len(timeline) and timeline[i + 1] - t >= 1000: + last_old = t + break + if last_old is None and timeline: + last_old = timeline[-1] + return { + "outcome": "interrupted" if cancel_ms else "no-cancel", + "old_audio_last_frame_ms": last_old, + "cancel_ms": cancel_ms, + "frames_total": len(self.frames), + "source": "pre-recorded wav playback over real WebRTC (not a human microphone)", + } + + async def hangup(self) -> dict: + sid = self.session.get("session_id") + self.source = None + frames_at_hangup = len(self.frames) + t_delete = now_ms() + r = await self.http.delete(f"{API}/api/voice/session/{sid}") + body = {"delete_status": r.status_code, "delete_body": safe_json(r), + "delete_ms": t_delete} + await asyncio.sleep(0.5) + if self.room is not None: + await self.room.disconnect() + await asyncio.sleep(2.0) + body["agent_frames_after_delete"] = len(self.frames) - frames_at_hangup + lk = api.LiveKitAPI(url=LK_INTERNAL, api_key=KEY, api_secret=SECRET) + try: + res = await lk.room.list_rooms(api.ListRoomsRequest(names=[self.session["room"]])) + body["room_removed"] = len(res.rooms) == 0 + finally: + await lk.aclose() + log(f"[{self.tag}] hangup: {body}") + return body + + def save(self, name: str) -> dict: + sub_path = OUT / f"{name}.subtitles.jsonl" + with sub_path.open("w", encoding="utf-8") as f: + for s in self.subtitles: + f.write(json.dumps(s, ensure_ascii=False) + "\n") + tl_path = OUT / f"{name}.frames.json" + tl_path.write_text(json.dumps( + {"first_pub_ms": self._first_pub_ms, + "frames": self.frames}, ensure_ascii=False)) + audio_path = None + if self.agent_audio: + audio_path = OUT / f"{name}.agent.wav" + with wave.open(str(audio_path), "wb") as w: + w.setnchannels(1) + w.setsampwidth(2) + w.setframerate(self.audio_rate) + w.writeframes(bytes(self.agent_audio)) + seqs = [s.get("seq") for s in self.subtitles if isinstance(s.get("seq"), int)] + return { + "tag": self.tag, + "session": self.session, + "session_voice": self.session.get("voice"), + "subtitle_count": len(self.subtitles), + "seq_monotonic": all(b > a for a, b in zip(seqs, seqs[1:])), + "agent_frames": len(self.frames), + "agent_audio_seconds": round(len(self.agent_audio) / 2 / self.audio_rate, 1), + "agent_audio_rate": self.audio_rate, + "agent_joined_ms": self.agent_joined_ms, + "subtitles_file": str(sub_path), + "frames_file": str(tl_path), + "agent_audio_file": str(audio_path) if audio_path else None, + } + + +def _db_query(sql: str, params: tuple = ()) -> list[dict]: + import sqlite3 + conn = sqlite3.connect(f"file:{DB}?mode=ro", uri=True) + conn.row_factory = sqlite3.Row + try: + return [dict(r) for r in conn.execute(sql, params)] + finally: + conn.close() + + +def db_dump() -> dict: + out: dict = {} + try: + out["chat_message"] = _db_query( + "SELECT id, ts, role, turn_id, status, substr(text,1,120) AS text FROM chat_message ORDER BY id") + out["budget_total"] = _db_query("SELECT key, value FROM budget_total") + out["token_usage"] = _db_query("SELECT day, scene, used FROM token_usage") + out["request_usage"] = _db_query("SELECT * FROM request_usage") + except Exception as e: + out["error"] = str(e) + return out + + +def budget_snapshot() -> dict: + out: dict = {"at_ms": now_ms()} + try: + out["token_usage"] = _db_query("SELECT day, scene, used FROM token_usage") + out["request_usage"] = _db_query("SELECT * FROM request_usage") + out["budget_total"] = _db_query("SELECT key, value FROM budget_total") + except Exception as e: + out["error"] = str(e) + return out + + +def asr_ledger_summary() -> dict: + p = Path("/opt/cybergril-hel910/asr-usage.jsonl") + if not p.exists(): + return {"exists": False} + events = [json.loads(l) for l in p.read_text().splitlines() if l.strip()] + return {"exists": True, "events": len(events), "raw": events[-8:]} + + +def worker_state() -> dict: + p = Path("/opt/cybergril-hel910/worker/voice_state_cybergril.json") + if not p.exists(): + return {"exists": False} + try: + return {"exists": True, "content": json.loads(p.read_text())} + except Exception as e: + return {"exists": True, "error": str(e)} + + +def save_json(name: str, payload: dict) -> None: + path = OUT / f"{name}.json" + path.write_text(json.dumps(payload, ensure_ascii=False, indent=1), encoding="utf-8") + log(f"saved {path}") + + +async def phase_dry() -> None: + """建房即删:核验建房/派发/删除链路与房间清空;不发音频、无 LLM/TTS。""" + rooms_before = await list_rooms() + call = Call("dry") + await call.open() + await asyncio.sleep(10) # 给 worker 派发入房 + rooms_mid = await list_rooms() + hangup = await call.hangup() + await asyncio.sleep(2) + rooms_after = await list_rooms() + save_json("dry", {"rooms_before": rooms_before, "rooms_mid": rooms_mid, + "hangup": hangup, "rooms_after": rooms_after, + "budget_after": budget_snapshot(), + "asr_ledger_after": asr_ledger_summary()}) + + +async def phase_call2() -> None: + """第二通:稍长问题(bajie)首文/首声时延 + 回放打断(xiaoyun)停声同钟量测。""" + call = Call("call2") + await call.open() + sess_voice = call.session.get("voice") + await call.connect() + marks: dict[str, int | None] = {} + base = len(call.subtitles) + + await call.speak(load_wav_16k_mono(TRIM / "u_bajie.trim.wav"), "q-bajie") + # 输入结束 = 回放发完 + marks["playback_end_ms"] = now_ms() + # user_final + got = await call.wait_kind(("user_final",), timeout=25) + marks["user_final_ms"] = got[1]["_at_ms"] if got else None + # 她的回复:turn_start(buffer_turn 下 interim 不先于全文) + got = await call.wait_kind(("turn_start",), timeout=60, after_idx=base) + marks["turn_start_ms"] = got[1]["_at_ms"] if got else None + got = await call.wait_kind(("assistant_final", "turn_cancel", "error"), timeout=90, after_idx=base) + marks["assistant_final_ms"] = got[1]["_at_ms"] if got else None + marks["assistant_final_kind"] = got[1].get("kind") if got else None + reply_text = (got[1].get("text") if got else "") or "" + # 首帧音频(回放发完之后到达的第一帧她的音频) + after = [t for (t, _) in call.frames if t > marks["playback_end_ms"]] + marks["first_agent_frame_ms"] = after[0] if after else None + # 等她实际有声再打断(不等 turn_end:那时音频已播完) + barge = await call.barge_interrupt(load_wav_16k_mono(TRIM / "u_xiaoyun.trim.wav")) + # 打断后的新回复 + new = await call.wait_kind(("user_final",), timeout=20) + barge["new_user_final_ms"] = new[1]["_at_ms"] if new else None + new_reply = await call.wait_kind(("turn_end", "turn_cancel"), timeout=90) + barge["new_reply_end"] = {"kind": new_reply[1].get("kind"), "at_ms": new_reply[1]["_at_ms"]} if new_reply else None + + # 时机A:她仍在生成时发文字(turn_start=生成开始;文字 POST 取消服务端活动轮)。 + # 口径如实:本步文字走 API 直发(python 客户端),不是网页输入框;网页入口的 + # 两种时机已在第一通完成(T1 在播时、T2 在 final→待播间隙)。 + base2 = len(call.subtitles) + await call.speak(load_wav_16k_mono(TRIM / "u_bajie.trim.wav"), "q2-bajie") + got = await call.wait_kind(("turn_start",), timeout=40, after_idx=base2) + marks["q2_turn_start_ms"] = got[1]["_at_ms"] if got else None + a_out: dict = {"fired": False} + if got: + h = (await call.http.get(f"{API}/api/health")).json() + a_text = "先别把这句长回答生成完,我打字打断你:只用一句话告诉我你现在待在哪个角落。" + t_post = now_ms() + r = await call.http.post(f"{API}/api/chat", json={ + "text": a_text, "turn_id": str(__import__("uuid").uuid4()), "epoch": h["epoch"]}, + timeout=90) + a_out = {"fired": True, "post_ms": t_post, "status": r.status_code, + "body_head": r.text[:200]} + marks["A_post_ms"] = t_post + # 预期:语音轮 turn_cancel(生成被取消,零泄漏零复活),文字轮获完整回复 + got2 = await call.wait_kind(("turn_cancel",), timeout=30, after_idx=base2) + a_out["voice_turn_cancel_ms"] = got2[1]["_at_ms"] if got2 else None + a_out["voice_turn_cancel_reason"] = got2[1].get("reason") if got2 else None + # 她此后不得再为 Q2 发声(观察窗口) + quiet_from = now_ms() + await asyncio.sleep(8.0) + a_out["q2_frames_after_cancel"] = sum(1 for (t, _) in call.frames if t >= quiet_from) + timing_a = a_out + + await asyncio.sleep(3.0) + hangup = await call.hangup() + save_json("call2", {"session_voice": sess_voice, "marks": marks, + "reply_text_head": reply_text[:200], + "barge": barge, "timing_a": timing_a, + "hangup": hangup, "call": call.save("call2"), + "budget_after": budget_snapshot(), + "worker_state_after": worker_state(), + "db_dump": db_dump(), + "asr_ledger_after": asr_ledger_summary()}) + + +async def phase_status() -> None: + rooms = await list_rooms() + save_json("status", {"rooms": rooms, "budget": budget_snapshot(), + "worker_state": worker_state(), + "asr_ledger": asr_ledger_summary(), "db": db_dump()}) + + +async def main() -> None: + phase = sys.argv[1] + fn = {"dry": phase_dry, "call2": phase_call2, "status": phase_status}[phase] + await fn() + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/docs/rework/hel910/tools/models-armed.yaml b/docs/rework/hel910/tools/models-armed.yaml new file mode 100644 index 0000000..112487e --- /dev/null +++ b/docs/rework/hel910/tools/models-armed.yaml @@ -0,0 +1,88 @@ +# HEL-910 一次性真实测试窗口部署配置(2026-10-29,服务器本地文件,不入仓库) +# 授权:白栖知主卡 HEL-797 评论 01a18753-8c70-7181-9758-5bab4685ba9f「继续测」, +# 批准《HEL-797-交谈修复复测安排.md》。LLM ≤10 请求、≤40000 tokens;嵌入 0 +# (CYBERGRIL_SEMANTIC=stub);生活/后台/语义 0。失败/取消/重试均计入(发送前预占)。 +# 窗口结束封账,余额不结转。tiers/routing/asr/tts/vad/turn/embedding/avatar 与 +# 候选 958c696 的 config/models.yaml 逐字一致(含 HEL-908 reasoning: buffer_turn)。 +tiers: + high: + provider: openai_compat + model: halogen-qwen3.8-flash-next + base_url: http://192.168.200.11:8731/v1 + api_key_env: null + timeout: 60.0 + temperature: 0.85 + reasoning: buffer_turn + standard: + provider: openai_compat + model: halogen-qwen3.8-flash-next + base_url: http://192.168.200.11:8731/v1 + api_key_env: null + timeout: 40.0 + temperature: 0.7 + reasoning: buffer_turn + low: + provider: openai_compat + model: halogen-qwen3.8-flash-next + base_url: http://192.168.200.11:8731/v1 + api_key_env: null + timeout: 20.0 + temperature: 0.4 + reasoning: buffer_turn +routing: + dialogue_main: high + dialogue_followup: standard + proactive_message: high + crisis: high + life_event: low + memory_gist: low + fact_extract: low + output_guard: low + pattern_detect: low + filler: none + tick: none + reach_out: none + avatar_drive: none +budget: + daily_tokens: 40000 + warn_ratio: 0.7 + hard_stop_ratio: 0.95 + daily_requests: + dialogue: 10 + life: 0 + background: 0 + semantic: 0 + total_requests: 10 + total_tokens: 40000 +asr: + provider: scripted + model: qwen3-asr-1.7b + language: zh +paralinguistic: + provider: scripted + model: sensevoice-small + window_ms: 1500 + enabled: true +tts: + provider: silence + model: fun-cosyvoice3-0.5b + voice_ref: null + sample_rate: 16000 +vad: + provider: energy + model: silero-v6 + sample_rate: 16000 +turn: + provider: heuristic + silence_min_ms: 150 + silence_hard_end_ms: 800 +embedding: + provider: openai_compat + model: qwen3-embedding-0.6b + base_url: null + api_key_env: null + dim: 1024 +avatar: + route: vrm + renderer: three.js + lipsync: envelope diff --git a/docs/rework/hel910/tools/models-failclosed.yaml b/docs/rework/hel910/tools/models-failclosed.yaml new file mode 100644 index 0000000..c3d5a34 --- /dev/null +++ b/docs/rework/hel910/tools/models-failclosed.yaml @@ -0,0 +1,88 @@ +# HEL-910 一次性真实测试窗口部署配置(2026-10-29,服务器本地文件,不入仓库) +# 授权:白栖知主卡 HEL-797 评论 01a18753-8c70-7181-9758-5bab4685ba9f「继续测」, +# 批准《HEL-797-交谈修复复测安排.md》。LLM ≤10 请求、≤40000 tokens;嵌入 0 +# (CYBERGRIL_SEMANTIC=stub);生活/后台/语义 0。失败/取消/重试均计入(发送前预占)。 +# 窗口结束封账,余额不结转。tiers/routing/asr/tts/vad/turn/embedding/avatar 与 +# 候选 958c696 的 config/models.yaml 逐字一致(含 HEL-908 reasoning: buffer_turn)。 +tiers: + high: + provider: openai_compat + model: halogen-qwen3.8-flash-next + base_url: http://192.168.200.11:8731/v1 + api_key_env: null + timeout: 60.0 + temperature: 0.85 + reasoning: buffer_turn + standard: + provider: openai_compat + model: halogen-qwen3.8-flash-next + base_url: http://192.168.200.11:8731/v1 + api_key_env: null + timeout: 40.0 + temperature: 0.7 + reasoning: buffer_turn + low: + provider: openai_compat + model: halogen-qwen3.8-flash-next + base_url: http://192.168.200.11:8731/v1 + api_key_env: null + timeout: 20.0 + temperature: 0.4 + reasoning: buffer_turn +routing: + dialogue_main: high + dialogue_followup: standard + proactive_message: high + crisis: high + life_event: low + memory_gist: low + fact_extract: low + output_guard: low + pattern_detect: low + filler: none + tick: none + reach_out: none + avatar_drive: none +budget: + daily_tokens: 0 + warn_ratio: 0.7 + hard_stop_ratio: 0.95 + daily_requests: + dialogue: 0 + life: 0 + background: 0 + semantic: 0 + total_requests: 0 + total_tokens: 0 +asr: + provider: scripted + model: qwen3-asr-1.7b + language: zh +paralinguistic: + provider: scripted + model: sensevoice-small + window_ms: 1500 + enabled: true +tts: + provider: silence + model: fun-cosyvoice3-0.5b + voice_ref: null + sample_rate: 16000 +vad: + provider: energy + model: silero-v6 + sample_rate: 16000 +turn: + provider: heuristic + silence_min_ms: 150 + silence_hard_end_ms: 800 +embedding: + provider: openai_compat + model: qwen3-embedding-0.6b + base_url: null + api_key_env: null + dim: 1024 +avatar: + route: vrm + renderer: three.js + lipsync: envelope diff --git a/docs/rework/hel910/tools/probe_fake_capture.mjs b/docs/rework/hel910/tools/probe_fake_capture.mjs new file mode 100644 index 0000000..fbf4b89 --- /dev/null +++ b/docs/rework/hel910/tools/probe_fake_capture.mjs @@ -0,0 +1,59 @@ +// HEL-910 offline feasibility probe (workstation-local, zero network beyond loopback): +// does Chromium --use-file-for-fake-audio-capture feed our schedule into getUserMedia, +// and does the AudioContext analyser probe see it at 50ms resolution? +// Usage: node probe_fake_capture.mjs +import { spawn } from 'node:child_process'; +import { mkdirSync, writeFileSync } from 'node:fs'; +import { join } from 'node:path'; +import { tmpdir } from 'node:os'; + +const [chrome, wav, out] = process.argv.slice(2); +mkdirSync(out, { recursive: true }); +const cdpPort = 9711, httpPort = 9712; +const page = ``; +writeFileSync(join(out, 'probe.html'), page); +const server = spawn('python3', ['-m', 'http.server', String(httpPort), '--bind', '127.0.0.1', '--directory', out], { stdio: 'ignore' }); +const profile = join(tmpdir(), `hel910-probe-${Date.now()}`); +const browser = spawn(chrome, [ + '--headless=new', `--remote-debugging-port=${cdpPort}`, `--user-data-dir=${profile}`, '--no-first-run', + '--use-fake-device-for-media-stream', '--use-fake-ui-for-media-stream', + `--use-file-for-fake-audio-capture=${wav}`, + '--autoplay-policy=no-user-gesture-required', 'about:blank', +], { stdio: 'ignore', env: { ...process.env, LD_LIBRARY_PATH: `${process.env.HOME}/chromium-libs/root/usr/lib/x86_64-linux-gnu:${process.env.HOME}/chromium-libs/root/usr/lib` } }); +const sleep = ms => new Promise(r => setTimeout(r, ms)); +let targets; +for (let i = 0; i < 60 && !targets; i++) { try { targets = await (await fetch(`http://127.0.0.1:${cdpPort}/json`)).json(); } catch { await sleep(250); } } +const ws = new WebSocket(targets.find(t => t.type === 'page').webSocketDebuggerUrl); +await new Promise(r => ws.addEventListener('open', r, { once: true })); +let id = 0; const waiting = new Map(); +ws.addEventListener('message', ({ data }) => { const m = JSON.parse(data); if (m.id && waiting.has(m.id)) { const { ok } = waiting.get(m.id); waiting.delete(m.id); ok(m.result); } }); +const cdp = (method, params = {}) => new Promise(ok => { const n = ++id; waiting.set(n, { ok }); ws.send(JSON.stringify({ id: n, method, params })); }); +await cdp('Page.navigate', { url: `http://127.0.0.1:${httpPort}/probe.html` }); +await sleep(12000); +const res = await cdp('Runtime.evaluate', { expression: 'JSON.stringify({ok: window.__ok, err: window.__err, samples: window.__log.length, log: window.__log})', returnByValue: true }); +writeFileSync(join(out, 'probe-result.json'), res.result.value); +const parsed = JSON.parse(res.result.value); +const speaking = parsed.log.filter(([, e]) => e > 0.02); +console.log('gum ok:', parsed.ok, parsed.err || '', '| samples:', parsed.samples); +console.log('speaking windows (>0.02 rms):', speaking.length); +console.log('first/last speaking ms:', speaking[0]?.[0], speaking[speaking.length - 1]?.[0]); +console.log('max rms:', Math.max(...parsed.log.map(([, e]) => e))); +browser.kill(); server.kill(); diff --git a/docs/rework/hel910/tools/snapshot.sh b/docs/rework/hel910/tools/snapshot.sh new file mode 100644 index 0000000..1b22132 --- /dev/null +++ b/docs/rework/hel910/tools/snapshot.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +# HEL-910:窗口前/后状态快照(只读) +# 用法: snapshot.sh pre|post +set -u +BASE=/opt/cybergril-hel910 +OUT=$BASE/snapshots/$1-$(date -u +%H%M%S).txt +{ + echo "== HEL-910 $1 snapshot $(date -u +%FT%TZ) ==" + echo "-- ports (83xx/80xx/98xx/788x/10095) --" + ss -ltnp | grep -E ':(8[03][0-9]{2}|98[0-9]{2}|788[0-9]|10095) ' || echo none + echo "-- our pids --" + for f in api bridge worker tts9880; do + p=$BASE/logs/$f.pid + if [ -f "$p" ]; then P=$(cat "$p"); if kill -0 "$P" 2>/dev/null; then echo "$f pid $P alive: $(tr '\0' ' ' < /proc/$P/cmdline | cut -c1-120)"; else echo "$f pid $P dead"; fi; else echo "$f no pidfile"; fi + done + echo "-- livekit rooms --" + curl -s --max-time 5 -H 'Authorization: Bearer skip' http://127.0.0.1:7880/twirp/livekit.RoomService/ListRooms -X POST -H 'Content-Type: application/json' -d '{}' 2>/dev/null | head -c 300 || true + echo + echo "-- voices.json hash + builtin count --" + sha256sum /opt/voice-agent/cosyvoice/voices.json + python3 - <<'EOF' +import json +try: + d = json.load(open('/opt/voice-agent/cosyvoice/voices.json')) + ids = list(d.keys()) if isinstance(d, dict) else [x.get('id') for x in d] + print('entries:', len(ids), 'ids:', ids, 'cg- entries:', sum(1 for i in ids if str(i).startswith('cg-'))) +except Exception as e: + print('voices.json read error:', e) +EOF + echo "-- gpu --" + nvidia-smi --query-gpu=memory.used,memory.total --format=csv,noheader + echo "-- 8300/8310/8320/8350 untouched check --" + ss -ltn | grep -E ':(8300|8310|8320|8350) ' || echo 'WARN: expected demo ports missing' + echo "-- tts.log size --" + stat -c '%s bytes %y' /opt/voice-agent/cosyvoice/tts.log 2>/dev/null || echo no-log +} > "$OUT" 2>&1 +cat "$OUT" diff --git a/docs/rework/hel910/tools/tts_ctl.sh b/docs/rework/hel910/tools/tts_ctl.sh new file mode 100644 index 0000000..d0f609c --- /dev/null +++ b/docs/rework/hel910/tools/tts_ctl.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +# HEL-910 测试窗口:共享 CosyVoice TTS 9880 临时恢复/停回(按快照;精确 PID,禁 fuser -k) +# 用法: bash tts_ctl.sh start|stop|status|snapshot +set -u +BASE=/opt/cybergril-hel910 +PIDF=$BASE/logs/tts9880.pid +SNAP=$BASE/snapshots/tts9880-before.txt +CC=/opt/voice-agent/cosyvoice + +case "${1:-}" in + status) + if [ -f "$PIDF" ]; then P=$(cat "$PIDF"); kill -0 "$P" 2>/dev/null && echo "running pid $P (ours)" || echo "pid $P not alive"; else echo "not started by us"; fi + curl -s --max-time 3 http://127.0.0.1:9880/health && echo " <- health" || echo "health not answering" + exit 0 ;; + snapshot) + mkdir -p "$BASE/snapshots" + { echo "ts=$(date -u +%FT%TZ)"; if curl -s --max-time 3 http://127.0.0.1:9880/health >/dev/null 2>&1; then echo "was=up"; else echo "was=down"; fi; ss -ltnp 2>/dev/null | grep ':9880 ' || echo "port9880=free"; } > "$SNAP" + cat "$SNAP" ;; + stop) + if [ -f "$PIDF" ]; then + P=$(cat "$PIDF") + kill "$P" 2>/dev/null; sleep 5 + kill -0 "$P" 2>/dev/null && kill -9 "$P" 2>/dev/null + rm -f "$PIDF" + echo "tts stopped (pid $P)" + else + echo "not ours to stop (no pid file)" + fi + curl -s --max-time 3 http://127.0.0.1:9880/health >/dev/null 2>&1 && echo "WARN: 9880 still answering" || echo "9880 down" ;; +esac + +# start (fallthrough) +if curl -s --max-time 3 http://127.0.0.1:9880/health >/dev/null 2>&1; then + echo "9880 already up — NOT ours, not touching"; exit 0 +fi +if ss -ltn 2>/dev/null | grep -q ':9880 '; then echo "port 9880 occupied by non-healthy process — abort"; exit 1; fi +cd "$CC" +nohup "$CC/venv/bin/python" server.py >> "$CC/tts.log" 2>&1 & +echo $! > "$PIDF" +echo "tts starting (pid $(cat $PIDF)) — model load takes up to ~120s" +for i in $(seq 1 60); do + sleep 2 + if curl -s --max-time 3 http://127.0.0.1:9880/health 2>/dev/null | grep -q '"ok"[[:space:]]*:[[:space:]]*true'; then + echo "OK: tts healthy after ~$((i*2))s"; exit 0 + fi + kill -0 "$(cat $PIDF)" 2>/dev/null || { echo "FAIL: tts process died"; tail -10 "$CC/tts.log"; exit 1; } +done +echo "FAIL: tts not healthy in 120s"; tail -10 "$CC/tts.log"; exit 1 diff --git a/docs/rework/hel910/tools/usage.sh b/docs/rework/hel910/tools/usage.sh new file mode 100644 index 0000000..61e9c99 --- /dev/null +++ b/docs/rework/hel910/tools/usage.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash +# HEL-910:用量账快查(LLM 请求/tokens、TTS 段数、ASR 账本)——触线即停的现场读数 +set -u +BASE=/opt/cybergril-hel910 +echo "== budget tables ($(date -u +%FT%TZ)) ==" +python3 - <<'EOF' +import json, sqlite3, pathlib +db = '/opt/cybergril-hel910/data/companion.db' +try: + conn = sqlite3.connect(f'file:{db}?mode=ro', uri=True); conn.row_factory = sqlite3.Row + for sql, label in [ + ("SELECT key,value FROM budget_total", 'budget_total'), + ("SELECT day,scene,used FROM token_usage ORDER BY day,scene", 'token_usage'), + ("SELECT * FROM request_usage", 'request_usage'), + ]: + try: + print(label, json.dumps([dict(r) for r in conn.execute(sql)], ensure_ascii=False)) + except Exception as e: + print(label, 'ERR', e) + conn.close() +except Exception as e: + print('db ERR', e) +p = pathlib.Path('/opt/cybergril-hel910/asr-usage.jsonl') +if p.exists(): + lines = [l for l in p.read_text().splitlines() if l.strip()] + print('asr ledger events:', len(lines)) +else: + print('asr ledger: (none)') +EOF +echo "== tts.log window segments ==" +T0MARK=$BASE/snapshots/tts-log-start-byte +if [ -f "$T0MARK" ]; then + START=$(cat "$T0MARK") +else + START=0 +fi +tail -c +$((START + 1)) /opt/voice-agent/cosyvoice/tts.log 2>/dev/null | grep -c "first chunk" || true +echo "(syntheses reaching first chunk since window start; cap 20)" diff --git a/docs/rework/hel910/tools/voice.yaml b/docs/rework/hel910/tools/voice.yaml new file mode 100644 index 0000000..db7b02e --- /dev/null +++ b/docs/rework/hel910/tools/voice.yaml @@ -0,0 +1,15 @@ +# HEL-910 一次性真实测试窗口语音配置(2026-10-29,服务器本地,不入仓库) +# livekit_url 走独立 8363 TLS 桥(wss),livekit_internal 保持本机明文 7880。 +# 与 HEL-907 布局一致,仅状态/会话文件指到 /opt/cybergril-hel910。 +livekit_url: wss://192.168.200.12:8363 +livekit_internal: http://127.0.0.1:7880 +api_key: devkey +api_secret: voiceagent-local-secret-2026 +agent_name: cybergril-voice-agent +tts_health_url: http://127.0.0.1:9880/health +panel_url: https://127.0.0.1:8090 +tts_url: http://127.0.0.1:9880 +registry_file: /opt/voice-agent/cosyvoice/voices.json +worker_state_file: /opt/cybergril-hel910/worker/voice_state_cybergril.json +token_ttl_seconds: 300 +session_ttl_seconds: 900 diff --git a/docs/rework/hel910/tools/watchdog.sh b/docs/rework/hel910/tools/watchdog.sh new file mode 100644 index 0000000..6e9fa5e --- /dev/null +++ b/docs/rework/hel910/tools/watchdog.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +# HEL-910 窗口墙钟看门狗:到点强制收尾。用法: watchdog.sh +set -u +BASE=/opt/cybergril-hel910 +LOG=$BASE/logs/watchdog.log +DL="${1:?deadline epoch seconds required}" +echo "[$(date -u +%FT%TZ)] watchdog start, deadline $(date -u -d @$DL +%FT%TZ) (pid $$)" >> "$LOG" +while [ "$(date +%s)" -lt "$DL" ]; do sleep 10; done +echo "[$(date -u +%FT%TZ)] DEADLINE REACHED — force end" >> "$LOG" +bash $BASE/ctl/force_end.sh +echo "[$(date -u +%FT%TZ)] watchdog done" >> "$LOG" diff --git a/docs/rework/hel910/tools/worker.env b/docs/rework/hel910/tools/worker.env new file mode 100644 index 0000000..5d8e4b5 --- /dev/null +++ b/docs/rework/hel910/tools/worker.env @@ -0,0 +1,10 @@ +# HEL-910 测试窗口 worker 配置(2026-10-29,600 权限,不入仓库) +CYBERGRIL_API_BASE=http://127.0.0.1:8360 +CYBERGRIL_AGENT_NAME=cybergril-voice-agent +LIVEKIT_URL=ws://127.0.0.1:7880 +LIVEKIT_API_KEY=devkey +LIVEKIT_API_SECRET=voiceagent-local-secret-2026 +CYBERGRIL_WORKER_HEALTH_PORT=8082 +CYBERGRIL_VOICE_STATE=/opt/cybergril-hel910/worker/voice_state_cybergril.json +# ASR 用量账本独立(HEL-907/879 目录只读) +CYBERGRIL_ASR_USAGE_LEDGER=/opt/cybergril-hel910/asr-usage.jsonl diff --git a/docs/rework/hel910/tools/worker_ctl.sh b/docs/rework/hel910/tools/worker_ctl.sh new file mode 100644 index 0000000..e36e25c --- /dev/null +++ b/docs/rework/hel910/tools/worker_ctl.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash +# HEL-910 测试窗口:专属语音 worker(只按 PID 句柄停止;ASR 布防在 etc/asr-arm.env) +set -u +BASE=/opt/cybergril-hel910 +LOG=$BASE/logs/worker.log +PIDF=$BASE/logs/worker.pid +VENV=/opt/voice-agent/agent/venv + +stop() { + if [ -f "$PIDF" ]; then + P=$(cat "$PIDF") + if [ "$P" != "$$" ] && kill -0 "$P" 2>/dev/null; then kill "$P"; sleep 3; fi + if [ "$P" != "$$" ] && kill -0 "$P" 2>/dev/null; then kill -9 "$P"; fi + rm -f "$PIDF" + echo "worker stopped (pid $P)" + else + echo "no pid file; nothing stopped" + fi +} + +case "${1:-}" in + stop) stop; exit 0 ;; + status) + if [ -f "$PIDF" ]; then P=$(cat "$PIDF"); kill -0 "$P" 2>/dev/null && echo "running pid $P" || echo "pid $P not alive"; fi + curl -s --max-time 3 "http://127.0.0.1:8082/" && echo " <- health" || echo "health port not answering" + exit 0 ;; +esac + +cd "$BASE/worker" +set -a +source "$BASE/worker/.env" +source "$BASE/etc/asr-arm.env" +set +a +PYTHONPATH="$BASE/current/src" nohup "$VENV/bin/python" -m cybergril.voice.worker start > "$LOG" 2>&1 & +echo $! > "$PIDF" +echo "worker starting (pid $(cat $PIDF)) ASR window=$(grep -o 'hel910-20261029-a' $BASE/etc/asr-arm.env | head -1)" +sleep 18 +grep -m1 "registered worker" "$LOG" >/dev/null && echo "OK: worker registered" \ + || { echo "FAIL:"; tail -8 "$LOG"; exit 1; } diff --git a/docs/rework/hel910/web/01-page-loaded.png b/docs/rework/hel910/web/01-page-loaded.png new file mode 100644 index 0000000..df8c1c4 Binary files /dev/null and b/docs/rework/hel910/web/01-page-loaded.png differ diff --git a/docs/rework/hel910/web/02-voice-listening.png b/docs/rework/hel910/web/02-voice-listening.png new file mode 100644 index 0000000..cb63e05 Binary files /dev/null and b/docs/rework/hel910/web/02-voice-listening.png differ diff --git a/docs/rework/hel910/web/03-r1-speaking.png b/docs/rework/hel910/web/03-r1-speaking.png new file mode 100644 index 0000000..536c82e Binary files /dev/null and b/docs/rework/hel910/web/03-r1-speaking.png differ diff --git a/docs/rework/hel910/web/04-after-T1.png b/docs/rework/hel910/web/04-after-T1.png new file mode 100644 index 0000000..ae9f47a Binary files /dev/null and b/docs/rework/hel910/web/04-after-T1.png differ diff --git a/docs/rework/hel910/web/05-T1-reply.png b/docs/rework/hel910/web/05-T1-reply.png new file mode 100644 index 0000000..448ea62 Binary files /dev/null and b/docs/rework/hel910/web/05-T1-reply.png differ diff --git a/docs/rework/hel910/web/06-after-T2.png b/docs/rework/hel910/web/06-after-T2.png new file mode 100644 index 0000000..baee09c Binary files /dev/null and b/docs/rework/hel910/web/06-after-T2.png differ diff --git a/docs/rework/hel910/web/07-T2-reply.png b/docs/rework/hel910/web/07-T2-reply.png new file mode 100644 index 0000000..2f49cde Binary files /dev/null and b/docs/rework/hel910/web/07-T2-reply.png differ diff --git a/docs/rework/hel910/web/08-R3-speaking.png b/docs/rework/hel910/web/08-R3-speaking.png new file mode 100644 index 0000000..647b823 Binary files /dev/null and b/docs/rework/hel910/web/08-R3-speaking.png differ diff --git a/docs/rework/hel910/web/09-R3-done.png b/docs/rework/hel910/web/09-R3-done.png new file mode 100644 index 0000000..43ff522 Binary files /dev/null and b/docs/rework/hel910/web/09-R3-done.png differ diff --git a/docs/rework/hel910/window-record.md b/docs/rework/hel910/window-record.md new file mode 100644 index 0000000..783fd46 --- /dev/null +++ b/docs/rework/hel910/window-record.md @@ -0,0 +1,85 @@ +# HEL-910 · 真实通话复测窗口记录:发文字停声与新回复(2026-10-29) + +> 授权:白栖知主卡 HEL-797 评论 `01a18753-8c70-7181-9758-5bab4685ba9f`「继续测」,批准 +> 《HEL-797-交谈修复复测安排.md》(附件 `01a18755-110e-71c8-b12f-10d234e28b6a`)。 +> 候选:`agent/2/15e79a2458bb` @ `958c6962fb1f2a4462a6df794d893aee1fcb0667`(父 b8ec832;部署前 +> 对本地 `git archive 958c696` 逐文件 sha256 核对服务器 `/opt/cybergril-hel910/current` 完全一致, +> 仅多一个 REVISION 标记;web/dist 含 cg.interrupt 构建产物)。需求基准 v1.12/60 项;本卡无需求变更。 +> 窗口(UTC):**布防后首个真实出站 11:53:12.96(dry 房 ASR connect)→ 封账 12:16:46 ≈ 23.6 分** +> (≤45 分);LLM 触线 10/10 即停。 + +## 0. 结论速览 + +| 问题(白栖知的原始问题) | 结果 | +| --- | --- | +| 用户发文字时她能否停下来 | ✅ 真实网页输入框发送(真 Enter 键):她在播的语音停止(浏览器能量探测 ≤~1.4s 内持续静默;本地 hush 静音在发送瞬间);第二通未取得可闻旧声期间的回放打断样本(时机错过,如实) | +| 文字是否得到回复 | ✅ 两次网页文字(T1 在播时、T2 在她想完待播时)都得到完整回复并落库(行 sent),旧轮不复活、无幽灵行;回执纪律正确(被打断轮零回执) | +| 她多久开口 | ⚠️ 实测(第二通,完整链):输入结束→识别终稿 2.43s→开始生成 +4.10s→**实际第一声 +9.53s**→字幕全文/落库 +12.10s。首声距输入结束 ~9.5s(>5s 关注线,主因 VAD 2.4s+整轮缓冲生成 3.4s+TTS ~0.5s;单样本如实交回) | +| 是否读内部思考 | ✅ 本轮全部真实回复(18 条 companion 行、字幕、TTS 文本)干净无思考;**但真实回复未出现带 `` 形状**,故真实端点未复现"带 closer 分离";离线证据在 HEL-909 | +| 生成中被文字取消(时机A) | ⛔ 未取得正面样本:call1 网页侧 U2 检测失误未触发;call2 的 API 直发文字与 worker 语音轮竞速反向(文字先到被语音轮正常取消,行 cancelled+幂等 chat.cancelled 帧);随后语音轮撞 10/10 预算硬闸诚实 φ 失败。预算封顶不补测 | +| 语音打断后声音恢复 | ✅ 两次文字打断后,后续语音轮正常出声并完整回执(U2 轮、U4 轮 receipt ack) | +| 全部上限 | ✅ 全部在上限内或恰好触线即停(LLM 10/10 触线、建房 4/4 触线;tokens 30398/40000、TTS 6/20、ASR 350.63/720s、通话 2/2、窗口 23.6/45min、付费 0) | +| 清理与恢复 | ✅ 8360/8361/8363/8082/9880 全停;LiveKit 房间空;voices.json 哈希前后一致、11 支内置零变化、cg- 零残留;8300/8310/8320/8350/7880/10095 未动;GPU 回 747MiB | + +## 1. 布防(先核环境,cap=0 fail-closed 验证后才开窗) + +- 快照:端口/进程/GPU/voices.json(哈希 `7b2a5021…`,11 内置,cg- 0)/TTS 9880 停机 → `window/pre-window.txt`。 +- 隔离部署 `/opt/cybergril-hel910/`(新预算、新 window_id `hel910-20261029-a`、新隔离档案「小测」;HEL-907/879 目录只读复用): + - 统一实例 8360/8361 同进程双入口(`tools/api_ctl.sh`,`.venv311` 只读复用,`CYBERGRIL_SEMANTIC=stub`、`R2_ENABLED=1` 与 HEL-907 一致); + - WSS 桥 8363、专属 worker 8082(agent venv 1.8.8);`etc/models.yaml` 三档 `reasoning: buffer_turn` 与候选 `config/models.yaml` 逐字一致,仅预算块改为本窗批准值(dialogue 10 / total 10 / 40000 tokens,其余 0)。 +- **cap=0 fail-closed 预检**(`models-failclosed.yaml`):建档案 → persona_job=failed(background=0,预占前拒绝);POST /api/chat → 诚实 `chat.error`(φ 原句),`request_usage`/`budget_total` 全空(零出站);POST /api/voice/session 在 TTS 停机时 503 且不建房。之后整库丢弃换 armed。 +- 共享 TTS 9880 按快照临时恢复(health ok,14s);**面板 8090 本轮未启用**(零登记/零试听,不需要)。墙钟看门狗(44 分钟硬顶,精确 PID 句柄)常备;`force_end.sh` 覆盖异常路径。 + +## 2. 第一通:真实网页入口的文字打断(浏览器=用户,Chromium 156 headless) + +- 用户侧全部走真实页面 `https://192.168.200.12:8361`:自签证书按用户姿态逐 origin 过Interstitial(8361+8363);麦克风=Chromium fake capture 回放既有工程样本时刻表(`tools/build_fake_wavs.py`:U1 海绵宝宝@0s、U2 八戒@60s、U3 海绵宝宝@120s,240s 循环);文字=真实输入框 `textarea` + CDP 真实 Enter 键(非直接 POST)。页面探针(同页时钟):流能量 50ms、`el.muted` 转换、voice 相位、heard 文本、chat DOM、fetch 网络。截图 `web/01..09`。 +- **T1(时机B:旧回答已生成、TTS 实际在播)**:她在播 R1(能量>0.02 持续、相位 speaking)时输入框发送 → + 发送瞬间本地 hush 静音(同步);**~1.4s 内浏览器收流能量持续归零**(远端旧音轨停止;0.2s 轮询+静默窗口径,粗粒度如实);T1 获完整文字回复(行4 sent);R1 不复活(行2 已完、无后续 R1 音频、receipt 正确缺席);U2 语音轮随后正常出声(行5/6 sent,回执 ack)→ **文字打断后语音恢复正常**。 +- **T2(网页入口,页面相位=thinking 时发送)**:实际落在 U3 回复已落库、TTS 待播/刚起播的间隙(HEL-909 评审 C 形状)→ U3 回复行8 sent 且文本完整保留(音频被截,receipt 正确缺席);T2 获完整回复(行10「平静。」);U4 语音轮再次正常出声且回执 ack(行11/12)→ 恢复正常第二次确认。 +- **call1 缺陷/失误(如实)**:① 驱动脚本对 U2 heard-final 的检测条件未命中(原因无法定证——探针原始数据随浏览器被超时杀掉丢失),时机A 网页正面样本因此未执行;② 页面语音会话结束后文件循环带来一次 U4 轮(+257s,回复在挂断后落库、未出声)多耗 1 次 LLM——测量装置的时序代价,已计入账本;③ 浏览器探针原始 JSON/webm 因驱动进程超时被杀未存盘(截图与里程碑日志保留;第二通用 python 客户端独立取证帧级时间轴)。 + +## 3. 第二通:python 客户端(同钟毫秒时间轴,`window/call2.*`) + +- **稍长问题(八戒)等待链**(call2.json marks + frames/wav 离线对齐):回放发完 → user_final **+2.43s**(VAD)→ turn_start(生成开始)**+4.10s** → **实际第一声 +9.53s**(wav 能量段起播;生成 3.44s+TTS 首包)→ assistant_final(字幕全文)**+12.10s** → 播放完整、回执 ack(+12.10s 处)。回复本体较短(「好,小十。去化缘…」14 字)——「稍长回复」目标部分达成,等待数字仍有效(整轮缓冲的主导项是 VAD+生成,不随回复长度显著变化)。 +- **回放打断(xiaoyun,响亮短句 rms 4970 预检)**:⚠️ **未取得有效样本**——她的 Q1 音频在打断回放开始前 ~1.1s 已自然播完(wav 能量段 979988–982187 vs 回放起播 ~983.3k),`turn_cancel(interrupted)` 是其后新轮被同段回放第二次 final 打断(非停旧声)。真实取到的:VAD 中断链路真实工作(cancel=final 后 0.6s)、被打断轮回执 fail-closed 正确。HEL-907 同项亦未取得,两轮均如实不冒充。 +- **时机A(API 直发文字取消生成中的语音轮)**:竞速反向——文字 POST 先于 worker 语音 POST 到达(turn_start 在适配器开流时即发,早于服务端收到),文字轮被更新的语音轮正常取消(**行19 cancelled + SSE 幂等 `chat.cancelled` 终态帧**,即 HEL-908 R1 修复路径的真实表现);随后语音轮 LLM 预占撞 10/10 硬闸 → 诚实 `chat.error` φ 原句念出(行20 failed,无幽灵 companion 行)。**正面"生成中被取消"样本未取得,预算封顶不补测**。 +- 挂断:DELETE 200、房间真删、删后仅 1 帧在途。 + +## 4. 思考隔离检查(真实端点) + +18 条 companion 落库行、全部字幕、`tts-window.log` 合成文本:零 ``/``/思考前缀。 +**但本轮真实回复均未出现带 closer 形状**(该端点隐式思考无标签时任何客户端模式都不可分离——HEL-908 已声明边界):真实端点未复现"带 `` 分离",覆盖范围如实限定;离线 32 组形状证据见 HEL-909 附件。 + +## 5. 用量账(含失败/取消;封账后不重开) + +| 类别 | 实际 | 上限 | +| --- | --- | --- | +| 时窗 | 23.6 分(11:53:12.96→12:16:46) | ≤45 分 | +| 通话 | 2 通(浏览器 ~4.4 分 / python ~1.5 分,串行) | ≤2、各≤5 分 | +| 建房 | 4(dry+call1+call2+一次 SSL 证书报错未连成的空房,房间已核实删除、房间清空) | ≤4(触线) | +| LLM | **10 请求 / 30,398 tokens(触线即停)**:call1 6(含挂断后 U4 轮)+ call2 4 | ≤10 / ≤40000 | +| 嵌入/生活/后台/语义 | 0(stub;persona/background=0 fail-closed 预检证实) | 0 | +| 通话 TTS | 6 段(达首包口径) | ≤20 | +| 连续 ASR | 保守=确证 **350.63s**(逐会话 0/264.24/0/86.38),重试 0 | ≤720s、每通重连≤2 | +| 新登记/上传/登记转写/试听合成 | 全 0(未开 8090;voices.json 前后哈希一致) | 0 | +| 新增付费 | 0 | 0 | + +## 6. 发现的问题(交回,不现场改核心代码) + +- 🟡 **首声等待**:输入结束→第一声 ~9.5s(user_final 后 ~7.1s;生成开始后 ~3.4s)。单样本+call1 量级相近,未达"经常"判定所需的多样本;按《复测安排》记录交回,不现场调参。构成:VAD 2.4s + 整轮缓冲生成 3.4s(buffer_turn 已知代价,换来零思考泄漏)+ TTS ~0.5s。 +- 🟡 worker.py `_on_item` 对 `AgentHandoff` 项取 `role` 抛 AttributeError(SDK 事件内捕获,非致命日志噪音,两轮通话均出现)。 +- 🟡 job 关停路径 `TypeError: object NoneType can't be used in 'await' expression`(livekit-agents shutdown 回调;非致命、挂断清理本身正常)。 +- 🟡 本窗测量脚本自身:`tts_ctl.sh` snapshot/stop 分支穿透导致一次多余的 TTS 重启(随即按快照停回,零合成零预算影响);call1 驱动超时杀进程丢失页内探针数据。均已在 `tools/` 原样留档。 +- 已知窄窗口(延迟 cg.interrupt 打断新回复):本轮未观察到该事件,不宣称排除(无正面样本)。 + +## 7. 清理与恢复(逐项核对,`window/post-window.txt`) + +8360/8361/8363/8082/9880 全停(精确 PID);LiveKit `ListRooms` 空(含那次证书空房,已核实删除;隔离实例会话登记文件留有一条 TTL 未到期记录,房间实际已不存在——API 进程先于 TTL 停机所致,留证不追删);voices.json 哈希前后一致、cg- 0;8300/8310/8320/8350/7880/10095 原样;GPU 747MiB;8340/ComfyUI 保持停机未碰。看门狗已停。证据包 `/opt/cybergril-hel910/hel910-evidence-20261029.tar.gz` sha256 `83363576b922ff45a7b85706801ece5b790b2d22bf14a4e1dbf1aed303d7a3f0`;测试档案/账本留在 `/opt/cybergril-hel910/`(未触碰任何既有实例与真实档案)。 + +## 8. 未测 / 承接(如实) + +- **真实用户麦克风打断时延**(含可闻旧声期间的语音打断停声):两轮(HEL-907/910)均未取得有效样本,需真人在同一时间轴发声+听声,或下轮工程窗口先用"她实际有声才触发"的门控重试。 +- **时机A(生成中文字取消)正面样本**:需文字在语音轮服务端激活后、生成完成前到达(如等 chat 行落库再发);本轮竞速反向+预算封顶,未覆盖。 +- **真实端点带 `` 形状**:未出现,真实分离未复现(离线证据在 HEL-909)。 +- 首声等待"经常>5s"与否:需多样本;本轮 1 精确样本 + 1 量级相近。 +- 真机/手机麦克风、Safari:未测(D3 用户动作)。 diff --git a/docs/rework/hel910/window/api.log b/docs/rework/hel910/window/api.log new file mode 100644 index 0000000..cded406 --- /dev/null +++ b/docs/rework/hel910/window/api.log @@ -0,0 +1,148 @@ +INFO: Started server process [116699] +INFO: Started server process [116699] +INFO: Uvicorn running on http://0.0.0.0:8360 (Press CTRL+C to quit) +INFO: Uvicorn running on https://0.0.0.0:8361 (Press CTRL+C to quit) +INFO: 127.0.0.1:53518 - "GET /api/health HTTP/1.1" 200 OK +INFO: 127.0.0.1:43322 - "GET /api/health HTTP/1.1" 200 OK +INFO: 127.0.0.1:53530 - "POST /api/companion HTTP/1.1" 201 Created +INFO: 127.0.0.1:46880 - "POST /api/voice/session HTTP/1.1" 201 Created +INFO: 127.0.0.1:33042 - "DELETE /api/voice/session/1RDW7vfLqnpCjIK4SO_tSNzk HTTP/1.1" 200 OK +INFO: 192.168.200.13:34830 - "GET / HTTP/1.1" 200 OK +INFO: 192.168.200.13:34830 - "GET /assets/index-Vm-EFPLb.js HTTP/1.1" 200 OK +INFO: 192.168.200.13:34844 - "GET /assets/index-B8TdHoQm.css HTTP/1.1" 200 OK +INFO: 192.168.200.13:34830 - "GET /assets/her-talk.jpg HTTP/1.1" 200 OK +INFO: 192.168.200.13:34844 - "GET /assets/her-room.jpg HTTP/1.1" 200 OK +INFO: 192.168.200.13:34844 - "GET /api/health HTTP/1.1" 200 OK +INFO: 192.168.200.13:34830 - "GET /favicon.ico HTTP/1.1" 404 Not Found +INFO: 192.168.200.13:34830 - "GET /api/companion HTTP/1.1" 200 OK +INFO: 192.168.200.13:34830 - "GET /api/messages?limit=200 HTTP/1.1" 200 OK +INFO: 192.168.200.13:34830 - "GET /assets/icons.svg HTTP/1.1" 200 OK +INFO: 192.168.200.13:34830 - "GET / HTTP/1.1" 200 OK +INFO: 192.168.200.13:34830 - "GET /api/health HTTP/1.1" 200 OK +INFO: 192.168.200.13:34830 - "GET /api/companion HTTP/1.1" 200 OK +INFO: 192.168.200.13:34830 - "GET /api/messages?limit=200 HTTP/1.1" 200 OK +INFO: 192.168.200.13:34830 - "GET /api/companion HTTP/1.1" 200 OK +INFO: 192.168.200.13:48642 - "GET / HTTP/1.1" 200 OK +INFO: 192.168.200.13:48642 - "GET /assets/index-B8TdHoQm.css HTTP/1.1" 200 OK +INFO: 192.168.200.13:48656 - "GET /assets/index-Vm-EFPLb.js HTTP/1.1" 200 OK +INFO: 192.168.200.13:48642 - "GET /assets/her-talk.jpg HTTP/1.1" 200 OK +INFO: 192.168.200.13:48656 - "GET /assets/her-room.jpg HTTP/1.1" 200 OK +INFO: 192.168.200.13:48656 - "GET /api/health HTTP/1.1" 200 OK +INFO: 192.168.200.13:48642 - "GET /favicon.ico HTTP/1.1" 404 Not Found +INFO: 192.168.200.13:48642 - "GET /api/companion HTTP/1.1" 200 OK +INFO: 192.168.200.13:48642 - "GET /api/messages?limit=200 HTTP/1.1" 200 OK +INFO: 192.168.200.13:48642 - "GET /assets/icons.svg HTTP/1.1" 200 OK +INFO: 192.168.200.13:35342 - "GET / HTTP/1.1" 200 OK +INFO: 192.168.200.13:35342 - "GET /api/health HTTP/1.1" 200 OK +INFO: 192.168.200.13:35342 - "GET /api/companion HTTP/1.1" 200 OK +INFO: 192.168.200.13:35342 - "GET /api/messages?limit=200 HTTP/1.1" 200 OK +INFO: 192.168.200.13:35342 - "GET /api/companion HTTP/1.1" 200 OK +INFO: 192.168.200.13:35342 - "GET /api/voice/status HTTP/1.1" 200 OK +INFO: 192.168.200.13:35342 - "GET /api/voice/status HTTP/1.1" 200 OK +INFO: 192.168.200.13:35342 - "GET /api/voice/status HTTP/1.1" 200 OK +INFO: 192.168.200.13:35342 - "GET /vendor/livekit-client-2.22.4.umd.min.js HTTP/1.1" 200 OK +INFO: 192.168.200.13:35342 - "POST /api/voice/session HTTP/1.1" 201 Created +INFO: 192.168.200.13:35342 - "GET /api/voice/voices HTTP/1.1" 503 Service Unavailable +INFO: 127.0.0.1:52114 - "GET /api/health HTTP/1.1" 200 OK +INFO: 127.0.0.1:52114 - "POST /api/chat HTTP/1.1" 200 OK +INFO: 192.168.200.13:54432 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +INFO: 192.168.200.13:51758 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +INFO: 192.168.200.13:51758 - "GET /api/health HTTP/1.1" 200 OK +INFO: 192.168.200.13:51758 - "POST /api/chat HTTP/1.1" 200 OK +INFO: 192.168.200.13:51758 - "POST /api/chat/received HTTP/1.1" 200 OK +memory compression failed: memory_id=2 +INFO: 192.168.200.13:48068 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +INFO: 192.168.200.13:56264 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +memory compression failed: memory_id=2 +INFO: 192.168.200.13:52390 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +INFO: 192.168.200.13:52390 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +INFO: 127.0.0.1:34364 - "GET /api/health HTTP/1.1" 200 OK +INFO: 127.0.0.1:34364 - "POST /api/chat HTTP/1.1" 200 OK +INFO: 127.0.0.1:40776 - "GET /api/health HTTP/1.1" 200 OK +INFO: 127.0.0.1:40776 - "POST /api/chat/received HTTP/1.1" 200 OK +INFO: 192.168.200.13:34404 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +memory compression failed: memory_id=2 +INFO: 192.168.200.13:34404 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +INFO: 192.168.200.13:55626 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +memory compression failed: memory_id=1 +INFO: 127.0.0.1:48340 - "GET /api/health HTTP/1.1" 200 OK +INFO: 127.0.0.1:48340 - "POST /api/chat HTTP/1.1" 200 OK +INFO: 192.168.200.13:58740 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +INFO: 192.168.200.13:58740 - "GET /api/health HTTP/1.1" 200 OK +INFO: 192.168.200.13:58740 - "POST /api/chat HTTP/1.1" 200 OK +INFO: 192.168.200.13:58740 - "POST /api/chat/received HTTP/1.1" 200 OK +INFO: 192.168.200.13:58740 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +memory compression failed: memory_id=1 +INFO: 192.168.200.13:37600 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +INFO: 192.168.200.13:60942 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +memory compression failed: memory_id=1 +INFO: 192.168.200.13:51596 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +memory compression failed: memory_id=4 +INFO: 192.168.200.13:51382 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +INFO: 192.168.200.13:47722 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +memory compression failed: memory_id=4 +INFO: 127.0.0.1:58234 - "GET /api/health HTTP/1.1" 200 OK +INFO: 127.0.0.1:58234 - "POST /api/chat HTTP/1.1" 200 OK +INFO: 192.168.200.13:57716 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +INFO: 192.168.200.13:35614 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +INFO: 127.0.0.1:37294 - "GET /api/health HTTP/1.1" 200 OK +INFO: 127.0.0.1:37294 - "POST /api/chat/received HTTP/1.1" 200 OK +INFO: 192.168.200.13:35644 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +INFO: 192.168.200.13:35644 - "DELETE /api/voice/session/EkSPC7iZhHiqZmoCoZanDIPp HTTP/1.1" 200 OK +INFO: 192.168.200.13:35664 - "GET /assets/icons.svg HTTP/1.1" 304 Not Modified +INFO: 192.168.200.13:35664 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +memory compression failed: memory_id=4 +INFO: 192.168.200.13:33818 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +INFO: 192.168.200.13:49544 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +memory compression failed: memory_id=3 +INFO: 192.168.200.13:40860 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +memory compression failed: memory_id=3 +INFO: 192.168.200.13:52124 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +INFO: 192.168.200.13:35732 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +memory compression failed: memory_id=3 +INFO: 192.168.200.13:46040 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +memory compression failed: memory_id=6 +INFO: 192.168.200.13:50306 - "GET /api/messages?limit=50 HTTP/1.1" 200 OK +memory compression failed: memory_id=6 +memory compression failed: memory_id=6 +memory compression failed: memory_id=5 +memory compression failed: memory_id=5 +memory compression failed: memory_id=5 +memory compression failed: memory_id=8 +memory compression failed: memory_id=8 +memory compression failed: memory_id=8 +memory compression failed: memory_id=7 +memory compression failed: memory_id=7 +INFO: 127.0.0.1:50124 - "POST /api/voice/session HTTP/1.1" 201 Created +memory compression failed: memory_id=7 +memory compression failed: memory_id=10 +memory compression failed: memory_id=10 +memory compression failed: memory_id=10 +memory compression failed: memory_id=9 +INFO: 127.0.0.1:39284 - "POST /api/voice/session HTTP/1.1" 201 Created +memory compression failed: memory_id=9 +INFO: 127.0.0.1:40248 - "GET /api/health HTTP/1.1" 200 OK +INFO: 127.0.0.1:40248 - "POST /api/chat HTTP/1.1" 200 OK +INFO: 127.0.0.1:40248 - "GET /api/health HTTP/1.1" 200 OK +INFO: 127.0.0.1:40248 - "POST /api/chat/received HTTP/1.1" 200 OK +INFO: 127.0.0.1:40248 - "GET /api/health HTTP/1.1" 200 OK +INFO: 127.0.0.1:40248 - "POST /api/chat HTTP/1.1" 200 OK +INFO: 127.0.0.1:40248 - "GET /api/health HTTP/1.1" 200 OK +INFO: 127.0.0.1:40248 - "POST /api/chat HTTP/1.1" 200 OK +INFO: 127.0.0.1:40248 - "GET /api/health HTTP/1.1" 200 OK +INFO: 127.0.0.1:40248 - "POST /api/chat/received HTTP/1.1" 200 OK +memory compression failed: memory_id=9 +INFO: 127.0.0.1:53290 - "GET /api/health HTTP/1.1" 200 OK +INFO: 127.0.0.1:53294 - "GET /api/health HTTP/1.1" 200 OK +INFO: 127.0.0.1:53294 - "POST /api/chat HTTP/1.1" 200 OK +INFO: 127.0.0.1:53290 - "POST /api/chat HTTP/1.1" 200 OK +memory compression failed: memory_id=12 +INFO: 127.0.0.1:60666 - "DELETE /api/voice/session/Br4leZ_1VqtwH_E4TIM9n8o5 HTTP/1.1" 200 OK +memory compression failed: memory_id=12 +memory compression failed: memory_id=12 +memory compression failed: memory_id=11 +memory compression failed: memory_id=11 +INFO: Shutting down +INFO: Finished server process [116699] +INFO: Shutting down +INFO: Finished server process [116699] diff --git a/docs/rework/hel910/window/asr-usage.jsonl b/docs/rework/hel910/window/asr-usage.jsonl new file mode 100644 index 0000000..154c51a --- /dev/null +++ b/docs/rework/hel910/window/asr-usage.jsonl @@ -0,0 +1,81 @@ +{"kind":"call_start","call":"cg-voice-9r5jjmcz0n","stream_seq":1,"window":"hel910-20261029-a","t":1793274792.96} +{"kind":"call_end","call":"cg-voice-9r5jjmcz0n","reason":"error","audio_seconds":0.0,"confirmed_audio_seconds":0.0,"connect_attempts":0,"connect_failures":0,"connect_retries":0,"window":"hel910-20261029-a","t":1793274804.372} +{"kind":"call_start","call":"cg-voice-fdk5izk2uz","stream_seq":1,"window":"hel910-20261029-a","t":1793275102.514} +{"kind":"connect_attempt","call":"cg-voice-fdk5izk2uz","seq":1,"ok":true,"retry":false,"error":"","window":"hel910-20261029-a","t":1793275102.631} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023499,"confirmed_seconds":4.990686,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275107.561} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.056373,"confirmed_seconds":5.023499,"frames":101,"bytes":161804,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275112.611} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.056311,"confirmed_seconds":5.056311,"frames":101,"bytes":161802,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275117.66} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.056311,"confirmed_seconds":5.056373,"frames":101,"bytes":161802,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275122.711} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023499,"confirmed_seconds":5.056311,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275127.761} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023498,"confirmed_seconds":4.990686,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275132.761} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023499,"confirmed_seconds":5.056311,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275137.812} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023498,"confirmed_seconds":4.990686,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275142.811} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.056373,"confirmed_seconds":5.056311,"frames":101,"bytes":161804,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275147.861} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023499,"confirmed_seconds":5.056311,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275152.911} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023498,"confirmed_seconds":4.990686,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275157.911} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023499,"confirmed_seconds":5.056311,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275162.96} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023498,"confirmed_seconds":4.990686,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275167.961} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.056311,"confirmed_seconds":5.056311,"frames":101,"bytes":161802,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275173.011} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023499,"confirmed_seconds":5.056373,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275178.061} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023498,"confirmed_seconds":4.990624,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275183.061} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023499,"confirmed_seconds":5.056373,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275188.111} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023498,"confirmed_seconds":4.990624,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275193.111} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.056311,"confirmed_seconds":5.056373,"frames":101,"bytes":161802,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275198.161} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023499,"confirmed_seconds":5.056311,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275203.211} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023498,"confirmed_seconds":4.990686,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275208.211} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023499,"confirmed_seconds":5.056311,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275213.261} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023498,"confirmed_seconds":4.990686,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275218.262} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.056373,"confirmed_seconds":5.056311,"frames":101,"bytes":161804,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275223.312} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023499,"confirmed_seconds":5.056311,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275228.36} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023498,"confirmed_seconds":4.990686,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275233.362} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023499,"confirmed_seconds":5.056311,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275238.411} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023498,"confirmed_seconds":4.990686,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275243.411} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.056311,"confirmed_seconds":5.056311,"frames":101,"bytes":161802,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275248.461} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023499,"confirmed_seconds":5.056373,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275253.511} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023498,"confirmed_seconds":4.990624,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275258.512} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023499,"confirmed_seconds":5.056373,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275263.561} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023498,"confirmed_seconds":4.990624,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275268.561} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.056311,"confirmed_seconds":5.056373,"frames":101,"bytes":161802,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275273.611} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023499,"confirmed_seconds":5.056311,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275278.661} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023498,"confirmed_seconds":4.990686,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275283.661} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023499,"confirmed_seconds":5.056311,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275288.711} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023498,"confirmed_seconds":4.990686,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275293.711} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.056373,"confirmed_seconds":5.056311,"frames":101,"bytes":161804,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275298.761} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023499,"confirmed_seconds":5.056311,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275303.811} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023498,"confirmed_seconds":4.990686,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275308.811} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023499,"confirmed_seconds":5.056311,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275313.861} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023498,"confirmed_seconds":4.990686,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275318.861} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023499,"confirmed_seconds":5.056311,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275323.911} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023498,"confirmed_seconds":4.990686,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275328.911} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.056311,"confirmed_seconds":5.056311,"frames":101,"bytes":161802,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275333.961} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023499,"confirmed_seconds":5.056373,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275339.011} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023498,"confirmed_seconds":4.990624,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275344.011} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023499,"confirmed_seconds":5.056373,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275349.062} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023498,"confirmed_seconds":4.990624,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275354.061} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.056311,"confirmed_seconds":5.056373,"frames":101,"bytes":161802,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275359.11} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":5.023499,"confirmed_seconds":5.056311,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275364.161} +{"kind":"audio","call":"cg-voice-fdk5izk2uz","seconds":2.626688,"confirmed_seconds":2.659501,"frames":13,"bytes":84054,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275366.316} +{"kind":"call_end","call":"cg-voice-fdk5izk2uz","reason":"error","audio_seconds":264.242609,"confirmed_audio_seconds":264.242609,"connect_attempts":1,"connect_failures":0,"connect_retries":0,"window":"hel910-20261029-a","t":1793275366.316} +{"kind":"call_start","call":"cg-voice-jq8q4zm9h0","stream_seq":1,"window":"hel910-20261029-a","t":1793275813.498} +{"kind":"call_start","call":"cg-voice-dlas9zmiox","stream_seq":1,"window":"hel910-20261029-a","t":1793275957.196} +{"kind":"connect_attempt","call":"cg-voice-dlas9zmiox","seq":1,"ok":true,"retry":false,"error":"","window":"hel910-20261029-a","t":1793275957.28} +{"kind":"audio","call":"cg-voice-dlas9zmiox","seconds":5.023499,"confirmed_seconds":4.990686,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275962.248} +{"kind":"audio","call":"cg-voice-dlas9zmiox","seconds":5.056373,"confirmed_seconds":5.023499,"frames":101,"bytes":161804,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275967.298} +{"kind":"audio","call":"cg-voice-dlas9zmiox","seconds":5.056311,"confirmed_seconds":5.056311,"frames":101,"bytes":161802,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275972.348} +{"kind":"audio","call":"cg-voice-dlas9zmiox","seconds":5.056311,"confirmed_seconds":5.056373,"frames":101,"bytes":161802,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275977.398} +{"kind":"audio","call":"cg-voice-dlas9zmiox","seconds":5.023499,"confirmed_seconds":5.056311,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275982.448} +{"kind":"audio","call":"cg-voice-dlas9zmiox","seconds":5.023498,"confirmed_seconds":4.990686,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275987.449} +{"kind":"audio","call":"cg-voice-dlas9zmiox","seconds":5.023499,"confirmed_seconds":5.056311,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275992.499} +{"kind":"audio","call":"cg-voice-dlas9zmiox","seconds":5.023498,"confirmed_seconds":4.990686,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793275997.499} +{"kind":"audio","call":"cg-voice-dlas9zmiox","seconds":5.056373,"confirmed_seconds":5.056311,"frames":101,"bytes":161804,"sample_rate":16000,"window":"hel910-20261029-a","t":1793276002.548} +{"kind":"audio","call":"cg-voice-dlas9zmiox","seconds":5.023499,"confirmed_seconds":5.056311,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793276007.599} +{"kind":"audio","call":"cg-voice-dlas9zmiox","seconds":5.023498,"confirmed_seconds":4.990686,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793276012.598} +{"kind":"audio","call":"cg-voice-dlas9zmiox","seconds":5.023499,"confirmed_seconds":5.056311,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793276017.648} +{"kind":"audio","call":"cg-voice-dlas9zmiox","seconds":5.023498,"confirmed_seconds":4.990686,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793276022.651} +{"kind":"audio","call":"cg-voice-dlas9zmiox","seconds":5.056311,"confirmed_seconds":5.056311,"frames":101,"bytes":161802,"sample_rate":16000,"window":"hel910-20261029-a","t":1793276027.698} +{"kind":"audio","call":"cg-voice-dlas9zmiox","seconds":5.023499,"confirmed_seconds":5.056373,"frames":101,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793276032.748} +{"kind":"audio","call":"cg-voice-dlas9zmiox","seconds":5.023498,"confirmed_seconds":4.990624,"frames":100,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793276037.75} +{"kind":"audio","call":"cg-voice-dlas9zmiox","seconds":5.023499,"confirmed_seconds":4.892186,"frames":83,"bytes":160752,"sample_rate":16000,"window":"hel910-20261029-a","t":1793276041.653} +{"kind":"audio","call":"cg-voice-dlas9zmiox","seconds":0.820813,"confirmed_seconds":1.017813,"frames":4,"bytes":26266,"sample_rate":16000,"window":"hel910-20261029-a","t":1793276043.643} +{"kind":"call_end","call":"cg-voice-dlas9zmiox","reason":"error","audio_seconds":86.384475,"confirmed_audio_seconds":86.384475,"connect_attempts":1,"connect_failures":0,"connect_retries":0,"window":"hel910-20261029-a","t":1793276043.643} +{"kind":"call_end","call":"cg-voice-jq8q4zm9h0","reason":"error","audio_seconds":0.0,"confirmed_audio_seconds":0.0,"connect_attempts":0,"connect_failures":0,"connect_retries":0,"window":"hel910-20261029-a","t":1793276114.155} diff --git a/docs/rework/hel910/window/bridge.log b/docs/rework/hel910/window/bridge.log new file mode 100644 index 0000000..f2a0bea --- /dev/null +++ b/docs/rework/hel910/window/bridge.log @@ -0,0 +1 @@ +wss-bridge(PROPOSAL) tls ('0.0.0.0', 8363) -> 127.0.0.1:7880 diff --git a/docs/rework/hel910/window/call2.agent.wav b/docs/rework/hel910/window/call2.agent.wav new file mode 100644 index 0000000..484342f Binary files /dev/null and b/docs/rework/hel910/window/call2.agent.wav differ diff --git a/docs/rework/hel910/window/call2.frames.json b/docs/rework/hel910/window/call2.frames.json new file mode 100644 index 0000000..e673a81 --- /dev/null +++ b/docs/rework/hel910/window/call2.frames.json @@ -0,0 +1 @@ +{"first_pub_ms": 1793275956987, "frames": [[1793275957297, 960], [1793275957307, 960], [1793275957317, 960], [1793275957327, 960], [1793275957337, 960], [1793275957347, 960], [1793275957357, 960], [1793275957367, 960], [1793275957378, 960], [1793275957387, 960], [1793275957397, 960], [1793275957407, 960], [1793275957417, 960], [1793275957428, 960], [1793275957437, 960], [1793275957447, 960], [1793275957457, 960], [1793275957467, 960], [1793275957478, 960], [1793275957487, 960], [1793275957497, 960], [1793275957507, 960], [1793275957517, 960], [1793275957528, 960], [1793275957537, 960], [1793275957547, 960], [1793275957557, 960], [1793275957567, 960], [1793275957577, 960], [1793275957587, 960], [1793275957597, 960], [1793275957607, 960], [1793275957617, 960], [1793275957627, 960], [1793275957637, 960], [1793275957647, 960], [1793275957657, 960], [1793275957667, 960], [1793275957677, 960], [1793275957687, 960], [1793275957697, 960], [1793275957707, 960], [1793275957717, 960], [1793275957727, 960], [1793275957737, 960], [1793275957747, 960], [1793275957757, 960], [1793275957767, 960], [1793275957777, 960], [1793275957787, 960], [1793275957798, 960], [1793275957807, 960], [1793275957818, 960], [1793275957827, 960], [1793275957837, 960], [1793275957847, 960], [1793275957857, 960], [1793275957867, 960], [1793275957877, 960], [1793275957887, 960], [1793275957897, 960], [1793275957907, 960], [1793275957917, 960], [1793275957927, 960], [1793275957937, 960], [1793275957947, 960], [1793275957957, 960], [1793275957967, 960], [1793275957977, 960], [1793275957987, 960], [1793275957997, 960], [1793275958007, 960], [1793275958017, 960], [1793275958027, 960], [1793275958037, 960], [1793275958047, 960], [1793275958059, 960], [1793275958067, 960], [1793275958077, 960], [1793275958087, 960], [1793275958097, 960], [1793275958107, 960], [1793275958117, 960], [1793275958127, 960], [1793275958137, 960], [1793275958147, 960], [1793275958157, 960], [1793275958167, 960], [1793275958177, 960], [1793275958187, 960], [1793275958197, 960], [1793275958207, 960], [1793275958217, 960], [1793275958227, 960], [1793275958237, 960], [1793275958247, 960], [1793275958257, 960], [1793275958267, 960], [1793275958277, 960], [1793275958287, 960], [1793275958297, 960], [1793275958307, 960], [1793275958317, 960], [1793275958327, 960], [1793275958337, 960], [1793275958348, 960], [1793275958357, 960], [1793275958367, 960], [1793275958377, 960], [1793275958387, 960], [1793275958397, 960], [1793275958407, 960], [1793275958417, 960], [1793275958427, 960], [1793275958437, 960], [1793275958447, 960], [1793275958457, 960], [1793275958467, 960], [1793275958477, 960], [1793275958487, 960], [1793275958497, 960], [1793275958507, 960], [1793275958517, 960], [1793275958527, 960], [1793275958537, 960], [1793275958547, 960], [1793275958557, 960], [1793275958567, 960], [1793275958577, 960], [1793275958587, 960], [1793275958599, 960], [1793275958607, 960], [1793275958617, 960], [1793275958627, 960], [1793275958637, 960], [1793275958647, 960], [1793275958657, 960], [1793275958667, 960], [1793275958677, 960], [1793275958687, 960], [1793275958697, 960], [1793275958707, 960], [1793275958717, 960], [1793275958727, 960], [1793275958737, 960], [1793275958747, 960], [1793275958757, 960], [1793275958767, 960], [1793275958777, 960], [1793275958787, 960], [1793275958797, 960], [1793275958807, 960], [1793275958817, 960], [1793275958827, 960], [1793275958837, 960], [1793275958847, 960], [1793275958857, 960], [1793275958867, 960], [1793275958877, 960], [1793275958887, 960], [1793275958897, 960], [1793275958907, 960], [1793275958917, 960], [1793275958928, 960], [1793275958937, 960], [1793275958947, 960], [1793275958957, 960], [1793275958967, 960], [1793275958977, 960], [1793275958987, 960], [1793275958997, 960], [1793275959007, 960], [1793275959017, 960], [1793275959027, 960], [1793275959037, 960], [1793275959047, 960], [1793275959057, 960], [1793275959067, 960], [1793275959077, 960], [1793275959087, 960], [1793275959097, 960], [1793275959107, 960], [1793275959117, 960], [1793275959127, 960], [1793275959137, 960], [1793275959147, 960], [1793275959157, 960], [1793275959167, 960], [1793275959177, 960], [1793275959187, 960], [1793275959197, 960], [1793275959207, 960], [1793275959217, 960], [1793275959227, 960], [1793275959237, 960], [1793275959247, 960], [1793275959257, 960], [1793275959268, 960], [1793275959277, 960], [1793275959287, 960], [1793275959297, 960], [1793275959307, 960], [1793275959318, 960], [1793275959327, 960], [1793275959337, 960], [1793275959347, 960], [1793275959357, 960], [1793275959367, 960], [1793275959377, 960], [1793275959387, 960], [1793275959397, 960], [1793275959407, 960], [1793275959418, 960], [1793275959427, 960], [1793275959437, 960], [1793275959447, 960], [1793275959457, 960], [1793275959467, 960], [1793275959477, 960], [1793275959487, 960], [1793275959497, 960], [1793275959508, 960], [1793275959517, 960], [1793275959527, 960], [1793275959537, 960], [1793275959547, 960], [1793275959557, 960], [1793275959567, 960], [1793275959577, 960], [1793275959587, 960], [1793275959597, 960], [1793275959607, 960], [1793275959617, 960], [1793275959627, 960], [1793275959637, 960], [1793275959647, 960], [1793275959657, 960], [1793275959667, 960], [1793275959677, 960], [1793275959687, 960], [1793275959697, 960], [1793275959707, 960], [1793275959717, 960], [1793275959727, 960], [1793275959737, 960], [1793275959747, 960], [1793275959757, 960], [1793275959767, 960], [1793275959777, 960], [1793275959787, 960], [1793275959797, 960], [1793275959807, 960], [1793275959817, 960], [1793275959827, 960], [1793275959837, 960], [1793275959847, 960], [1793275959857, 960], [1793275959867, 960], [1793275959877, 960], [1793275959887, 960], [1793275959897, 960], [1793275959907, 960], [1793275959917, 960], [1793275959927, 960], [1793275959937, 960], [1793275959947, 960], [1793275959957, 960], [1793275959967, 960], [1793275959977, 960], [1793275959987, 960], [1793275959997, 960], [1793275960007, 960], [1793275960017, 960], [1793275960027, 960], [1793275960037, 960], [1793275960047, 960], [1793275960057, 960], [1793275960067, 960], [1793275960077, 960], [1793275960087, 960], [1793275960097, 960], [1793275960107, 960], [1793275960117, 960], [1793275960127, 960], [1793275960137, 960], [1793275960147, 960], [1793275960157, 960], [1793275960167, 960], [1793275960177, 960], [1793275960187, 960], [1793275960197, 960], [1793275960207, 960], [1793275960217, 960], [1793275960227, 960], [1793275960237, 960], [1793275960247, 960], [1793275960257, 960], [1793275960267, 960], [1793275960277, 960], [1793275960287, 960], [1793275960297, 960], [1793275960307, 960], [1793275960317, 960], [1793275960327, 960], [1793275960337, 960], [1793275960347, 960], [1793275960357, 960], [1793275960367, 960], [1793275960377, 960], [1793275960387, 960], [1793275960397, 960], [1793275960407, 960], [1793275960417, 960], [1793275960427, 960], [1793275960437, 960], [1793275960447, 960], [1793275960457, 960], [1793275960467, 960], [1793275960477, 960], [1793275960487, 960], [1793275960497, 960], [1793275960507, 960], [1793275960517, 960], [1793275960527, 960], [1793275960537, 960], [1793275960547, 960], [1793275960557, 960], [1793275960567, 960], [1793275960577, 960], [1793275960587, 960], [1793275960597, 960], [1793275960607, 960], [1793275960617, 960], [1793275960627, 960], [1793275960637, 960], [1793275960647, 960], [1793275960657, 960], [1793275960667, 960], [1793275960677, 960], [1793275960687, 960], [1793275960697, 960], [1793275960707, 960], [1793275960717, 960], [1793275960727, 960], [1793275960737, 960], [1793275960747, 960], [1793275960757, 960], [1793275960767, 960], [1793275960777, 960], [1793275960787, 960], [1793275960797, 960], [1793275960807, 960], [1793275960817, 960], [1793275960827, 960], [1793275960837, 960], [1793275960847, 960], [1793275960857, 960], [1793275960867, 960], [1793275960877, 960], [1793275960887, 960], [1793275960897, 960], [1793275960907, 960], [1793275960917, 960], [1793275960927, 960], [1793275960937, 960], [1793275960947, 960], [1793275960957, 960], [1793275960967, 960], [1793275960977, 960], [1793275960987, 960], [1793275960997, 960], [1793275961007, 960], [1793275961017, 960], [1793275961027, 960], [1793275961037, 960], [1793275961047, 960], [1793275961057, 960], [1793275961067, 960], [1793275961077, 960], [1793275961087, 960], [1793275961097, 960], [1793275961107, 960], [1793275961117, 960], [1793275961127, 960], [1793275961137, 960], [1793275961148, 960], [1793275961157, 960], [1793275961167, 960], [1793275961177, 960], [1793275961187, 960], [1793275961197, 960], [1793275961207, 960], [1793275961217, 960], [1793275961227, 960], [1793275961237, 960], [1793275961247, 960], [1793275961257, 960], [1793275961267, 960], [1793275961277, 960], [1793275961287, 960], [1793275961297, 960], [1793275961307, 960], [1793275961317, 960], [1793275961327, 960], [1793275961337, 960], [1793275961347, 960], [1793275961357, 960], [1793275961367, 960], [1793275961377, 960], [1793275961388, 960], [1793275961397, 960], [1793275961407, 960], [1793275961417, 960], [1793275961427, 960], [1793275961437, 960], [1793275961447, 960], [1793275961457, 960], [1793275961467, 960], [1793275961477, 960], [1793275961487, 960], [1793275961497, 960], [1793275961507, 960], [1793275961517, 960], [1793275961527, 960], [1793275961537, 960], [1793275961547, 960], [1793275961557, 960], [1793275961567, 960], [1793275961577, 960], [1793275961587, 960], [1793275961598, 960], [1793275961607, 960], [1793275961617, 960], [1793275961628, 960], [1793275961637, 960], [1793275961648, 960], [1793275961657, 960], [1793275961667, 960], [1793275961677, 960], [1793275961687, 960], [1793275961697, 960], [1793275961707, 960], [1793275961717, 960], [1793275961727, 960], [1793275961737, 960], [1793275961747, 960], [1793275961757, 960], [1793275961767, 960], [1793275961777, 960], [1793275961787, 960], [1793275961797, 960], [1793275961807, 960], [1793275961817, 960], [1793275961827, 960], [1793275961837, 960], [1793275961847, 960], [1793275961857, 960], [1793275961867, 960], [1793275961877, 960], [1793275961887, 960], [1793275961897, 960], [1793275961907, 960], [1793275961917, 960], [1793275961927, 960], [1793275961938, 960], [1793275961947, 960], [1793275961957, 960], [1793275961967, 960], [1793275961977, 960], [1793275961987, 960], [1793275961997, 960], [1793275962007, 960], [1793275962017, 960], [1793275962027, 960], [1793275962037, 960], [1793275962047, 960], [1793275962057, 960], [1793275962067, 960], [1793275962077, 960], [1793275962087, 960], [1793275962097, 960], [1793275962107, 960], [1793275962117, 960], [1793275962127, 960], [1793275962137, 960], [1793275962147, 960], [1793275962157, 960], [1793275962167, 960], [1793275962177, 960], [1793275962187, 960], [1793275962197, 960], [1793275962207, 960], [1793275962217, 960], [1793275962227, 960], [1793275962237, 960], [1793275962247, 960], [1793275962257, 960], [1793275962267, 960], [1793275962277, 960], [1793275962287, 960], [1793275962297, 960], [1793275962307, 960], [1793275962317, 960], [1793275962327, 960], [1793275962337, 960], [1793275962347, 960], [1793275962357, 960], [1793275962367, 960], [1793275962377, 960], [1793275962387, 960], [1793275962397, 960], [1793275962407, 960], [1793275962417, 960], [1793275962427, 960], [1793275962437, 960], [1793275962447, 960], [1793275962457, 960], [1793275962467, 960], [1793275962477, 960], [1793275962487, 960], [1793275962497, 960], [1793275962507, 960], [1793275962517, 960], [1793275962527, 960], [1793275962537, 960], [1793275962548, 960], [1793275962557, 960], [1793275962567, 960], [1793275962577, 960], [1793275962587, 960], [1793275962597, 960], [1793275962607, 960], [1793275962617, 960], [1793275962627, 960], [1793275962637, 960], [1793275962647, 960], [1793275962657, 960], [1793275962667, 960], [1793275962677, 960], [1793275962687, 960], [1793275962697, 960], [1793275962707, 960], [1793275962717, 960], [1793275962727, 960], [1793275962737, 960], [1793275962747, 960], [1793275962757, 960], [1793275962767, 960], [1793275962777, 960], [1793275962787, 960], [1793275962797, 960], [1793275962807, 960], [1793275962817, 960], [1793275962827, 960], [1793275962837, 960], [1793275962847, 960], [1793275962857, 960], [1793275962867, 960], [1793275962877, 960], [1793275962887, 960], [1793275962897, 960], [1793275962907, 960], [1793275962917, 960], [1793275962927, 960], [1793275962937, 960], [1793275962947, 960], [1793275962957, 960], [1793275962967, 960], [1793275962977, 960], [1793275962987, 960], [1793275962997, 960], [1793275963007, 960], [1793275963017, 960], [1793275963027, 960], [1793275963037, 960], [1793275963047, 960], [1793275963057, 960], [1793275963067, 960], [1793275963077, 960], [1793275963087, 960], [1793275963097, 960], [1793275963107, 960], [1793275963117, 960], [1793275963127, 960], [1793275963137, 960], [1793275963147, 960], [1793275963157, 960], [1793275963167, 960], [1793275963177, 960], [1793275963187, 960], [1793275963197, 960], [1793275963207, 960], [1793275963217, 960], [1793275963227, 960], [1793275963237, 960], [1793275963247, 960], [1793275963257, 960], [1793275963267, 960], [1793275963277, 960], [1793275963287, 960], [1793275963297, 960], [1793275963307, 960], [1793275963317, 960], [1793275963327, 960], [1793275963337, 960], [1793275963347, 960], [1793275963357, 960], [1793275963368, 960], [1793275963377, 960], [1793275963387, 960], [1793275963397, 960], [1793275963407, 960], [1793275963417, 960], [1793275963427, 960], [1793275963437, 960], [1793275963447, 960], [1793275963457, 960], [1793275963467, 960], [1793275963477, 960], [1793275963487, 960], [1793275963497, 960], [1793275963507, 960], [1793275963517, 960], [1793275963527, 960], [1793275963537, 960], [1793275963547, 960], [1793275963557, 960], [1793275963567, 960], [1793275963577, 960], [1793275963587, 960], [1793275963597, 960], [1793275963608, 960], [1793275963617, 960], [1793275963627, 960], [1793275963637, 960], [1793275963647, 960], [1793275963657, 960], [1793275963667, 960], [1793275963677, 960], [1793275963687, 960], [1793275963697, 960], [1793275963707, 960], [1793275963717, 960], [1793275963727, 960], [1793275963737, 960], [1793275963747, 960], [1793275963757, 960], [1793275963767, 960], [1793275963777, 960], [1793275963787, 960], [1793275963797, 960], [1793275963807, 960], [1793275963817, 960], [1793275963827, 960], [1793275963837, 960], [1793275963847, 960], [1793275963857, 960], [1793275963867, 960], [1793275963877, 960], [1793275963887, 960], [1793275963897, 960], [1793275963907, 960], [1793275963917, 960], [1793275963927, 960], [1793275963937, 960], [1793275963948, 960], [1793275963957, 960], [1793275963967, 960], [1793275963977, 960], [1793275963987, 960], [1793275963997, 960], [1793275964007, 960], [1793275964017, 960], [1793275964027, 960], [1793275964037, 960], [1793275964047, 960], [1793275964057, 960], [1793275964067, 960], [1793275964077, 960], [1793275964087, 960], [1793275964097, 960], [1793275964107, 960], [1793275964117, 960], [1793275964127, 960], [1793275964137, 960], [1793275964147, 960], [1793275964157, 960], [1793275964167, 960], [1793275964177, 960], [1793275964187, 960], [1793275964197, 960], [1793275964207, 960], [1793275964217, 960], [1793275964227, 960], [1793275964237, 960], [1793275964247, 960], [1793275964257, 960], [1793275964267, 960], [1793275964277, 960], [1793275964287, 960], [1793275964297, 960], [1793275964307, 960], [1793275964317, 960], [1793275964327, 960], [1793275964337, 960], [1793275964347, 960], [1793275964357, 960], [1793275964367, 960], [1793275964377, 960], [1793275964387, 960], [1793275964397, 960], [1793275964407, 960], [1793275964419, 960], [1793275964427, 960], [1793275964437, 960], [1793275964447, 960], [1793275964457, 960], [1793275964467, 960], [1793275964477, 960], [1793275964487, 960], [1793275964497, 960], [1793275964507, 960], [1793275964517, 960], [1793275964527, 960], [1793275964537, 960], [1793275964547, 960], [1793275964557, 960], [1793275964567, 960], [1793275964577, 960], [1793275964587, 960], [1793275964597, 960], [1793275964607, 960], [1793275964617, 960], [1793275964627, 960], [1793275964637, 960], [1793275964647, 960], [1793275964657, 960], [1793275964668, 960], [1793275964677, 960], [1793275964687, 960], [1793275964697, 960], [1793275964707, 960], [1793275964717, 960], [1793275964727, 960], [1793275964737, 960], [1793275964747, 960], [1793275964757, 960], [1793275964767, 960], [1793275964777, 960], [1793275964787, 960], [1793275964797, 960], [1793275964807, 960], [1793275964817, 960], [1793275964827, 960], [1793275964837, 960], [1793275964847, 960], [1793275964857, 960], [1793275964867, 960], [1793275964877, 960], [1793275964887, 960], [1793275964897, 960], [1793275964907, 960], [1793275964917, 960], [1793275964927, 960], [1793275964937, 960], [1793275964947, 960], [1793275964957, 960], [1793275964967, 960], [1793275964977, 960], [1793275964987, 960], [1793275964998, 960], [1793275965008, 960], [1793275965017, 960], [1793275965027, 960], [1793275965037, 960], [1793275965047, 960], [1793275965057, 960], [1793275965067, 960], [1793275965077, 960], [1793275965087, 960], [1793275965097, 960], [1793275965107, 960], [1793275965117, 960], [1793275965127, 960], [1793275965137, 960], [1793275965148, 960], [1793275965157, 960], [1793275965167, 960], [1793275965177, 960], [1793275965187, 960], [1793275965197, 960], [1793275965207, 960], [1793275965217, 960], [1793275965227, 960], [1793275965237, 960], [1793275965247, 960], [1793275965257, 960], [1793275965267, 960], [1793275965277, 960], [1793275965287, 960], [1793275965297, 960], [1793275965307, 960], [1793275965318, 960], [1793275965327, 960], [1793275965338, 960], [1793275965347, 960], [1793275965357, 960], [1793275965367, 960], [1793275965377, 960], [1793275965387, 960], [1793275965397, 960], [1793275965407, 960], [1793275965417, 960], [1793275965427, 960], [1793275965437, 960], [1793275965447, 960], [1793275965457, 960], [1793275965467, 960], [1793275965477, 960], [1793275965487, 960], [1793275965497, 960], [1793275965507, 960], [1793275965517, 960], [1793275965527, 960], [1793275965537, 960], [1793275965547, 960], [1793275965557, 960], [1793275965567, 960], [1793275965577, 960], [1793275965587, 960], [1793275965597, 960], [1793275965607, 960], [1793275965617, 960], [1793275965627, 960], [1793275965637, 960], [1793275965647, 960], [1793275965657, 960], [1793275965667, 960], [1793275965677, 960], [1793275965687, 960], [1793275965697, 960], [1793275965707, 960], [1793275965717, 960], [1793275965727, 960], [1793275965737, 960], [1793275965747, 960], [1793275965757, 960], [1793275965767, 960], [1793275965777, 960], [1793275965787, 960], [1793275965797, 960], [1793275965807, 960], [1793275965817, 960], [1793275965827, 960], [1793275965837, 960], [1793275965847, 960], [1793275965858, 960], [1793275965867, 960], [1793275965877, 960], [1793275965887, 960], [1793275965897, 960], [1793275965907, 960], [1793275965917, 960], [1793275965928, 960], [1793275965937, 960], [1793275965947, 960], [1793275965957, 960], [1793275965967, 960], [1793275965977, 960], [1793275965987, 960], [1793275965997, 960], [1793275966007, 960], [1793275966017, 960], [1793275966027, 960], [1793275966037, 960], [1793275966047, 960], [1793275966057, 960], [1793275966067, 960], [1793275966077, 960], [1793275966087, 960], [1793275966097, 960], [1793275966107, 960], [1793275966117, 960], [1793275966127, 960], [1793275966137, 960], [1793275966147, 960], [1793275966157, 960], [1793275966167, 960], [1793275966177, 960], [1793275966187, 960], [1793275966197, 960], [1793275966207, 960], [1793275966217, 960], [1793275966227, 960], [1793275966237, 960], [1793275966247, 960], [1793275966257, 960], [1793275966267, 960], [1793275966277, 960], [1793275966287, 960], [1793275966297, 960], [1793275966307, 960], [1793275966317, 960], [1793275966327, 960], [1793275966337, 960], [1793275966347, 960], [1793275966357, 960], [1793275966367, 960], [1793275966377, 960], [1793275966387, 960], [1793275966397, 960], [1793275966407, 960], [1793275966417, 960], [1793275966427, 960], [1793275966437, 960], [1793275966447, 960], [1793275966457, 960], [1793275966467, 960], [1793275966477, 960], [1793275966487, 960], [1793275966497, 960], [1793275966507, 960], [1793275966517, 960], [1793275966527, 960], [1793275966537, 960], [1793275966547, 960], [1793275966557, 960], [1793275966567, 960], [1793275966577, 960], [1793275966587, 960], [1793275966597, 960], [1793275966608, 960], [1793275966617, 960], [1793275966627, 960], [1793275966637, 960], [1793275966647, 960], [1793275966657, 960], [1793275966667, 960], [1793275966677, 960], [1793275966687, 960], [1793275966697, 960], [1793275966707, 960], [1793275966717, 960], [1793275966727, 960], [1793275966737, 960], [1793275966747, 960], [1793275966757, 960], [1793275966767, 960], [1793275966777, 960], [1793275966787, 960], [1793275966797, 960], [1793275966807, 960], [1793275966817, 960], [1793275966827, 960], [1793275966837, 960], [1793275966847, 960], [1793275966857, 960], [1793275966867, 960], [1793275966877, 960], [1793275966887, 960], [1793275966897, 960], [1793275966907, 960], [1793275966917, 960], [1793275966927, 960], [1793275966937, 960], [1793275966947, 960], [1793275966957, 960], [1793275966967, 960], [1793275966977, 960], [1793275966987, 960], [1793275966997, 960], [1793275967007, 960], [1793275967017, 960], [1793275967027, 960], [1793275967037, 960], [1793275967047, 960], [1793275967057, 960], [1793275967067, 960], [1793275967077, 960], [1793275967087, 960], [1793275967098, 960], [1793275967108, 960], [1793275967118, 960], [1793275967127, 960], [1793275967138, 960], [1793275967147, 960], [1793275967158, 960], [1793275967167, 960], [1793275967177, 960], [1793275967187, 960], [1793275967197, 960], [1793275967207, 960], [1793275967217, 960], [1793275967228, 960], [1793275967237, 960], [1793275967247, 960], [1793275967258, 960], [1793275967267, 960], [1793275967277, 960], [1793275967287, 960], [1793275967297, 960], [1793275967307, 960], [1793275967317, 960], [1793275967327, 960], [1793275967338, 960], [1793275967347, 960], [1793275967357, 960], [1793275967367, 960], [1793275967377, 960], [1793275967387, 960], [1793275967397, 960], [1793275967407, 960], [1793275967417, 960], [1793275967427, 960], [1793275967437, 960], [1793275967447, 960], [1793275967457, 960], [1793275967467, 960], [1793275967477, 960], [1793275967487, 960], [1793275967497, 960], [1793275967507, 960], [1793275967517, 960], [1793275967527, 960], [1793275967537, 960], [1793275967548, 960], [1793275967557, 960], [1793275967568, 960], [1793275967577, 960], [1793275967588, 960], [1793275967597, 960], [1793275967608, 960], [1793275967617, 960], [1793275967628, 960], [1793275967638, 960], [1793275967648, 960], [1793275967658, 960], [1793275967667, 960], [1793275967678, 960], [1793275967688, 960], [1793275967698, 960], [1793275967708, 960], [1793275967717, 960], [1793275967727, 960], [1793275967737, 960], [1793275967747, 960], [1793275967757, 960], [1793275967767, 960], [1793275967777, 960], [1793275967787, 960], [1793275967797, 960], [1793275967808, 960], [1793275967817, 960], [1793275967827, 960], [1793275967837, 960], [1793275967847, 960], [1793275967857, 960], [1793275967867, 960], [1793275967877, 960], [1793275967887, 960], [1793275967897, 960], [1793275967907, 960], [1793275967917, 960], [1793275967927, 960], [1793275967937, 960], [1793275967947, 960], [1793275967957, 960], [1793275967967, 960], [1793275967977, 960], [1793275967987, 960], [1793275967997, 960], [1793275968007, 960], [1793275968017, 960], [1793275968027, 960], [1793275968037, 960], [1793275968047, 960], [1793275968057, 960], [1793275968067, 960], [1793275968077, 960], [1793275968087, 960], [1793275968097, 960], [1793275968107, 960], [1793275968117, 960], [1793275968127, 960], [1793275968137, 960], [1793275968147, 960], [1793275968157, 960], [1793275968167, 960], [1793275968177, 960], [1793275968187, 960], [1793275968197, 960], [1793275968207, 960], [1793275968217, 960], [1793275968227, 960], [1793275968237, 960], [1793275968247, 960], [1793275968257, 960], [1793275968267, 960], [1793275968277, 960], [1793275968287, 960], [1793275968297, 960], [1793275968307, 960], [1793275968317, 960], [1793275968327, 960], [1793275968337, 960], [1793275968348, 960], [1793275968357, 960], [1793275968367, 960], [1793275968378, 960], [1793275968387, 960], [1793275968398, 960], [1793275968408, 960], [1793275968417, 960], [1793275968427, 960], [1793275968437, 960], [1793275968447, 960], [1793275968457, 960], [1793275968467, 960], [1793275968477, 960], [1793275968487, 960], [1793275968497, 960], [1793275968507, 960], [1793275968517, 960], [1793275968528, 960], [1793275968538, 960], [1793275968547, 960], [1793275968557, 960], [1793275968567, 960], [1793275968577, 960], [1793275968587, 960], [1793275968597, 960], [1793275968607, 960], [1793275968617, 960], [1793275968627, 960], [1793275968637, 960], [1793275968647, 960], [1793275968657, 960], [1793275968667, 960], [1793275968677, 960], [1793275968687, 960], [1793275968697, 960], [1793275968707, 960], [1793275968717, 960], [1793275968727, 960], [1793275968737, 960], [1793275968747, 960], [1793275968757, 960], [1793275968767, 960], [1793275968777, 960], [1793275968787, 960], [1793275968798, 960], [1793275968807, 960], [1793275968817, 960], [1793275968827, 960], [1793275968837, 960], [1793275968847, 960], [1793275968857, 960], [1793275968867, 960], [1793275968877, 960], [1793275968888, 960], [1793275968898, 960], [1793275968907, 960], [1793275968917, 960], [1793275968927, 960], [1793275968938, 960], [1793275968948, 960], [1793275968957, 960], [1793275968967, 960], [1793275968977, 960], [1793275968987, 960], [1793275968998, 960], [1793275969007, 960], [1793275969017, 960], [1793275969027, 960], [1793275969037, 960], [1793275969047, 960], [1793275969058, 960], [1793275969067, 960], [1793275969077, 960], [1793275969087, 960], [1793275969097, 960], [1793275969107, 960], [1793275969117, 960], [1793275969127, 960], [1793275969137, 960], [1793275969147, 960], [1793275969157, 960], [1793275969167, 960], [1793275969177, 960], [1793275969187, 960], [1793275969197, 960], [1793275969207, 960], [1793275969217, 960], [1793275969227, 960], [1793275969237, 960], [1793275969247, 960], [1793275969257, 960], [1793275969267, 960], [1793275969277, 960], [1793275969287, 960], [1793275969297, 960], [1793275969307, 960], [1793275969317, 960], [1793275969327, 960], [1793275969337, 960], [1793275969347, 960], [1793275969357, 960], [1793275969367, 960], [1793275969377, 960], [1793275969387, 960], [1793275969398, 960], [1793275969408, 960], [1793275969417, 960], [1793275969427, 960], [1793275969437, 960], [1793275969447, 960], [1793275969457, 960], [1793275969467, 960], [1793275969477, 960], [1793275969487, 960], [1793275969497, 960], [1793275969507, 960], [1793275969517, 960], [1793275969527, 960], [1793275969537, 960], [1793275969548, 960], [1793275969557, 960], [1793275969567, 960], [1793275969578, 960], [1793275969587, 960], [1793275969597, 960], [1793275969607, 960], [1793275969618, 960], [1793275969627, 960], [1793275969637, 960], [1793275969648, 960], [1793275969658, 960], [1793275969667, 960], [1793275969677, 960], [1793275969687, 960], [1793275969697, 960], [1793275969708, 960], [1793275969717, 960], [1793275969727, 960], [1793275969737, 960], [1793275969747, 960], [1793275969757, 960], [1793275969767, 960], [1793275969777, 960], [1793275969788, 960], [1793275969798, 960], [1793275969807, 960], [1793275969817, 960], [1793275969827, 960], [1793275969838, 960], [1793275969848, 960], [1793275969857, 960], [1793275969867, 960], [1793275969877, 960], [1793275969887, 960], [1793275969897, 960], [1793275969907, 960], [1793275969917, 960], [1793275969927, 960], [1793275969937, 960], [1793275969947, 960], [1793275969957, 960], [1793275969967, 960], [1793275969977, 960], [1793275969987, 960], [1793275969997, 960], [1793275970007, 960], [1793275970017, 960], [1793275970027, 960], [1793275970037, 960], [1793275970048, 960], [1793275970058, 960], [1793275970068, 960], [1793275970077, 960], [1793275970087, 960], [1793275970097, 960], [1793275970108, 960], [1793275970117, 960], [1793275970127, 960], [1793275970137, 960], [1793275970147, 960], [1793275970158, 960], [1793275970167, 960], [1793275970177, 960], [1793275970187, 960], [1793275970197, 960], [1793275970207, 960], [1793275970217, 960], [1793275970227, 960], [1793275970237, 960], [1793275970247, 960], [1793275970257, 960], [1793275970267, 960], [1793275970277, 960], [1793275970287, 960], [1793275970297, 960], [1793275970307, 960], [1793275970317, 960], [1793275970327, 960], [1793275970337, 960], [1793275970347, 960], [1793275970357, 960], [1793275970367, 960], [1793275970377, 960], [1793275970387, 960], [1793275970397, 960], [1793275970407, 960], [1793275970417, 960], [1793275970427, 960], [1793275970437, 960], [1793275970447, 960], [1793275970457, 960], [1793275970467, 960], [1793275970477, 960], [1793275970487, 960], [1793275970497, 960], [1793275970507, 960], [1793275970517, 960], [1793275970527, 960], [1793275970537, 960], [1793275970548, 960], [1793275970557, 960], [1793275970567, 960], [1793275970577, 960], [1793275970587, 960], [1793275970597, 960], [1793275970607, 960], [1793275970617, 960], [1793275970627, 960], [1793275970637, 960], [1793275970647, 960], [1793275970657, 960], [1793275970667, 960], [1793275970677, 960], [1793275970687, 960], [1793275970697, 960], [1793275970707, 960], [1793275970717, 960], [1793275970727, 960], [1793275970737, 960], [1793275970747, 960], [1793275970757, 960], [1793275970767, 960], [1793275970777, 960], [1793275970787, 960], [1793275970797, 960], [1793275970807, 960], [1793275970817, 960], [1793275970827, 960], [1793275970837, 960], [1793275970847, 960], [1793275970857, 960], [1793275970867, 960], [1793275970877, 960], [1793275970887, 960], [1793275970898, 960], [1793275970908, 960], [1793275970918, 960], [1793275970928, 960], [1793275970939, 960], [1793275970947, 960], [1793275970957, 960], [1793275970967, 960], [1793275970977, 960], [1793275970987, 960], [1793275970997, 960], [1793275971007, 960], [1793275971017, 960], [1793275971027, 960], [1793275971037, 960], [1793275971047, 960], [1793275971057, 960], [1793275971067, 960], [1793275971077, 960], [1793275971087, 960], [1793275971097, 960], [1793275971107, 960], [1793275971117, 960], [1793275971127, 960], [1793275971137, 960], [1793275971147, 960], [1793275971157, 960], [1793275971167, 960], [1793275971177, 960], [1793275971187, 960], [1793275971197, 960], [1793275971208, 960], [1793275971217, 960], [1793275971227, 960], [1793275971237, 960], [1793275971247, 960], [1793275971257, 960], [1793275971267, 960], [1793275971277, 960], [1793275971287, 960], [1793275971297, 960], [1793275971307, 960], [1793275971317, 960], [1793275971327, 960], [1793275971337, 960], [1793275971347, 960], [1793275971357, 960], [1793275971367, 960], [1793275971377, 960], [1793275971387, 960], [1793275971397, 960], [1793275971407, 960], [1793275971417, 960], [1793275971427, 960], [1793275971437, 960], [1793275971447, 960], [1793275971457, 960], [1793275971467, 960], [1793275971477, 960], [1793275971487, 960], [1793275971497, 960], [1793275971507, 960], [1793275971517, 960], [1793275971527, 960], [1793275971537, 960], [1793275971547, 960], [1793275971557, 960], [1793275971567, 960], [1793275971577, 960], [1793275971587, 960], [1793275971597, 960], [1793275971607, 960], [1793275971617, 960], [1793275971627, 960], [1793275971637, 960], [1793275971647, 960], [1793275971657, 960], [1793275971667, 960], [1793275971677, 960], [1793275971687, 960], [1793275971697, 960], [1793275971707, 960], [1793275971717, 960], [1793275971727, 960], [1793275971737, 960], [1793275971747, 960], [1793275971757, 960], [1793275971767, 960], [1793275971777, 960], [1793275971787, 960], [1793275971797, 960], [1793275971807, 960], [1793275971817, 960], [1793275971827, 960], [1793275971837, 960], [1793275971847, 960], [1793275971857, 960], [1793275971867, 960], [1793275971877, 960], [1793275971887, 960], [1793275971897, 960], [1793275971907, 960], [1793275971917, 960], [1793275971927, 960], [1793275971937, 960], [1793275971947, 960], [1793275971957, 960], [1793275971967, 960], [1793275971977, 960], [1793275971987, 960], [1793275971997, 960], [1793275972007, 960], [1793275972017, 960], [1793275972027, 960], [1793275972037, 960], [1793275972047, 960], [1793275972057, 960], [1793275972067, 960], [1793275972077, 960], [1793275972087, 960], [1793275972097, 960], [1793275972107, 960], [1793275972117, 960], [1793275972127, 960], [1793275972137, 960], [1793275972147, 960], [1793275972157, 960], [1793275972167, 960], [1793275972177, 960], [1793275972187, 960], [1793275972197, 960], [1793275972207, 960], [1793275972217, 960], [1793275972227, 960], [1793275972237, 960], [1793275972247, 960], [1793275972257, 960], [1793275972267, 960], [1793275972277, 960], [1793275972287, 960], [1793275972297, 960], [1793275972307, 960], [1793275972318, 960], [1793275972328, 960], [1793275972338, 960], [1793275972348, 960], [1793275972358, 960], [1793275972368, 960], [1793275972378, 960], [1793275972388, 960], [1793275972398, 960], [1793275972408, 960], [1793275972418, 960], [1793275972427, 960], [1793275972437, 960], [1793275972447, 960], [1793275972457, 960], [1793275972467, 960], [1793275972477, 960], [1793275972487, 960], [1793275972497, 960], [1793275972507, 960], [1793275972517, 960], [1793275972527, 960], [1793275972537, 960], [1793275972547, 960], [1793275972557, 960], [1793275972567, 960], [1793275972577, 960], [1793275972588, 960], [1793275972598, 960], [1793275972607, 960], [1793275972617, 960], [1793275972627, 960], [1793275972637, 960], [1793275972647, 960], [1793275972657, 960], [1793275972667, 960], [1793275972677, 960], [1793275972687, 960], [1793275972697, 960], [1793275972707, 960], [1793275972717, 960], [1793275972727, 960], [1793275972738, 960], [1793275972748, 960], [1793275972757, 960], [1793275972767, 960], [1793275972777, 960], [1793275972787, 960], [1793275972797, 960], [1793275972807, 960], [1793275972817, 960], [1793275972828, 960], [1793275972837, 960], [1793275972847, 960], [1793275972858, 960], [1793275972867, 960], [1793275972877, 960], [1793275972888, 960], [1793275972897, 960], [1793275972907, 960], [1793275972917, 960], [1793275972927, 960], [1793275972937, 960], [1793275972947, 960], [1793275972957, 960], [1793275972967, 960], [1793275972977, 960], [1793275972987, 960], [1793275972997, 960], [1793275973007, 960], [1793275973017, 960], [1793275973027, 960], [1793275973037, 960], [1793275973047, 960], [1793275973057, 960], [1793275973067, 960], [1793275973077, 960], [1793275973087, 960], [1793275973097, 960], [1793275973107, 960], [1793275973117, 960], [1793275973127, 960], [1793275973137, 960], [1793275973147, 960], [1793275973157, 960], [1793275973167, 960], [1793275973177, 960], [1793275973187, 960], [1793275973197, 960], [1793275973207, 960], [1793275973217, 960], [1793275973227, 960], [1793275973237, 960], [1793275973247, 960], [1793275973257, 960], [1793275973267, 960], [1793275973277, 960], [1793275973287, 960], [1793275973297, 960], [1793275973307, 960], [1793275973317, 960], [1793275973327, 960], [1793275973337, 960], [1793275973347, 960], [1793275973357, 960], [1793275973367, 960], [1793275973377, 960], [1793275973387, 960], [1793275973397, 960], [1793275973407, 960], [1793275973417, 960], [1793275973427, 960], [1793275973437, 960], [1793275973447, 960], [1793275973457, 960], [1793275973467, 960], [1793275973477, 960], [1793275973487, 960], [1793275973497, 960], [1793275973507, 960], [1793275973517, 960], [1793275973527, 960], [1793275973538, 960], [1793275973547, 960], [1793275973557, 960], [1793275973567, 960], [1793275973578, 960], [1793275973587, 960], [1793275973598, 960], [1793275973607, 960], [1793275973617, 960], [1793275973628, 960], [1793275973638, 960], [1793275973647, 960], [1793275973657, 960], [1793275973667, 960], [1793275973677, 960], [1793275973687, 960], [1793275973697, 960], [1793275973707, 960], [1793275973717, 960], [1793275973727, 960], [1793275973737, 960], [1793275973747, 960], [1793275973757, 960], [1793275973767, 960], [1793275973777, 960], [1793275973787, 960], [1793275973797, 960], [1793275973807, 960], [1793275973817, 960], [1793275973827, 960], [1793275973837, 960], [1793275973847, 960], [1793275973857, 960], [1793275973867, 960], [1793275973877, 960], [1793275973887, 960], [1793275973897, 960], [1793275973907, 960], [1793275973917, 960], [1793275973927, 960], [1793275973937, 960], [1793275973947, 960], [1793275973957, 960], [1793275973967, 960], [1793275973977, 960], [1793275973988, 960], [1793275973997, 960], [1793275974007, 960], [1793275974017, 960], [1793275974027, 960], [1793275974037, 960], [1793275974047, 960], [1793275974057, 960], [1793275974067, 960], [1793275974077, 960], [1793275974087, 960], [1793275974098, 960], [1793275974107, 960], [1793275974118, 960], [1793275974127, 960], [1793275974137, 960], [1793275974147, 960], [1793275974157, 960], [1793275974167, 960], [1793275974177, 960], [1793275974187, 960], [1793275974197, 960], [1793275974207, 960], [1793275974217, 960], [1793275974227, 960], [1793275974237, 960], [1793275974247, 960], [1793275974257, 960], [1793275974267, 960], [1793275974278, 960], [1793275974287, 960], [1793275974297, 960], [1793275974307, 960], [1793275974317, 960], [1793275974327, 960], [1793275974337, 960], [1793275974347, 960], [1793275974357, 960], [1793275974367, 960], [1793275974377, 960], [1793275974387, 960], [1793275974397, 960], [1793275974407, 960], [1793275974417, 960], [1793275974427, 960], [1793275974437, 960], [1793275974447, 960], [1793275974457, 960], [1793275974467, 960], [1793275974477, 960], [1793275974487, 960], [1793275974497, 960], [1793275974507, 960], [1793275974517, 960], [1793275974527, 960], [1793275974537, 960], [1793275974547, 960], [1793275974557, 960], [1793275974567, 960], [1793275974577, 960], [1793275974587, 960], [1793275974597, 960], [1793275974607, 960], [1793275974617, 960], [1793275974627, 960], [1793275974637, 960], [1793275974647, 960], [1793275974658, 960], [1793275974667, 960], [1793275974677, 960], [1793275974687, 960], [1793275974697, 960], [1793275974707, 960], [1793275974717, 960], [1793275974727, 960], [1793275974737, 960], [1793275974747, 960], [1793275974757, 960], [1793275974767, 960], [1793275974777, 960], [1793275974787, 960], [1793275974797, 960], [1793275974807, 960], [1793275974817, 960], [1793275974827, 960], [1793275974837, 960], [1793275974847, 960], [1793275974857, 960], [1793275974867, 960], [1793275974877, 960], [1793275974887, 960], [1793275974897, 960], [1793275974907, 960], [1793275974917, 960], [1793275974927, 960], [1793275974937, 960], [1793275974947, 960], [1793275974957, 960], [1793275974967, 960], [1793275974977, 960], [1793275974987, 960], [1793275974997, 960], [1793275975007, 960], [1793275975017, 960], [1793275975027, 960], [1793275975037, 960], [1793275975047, 960], [1793275975057, 960], [1793275975067, 960], [1793275975077, 960], [1793275975087, 960], [1793275975097, 960], [1793275975107, 960], [1793275975117, 960], [1793275975127, 960], [1793275975137, 960], [1793275975147, 960], [1793275975157, 960], [1793275975167, 960], [1793275975177, 960], [1793275975187, 960], [1793275975197, 960], [1793275975207, 960], [1793275975217, 960], [1793275975227, 960], [1793275975237, 960], [1793275975247, 960], [1793275975257, 960], [1793275975267, 960], [1793275975277, 960], [1793275975287, 960], [1793275975297, 960], [1793275975307, 960], [1793275975317, 960], [1793275975327, 960], [1793275975337, 960], [1793275975347, 960], [1793275975357, 960], [1793275975367, 960], [1793275975377, 960], [1793275975387, 960], [1793275975397, 960], [1793275975407, 960], [1793275975417, 960], [1793275975427, 960], [1793275975437, 960], [1793275975447, 960], [1793275975457, 960], [1793275975467, 960], [1793275975477, 960], [1793275975487, 960], [1793275975497, 960], [1793275975507, 960], [1793275975517, 960], [1793275975527, 960], [1793275975537, 960], [1793275975547, 960], [1793275975557, 960], [1793275975567, 960], [1793275975577, 960], [1793275975587, 960], [1793275975597, 960], [1793275975607, 960], [1793275975617, 960], [1793275975627, 960], [1793275975637, 960], [1793275975647, 960], [1793275975657, 960], [1793275975667, 960], [1793275975677, 960], [1793275975687, 960], [1793275975697, 960], [1793275975707, 960], [1793275975717, 960], [1793275975728, 960], [1793275975737, 960], [1793275975747, 960], [1793275975757, 960], [1793275975767, 960], [1793275975777, 960], [1793275975787, 960], [1793275975797, 960], [1793275975807, 960], [1793275975817, 960], [1793275975827, 960], [1793275975837, 960], [1793275975847, 960], [1793275975857, 960], [1793275975867, 960], [1793275975877, 960], [1793275975887, 960], [1793275975898, 960], [1793275975907, 960], [1793275975918, 960], [1793275975927, 960], [1793275975937, 960], [1793275975947, 960], [1793275975957, 960], [1793275975968, 960], [1793275975978, 960], [1793275975988, 960], [1793275975997, 960], [1793275976008, 960], [1793275976017, 960], [1793275976027, 960], [1793275976037, 960], [1793275976047, 960], [1793275976057, 960], [1793275976067, 960], [1793275976077, 960], [1793275976087, 960], [1793275976097, 960], [1793275976107, 960], [1793275976117, 960], [1793275976127, 960], [1793275976137, 960], [1793275976147, 960], [1793275976157, 960], [1793275976167, 960], [1793275976177, 960], [1793275976187, 960], [1793275976197, 960], [1793275976207, 960], [1793275976217, 960], [1793275976227, 960], [1793275976237, 960], [1793275976247, 960], [1793275976258, 960], [1793275976267, 960], [1793275976277, 960], [1793275976287, 960], [1793275976297, 960], [1793275976307, 960], [1793275976317, 960], [1793275976327, 960], [1793275976338, 960], [1793275976347, 960], [1793275976358, 960], [1793275976367, 960], [1793275976378, 960], [1793275976387, 960], [1793275976398, 960], [1793275976407, 960], [1793275976417, 960], [1793275976428, 960], [1793275976437, 960], [1793275976447, 960], [1793275976457, 960], [1793275976467, 960], [1793275976477, 960], [1793275976487, 960], [1793275976497, 960], [1793275976507, 960], [1793275976517, 960], [1793275976527, 960], [1793275976537, 960], [1793275976547, 960], [1793275976557, 960], [1793275976567, 960], [1793275976577, 960], [1793275976587, 960], [1793275976598, 960], [1793275976607, 960], [1793275976618, 960], [1793275976628, 960], [1793275976638, 960], [1793275976647, 960], [1793275976657, 960], [1793275976667, 960], [1793275976677, 960], [1793275976687, 960], [1793275976697, 960], [1793275976707, 960], [1793275976717, 960], [1793275976727, 960], [1793275976737, 960], [1793275976747, 960], [1793275976757, 960], [1793275976767, 960], [1793275976777, 960], [1793275976787, 960], [1793275976797, 960], [1793275976807, 960], [1793275976817, 960], [1793275976827, 960], [1793275976837, 960], [1793275976847, 960], [1793275976857, 960], [1793275976867, 960], [1793275976877, 960], [1793275976887, 960], [1793275976897, 960], [1793275976907, 960], [1793275976917, 960], [1793275976927, 960], [1793275976937, 960], [1793275976947, 960], [1793275976957, 960], [1793275976967, 960], [1793275976977, 960], [1793275976987, 960], [1793275976997, 960], [1793275977007, 960], [1793275977017, 960], [1793275977027, 960], [1793275977037, 960], [1793275977047, 960], [1793275977057, 960], [1793275977067, 960], [1793275977077, 960], [1793275977087, 960], [1793275977097, 960], [1793275977108, 960], [1793275977118, 960], [1793275977127, 960], [1793275977138, 960], [1793275977148, 960], [1793275977158, 960], [1793275977168, 960], [1793275977178, 960], [1793275977188, 960], [1793275977197, 960], [1793275977207, 960], [1793275977218, 960], [1793275977228, 960], [1793275977238, 960], [1793275977248, 960], [1793275977257, 960], [1793275977268, 960], [1793275977277, 960], [1793275977287, 960], [1793275977297, 960], [1793275977307, 960], [1793275977318, 960], [1793275977327, 960], [1793275977337, 960], [1793275977347, 960], [1793275977357, 960], [1793275977367, 960], [1793275977377, 960], [1793275977387, 960], [1793275977397, 960], [1793275977407, 960], [1793275977417, 960], [1793275977427, 960], [1793275977437, 960], [1793275977447, 960], [1793275977457, 960], [1793275977467, 960], [1793275977477, 960], [1793275977487, 960], [1793275977497, 960], [1793275977507, 960], [1793275977518, 960], [1793275977527, 960], [1793275977537, 960], [1793275977547, 960], [1793275977557, 960], [1793275977567, 960], [1793275977577, 960], [1793275977588, 960], [1793275977597, 960], [1793275977608, 960], [1793275977617, 960], [1793275977627, 960], [1793275977637, 960], [1793275977647, 960], [1793275977657, 960], [1793275977667, 960], [1793275977677, 960], [1793275977687, 960], [1793275977697, 960], [1793275977707, 960], [1793275977717, 960], [1793275977727, 960], [1793275977738, 960], [1793275977747, 960], [1793275977757, 960], [1793275977767, 960], [1793275977777, 960], [1793275977787, 960], [1793275977797, 960], [1793275977808, 960], [1793275977817, 960], [1793275977827, 960], [1793275977837, 960], [1793275977847, 960], [1793275977857, 960], [1793275977867, 960], [1793275977877, 960], [1793275977887, 960], [1793275977897, 960], [1793275977907, 960], [1793275977917, 960], [1793275977927, 960], [1793275977937, 960], [1793275977947, 960], [1793275977957, 960], [1793275977967, 960], [1793275977978, 960], [1793275977987, 960], [1793275977997, 960], [1793275978007, 960], [1793275978017, 960], [1793275978027, 960], [1793275978037, 960], [1793275978047, 960], [1793275978057, 960], [1793275978067, 960], [1793275978077, 960], [1793275978087, 960], [1793275978097, 960], [1793275978107, 960], [1793275978117, 960], [1793275978127, 960], [1793275978137, 960], [1793275978147, 960], [1793275978157, 960], [1793275978167, 960], [1793275978177, 960], [1793275978187, 960], [1793275978197, 960], [1793275978207, 960], [1793275978217, 960], [1793275978227, 960], [1793275978237, 960], [1793275978247, 960], [1793275978257, 960], [1793275978267, 960], [1793275978277, 960], [1793275978287, 960], [1793275978297, 960], [1793275978307, 960], [1793275978317, 960], [1793275978327, 960], [1793275978337, 960], [1793275978347, 960], [1793275978357, 960], [1793275978367, 960], [1793275978377, 960], [1793275978387, 960], [1793275978397, 960], [1793275978407, 960], [1793275978417, 960], [1793275978427, 960], [1793275978437, 960], [1793275978447, 960], [1793275978457, 960], [1793275978467, 960], [1793275978477, 960], [1793275978487, 960], [1793275978497, 960], [1793275978507, 960], [1793275978517, 960], [1793275978527, 960], [1793275978537, 960], [1793275978547, 960], [1793275978557, 960], [1793275978567, 960], [1793275978577, 960], [1793275978587, 960], [1793275978597, 960], [1793275978607, 960], [1793275978617, 960], [1793275978627, 960], [1793275978637, 960], [1793275978647, 960], [1793275978657, 960], [1793275978667, 960], [1793275978677, 960], [1793275978687, 960], [1793275978697, 960], [1793275978707, 960], [1793275978717, 960], [1793275978727, 960], [1793275978737, 960], [1793275978747, 960], [1793275978757, 960], [1793275978767, 960], [1793275978777, 960], [1793275978787, 960], [1793275978797, 960], [1793275978807, 960], [1793275978817, 960], [1793275978827, 960], [1793275978837, 960], [1793275978847, 960], [1793275978857, 960], [1793275978867, 960], [1793275978877, 960], [1793275978887, 960], [1793275978897, 960], [1793275978907, 960], [1793275978917, 960], [1793275978927, 960], [1793275978937, 960], [1793275978947, 960], [1793275978957, 960], [1793275978967, 960], [1793275978977, 960], [1793275978987, 960], [1793275978997, 960], [1793275979007, 960], [1793275979017, 960], [1793275979027, 960], [1793275979037, 960], [1793275979047, 960], [1793275979057, 960], [1793275979067, 960], [1793275979077, 960], [1793275979087, 960], [1793275979097, 960], [1793275979107, 960], [1793275979117, 960], [1793275979127, 960], [1793275979137, 960], [1793275979147, 960], [1793275979157, 960], [1793275979167, 960], [1793275979177, 960], [1793275979187, 960], [1793275979197, 960], [1793275979207, 960], [1793275979217, 960], [1793275979227, 960], [1793275979237, 960], [1793275979247, 960], [1793275979257, 960], [1793275979267, 960], [1793275979277, 960], [1793275979287, 960], [1793275979297, 960], [1793275979307, 960], [1793275979317, 960], [1793275979327, 960], [1793275979337, 960], [1793275979347, 960], [1793275979357, 960], [1793275979367, 960], [1793275979377, 960], [1793275979387, 960], [1793275979397, 960], [1793275979407, 960], [1793275979417, 960], [1793275979427, 960], [1793275979437, 960], [1793275979447, 960], [1793275979457, 960], [1793275979467, 960], [1793275979477, 960], [1793275979487, 960], [1793275979497, 960], [1793275979507, 960], [1793275979517, 960], [1793275979527, 960], [1793275979537, 960], [1793275979547, 960], [1793275979557, 960], [1793275979567, 960], [1793275979577, 960], [1793275979587, 960], [1793275979597, 960], [1793275979607, 960], [1793275979617, 960], [1793275979627, 960], [1793275979637, 960], [1793275979647, 960], [1793275979657, 960], [1793275979667, 960], [1793275979677, 960], [1793275979687, 960], [1793275979697, 960], [1793275979707, 960], [1793275979717, 960], [1793275979727, 960], [1793275979737, 960], [1793275979747, 960], [1793275979757, 960], [1793275979767, 960], [1793275979777, 960], [1793275979787, 960], [1793275979797, 960], [1793275979807, 960], [1793275979817, 960], [1793275979827, 960], [1793275979837, 960], [1793275979847, 960], [1793275979857, 960], [1793275979867, 960], [1793275979877, 960], [1793275979888, 960], [1793275979897, 960], [1793275979908, 960], [1793275979917, 960], [1793275979928, 960], [1793275979937, 960], [1793275979948, 960], [1793275979957, 960], [1793275979968, 960], [1793275979977, 960], [1793275979988, 960], [1793275979997, 960], [1793275980007, 960], [1793275980017, 960], [1793275980028, 960], [1793275980037, 960], [1793275980048, 960], [1793275980057, 960], [1793275980068, 960], [1793275980077, 960], [1793275980087, 960], [1793275980097, 960], [1793275980107, 960], [1793275980117, 960], [1793275980127, 960], [1793275980137, 960], [1793275980147, 960], [1793275980157, 960], [1793275980167, 960], [1793275980177, 960], [1793275980187, 960], [1793275980197, 960], [1793275980207, 960], [1793275980217, 960], [1793275980228, 960], [1793275980237, 960], [1793275980248, 960], [1793275980257, 960], [1793275980267, 960], [1793275980277, 960], [1793275980287, 960], [1793275980297, 960], [1793275980308, 960], [1793275980317, 960], [1793275980327, 960], [1793275980337, 960], [1793275980347, 960], [1793275980357, 960], [1793275980367, 960], [1793275980377, 960], [1793275980387, 960], [1793275980397, 960], [1793275980407, 960], [1793275980417, 960], [1793275980427, 960], [1793275980437, 960], [1793275980447, 960], [1793275980457, 960], [1793275980467, 960], [1793275980477, 960], [1793275980487, 960], [1793275980497, 960], [1793275980507, 960], [1793275980517, 960], [1793275980527, 960], [1793275980537, 960], [1793275980547, 960], [1793275980557, 960], [1793275980567, 960], [1793275980577, 960], [1793275980587, 960], [1793275980597, 960], [1793275980607, 960], [1793275980617, 960], [1793275980627, 960], [1793275980637, 960], [1793275980647, 960], [1793275980657, 960], [1793275980667, 960], [1793275980677, 960], [1793275980687, 960], [1793275980697, 960], [1793275980707, 960], [1793275980717, 960], [1793275980727, 960], [1793275980737, 960], [1793275980747, 960], [1793275980757, 960], [1793275980767, 960], [1793275980777, 960], [1793275980787, 960], [1793275980797, 960], [1793275980807, 960], [1793275980817, 960], [1793275980827, 960], [1793275980837, 960], [1793275980847, 960], [1793275980857, 960], [1793275980867, 960], [1793275980877, 960], [1793275980887, 960], [1793275980897, 960], [1793275980907, 960], [1793275980917, 960], [1793275980927, 960], [1793275980937, 960], [1793275980947, 960], [1793275980957, 960], [1793275980967, 960], [1793275980977, 960], [1793275980987, 960], [1793275980997, 960], [1793275981007, 960], [1793275981017, 960], [1793275981029, 960], [1793275981037, 960], [1793275981047, 960], [1793275981057, 960], [1793275981067, 960], [1793275981077, 960], [1793275981087, 960], [1793275981097, 960], [1793275981107, 960], [1793275981117, 960], [1793275981127, 960], [1793275981137, 960], [1793275981147, 960], [1793275981157, 960], [1793275981167, 960], [1793275981177, 960], [1793275981187, 960], [1793275981197, 960], [1793275981207, 960], [1793275981217, 960], [1793275981227, 960], [1793275981237, 960], [1793275981247, 960], [1793275981257, 960], [1793275981267, 960], [1793275981277, 960], [1793275981287, 960], [1793275981297, 960], [1793275981307, 960], [1793275981317, 960], [1793275981327, 960], [1793275981337, 960], [1793275981347, 960], [1793275981357, 960], [1793275981367, 960], [1793275981377, 960], [1793275981387, 960], [1793275981397, 960], [1793275981407, 960], [1793275981417, 960], [1793275981427, 960], [1793275981437, 960], [1793275981447, 960], [1793275981457, 960], [1793275981467, 960], [1793275981477, 960], [1793275981487, 960], [1793275981497, 960], [1793275981507, 960], [1793275981517, 960], [1793275981528, 960], [1793275981538, 960], [1793275981547, 960], [1793275981557, 960], [1793275981567, 960], [1793275981577, 960], [1793275981587, 960], [1793275981597, 960], [1793275981607, 960], [1793275981617, 960], [1793275981627, 960], [1793275981637, 960], [1793275981647, 960], [1793275981657, 960], [1793275981667, 960], [1793275981677, 960], [1793275981687, 960], [1793275981697, 960], [1793275981707, 960], [1793275981717, 960], [1793275981727, 960], [1793275981737, 960], [1793275981747, 960], [1793275981757, 960], [1793275981767, 960], [1793275981777, 960], [1793275981787, 960], [1793275981797, 960], [1793275981807, 960], [1793275981817, 960], [1793275981827, 960], [1793275981837, 960], [1793275981847, 960], [1793275981857, 960], [1793275981867, 960], [1793275981877, 960], [1793275981887, 960], [1793275981897, 960], [1793275981907, 960], [1793275981917, 960], [1793275981927, 960], [1793275981937, 960], [1793275981947, 960], [1793275981957, 960], [1793275981967, 960], [1793275981977, 960], [1793275981987, 960], [1793275981997, 960], [1793275982007, 960], [1793275982017, 960], [1793275982027, 960], [1793275982037, 960], [1793275982047, 960], [1793275982057, 960], [1793275982067, 960], [1793275982077, 960], [1793275982088, 960], [1793275982097, 960], [1793275982107, 960], [1793275982117, 960], [1793275982127, 960], [1793275982137, 960], [1793275982147, 960], [1793275982157, 960], [1793275982167, 960], [1793275982177, 960], [1793275982187, 960], [1793275982197, 960], [1793275982207, 960], [1793275982217, 960], [1793275982227, 960], [1793275982237, 960], [1793275982247, 960], [1793275982257, 960], [1793275982267, 960], [1793275982277, 960], [1793275982287, 960], [1793275982297, 960], [1793275982307, 960], [1793275982317, 960], [1793275982327, 960], [1793275982337, 960], [1793275982347, 960], [1793275982357, 960], [1793275982367, 960], [1793275982377, 960], [1793275982387, 960], [1793275982397, 960], [1793275982407, 960], [1793275982417, 960], [1793275982427, 960], [1793275982437, 960], [1793275982448, 960], [1793275982457, 960], [1793275982468, 960], [1793275982477, 960], [1793275982487, 960], [1793275982497, 960], [1793275982507, 960], [1793275982517, 960], [1793275982528, 960], [1793275982537, 960], [1793275982548, 960], [1793275982557, 960], [1793275982568, 960], [1793275982582, 960], [1793275982587, 960], [1793275982597, 960], [1793275982607, 960], [1793275982617, 960], [1793275982627, 960], [1793275982637, 960], [1793275982647, 960], [1793275982657, 960], [1793275982667, 960], [1793275982677, 960], [1793275982687, 960], [1793275982697, 960], [1793275982707, 960], [1793275982717, 960], [1793275982727, 960], [1793275982737, 960], [1793275982747, 960], [1793275982757, 960], [1793275982767, 960], [1793275982777, 960], [1793275982787, 960], [1793275982797, 960], [1793275982807, 960], [1793275982818, 960], [1793275982827, 960], [1793275982837, 960], [1793275982847, 960], [1793275982858, 960], [1793275982867, 960], [1793275982877, 960], [1793275982887, 960], [1793275982897, 960], [1793275982907, 960], [1793275982917, 960], [1793275982927, 960], [1793275982937, 960], [1793275982947, 960], [1793275982957, 960], [1793275982967, 960], [1793275982977, 960], [1793275982987, 960], [1793275982997, 960], [1793275983007, 960], [1793275983017, 960], [1793275983027, 960], [1793275983037, 960], [1793275983047, 960], [1793275983057, 960], [1793275983067, 960], [1793275983077, 960], [1793275983087, 960], [1793275983097, 960], [1793275983107, 960], [1793275983117, 960], [1793275983127, 960], [1793275983137, 960], [1793275983147, 960], [1793275983157, 960], [1793275983167, 960], [1793275983177, 960], [1793275983187, 960], [1793275983197, 960], [1793275983207, 960], [1793275983217, 960], [1793275983227, 960], [1793275983237, 960], [1793275983247, 960], [1793275983257, 960], [1793275983267, 960], [1793275983277, 960], [1793275983287, 960], [1793275983297, 960], [1793275983307, 960], [1793275983317, 960], [1793275983327, 960], [1793275983337, 960], [1793275983347, 960], [1793275983357, 960], [1793275983367, 960], [1793275983377, 960], [1793275983387, 960], [1793275983397, 960], [1793275983407, 960], [1793275983417, 960], [1793275983427, 960], [1793275983437, 960], [1793275983447, 960], [1793275983457, 960], [1793275983467, 960], [1793275983477, 960], [1793275983487, 960], [1793275983497, 960], [1793275983507, 960], [1793275983517, 960], [1793275983527, 960], [1793275983537, 960], [1793275983547, 960], [1793275983557, 960], [1793275983567, 960], [1793275983577, 960], [1793275983587, 960], [1793275983597, 960], [1793275983607, 960], [1793275983617, 960], [1793275983627, 960], [1793275983637, 960], [1793275983647, 960], [1793275983657, 960], [1793275983667, 960], [1793275983677, 960], [1793275983687, 960], [1793275983697, 960], [1793275983707, 960], [1793275983717, 960], [1793275983727, 960], [1793275983737, 960], [1793275983747, 960], [1793275983757, 960], [1793275983767, 960], [1793275983777, 960], [1793275983787, 960], [1793275983797, 960], [1793275983807, 960], [1793275983817, 960], [1793275983828, 960], [1793275983837, 960], [1793275983847, 960], [1793275983858, 960], [1793275983867, 960], [1793275983877, 960], [1793275983887, 960], [1793275983897, 960], [1793275983907, 960], [1793275983917, 960], [1793275983927, 960], [1793275983937, 960], [1793275983947, 960], [1793275983957, 960], [1793275983967, 960], [1793275983977, 960], [1793275983987, 960], [1793275983997, 960], [1793275984007, 960], [1793275984018, 960], [1793275984027, 960], [1793275984037, 960], [1793275984047, 960], [1793275984057, 960], [1793275984067, 960], [1793275984077, 960], [1793275984087, 960], [1793275984097, 960], [1793275984107, 960], [1793275984117, 960], [1793275984127, 960], [1793275984137, 960], [1793275984147, 960], [1793275984157, 960], [1793275984167, 960], [1793275984177, 960], [1793275984187, 960], [1793275984197, 960], [1793275984207, 960], [1793275984217, 960], [1793275984227, 960], [1793275984237, 960], [1793275984247, 960], [1793275984257, 960], [1793275984267, 960], [1793275984277, 960], [1793275984287, 960], [1793275984297, 960], [1793275984307, 960], [1793275984317, 960], [1793275984327, 960], [1793275984337, 960], [1793275984347, 960], [1793275984357, 960], [1793275984367, 960], [1793275984377, 960], [1793275984387, 960], [1793275984397, 960], [1793275984407, 960], [1793275984417, 960], [1793275984427, 960], [1793275984437, 960], [1793275984447, 960], [1793275984458, 960], [1793275984467, 960], [1793275984477, 960], [1793275984487, 960], [1793275984497, 960], [1793275984507, 960], [1793275984517, 960], [1793275984527, 960], [1793275984537, 960], [1793275984547, 960], [1793275984557, 960], [1793275984567, 960], [1793275984577, 960], [1793275984587, 960], [1793275984597, 960], [1793275984607, 960], [1793275984618, 960], [1793275984628, 960], [1793275984637, 960], [1793275984648, 960], [1793275984658, 960], [1793275984667, 960], [1793275984677, 960], [1793275984687, 960], [1793275984697, 960], [1793275984707, 960], [1793275984717, 960], [1793275984727, 960], [1793275984737, 960], [1793275984747, 960], [1793275984757, 960], [1793275984767, 960], [1793275984777, 960], [1793275984787, 960], [1793275984797, 960], [1793275984807, 960], [1793275984817, 960], [1793275984827, 960], [1793275984837, 960], [1793275984847, 960], [1793275984858, 960], [1793275984867, 960], [1793275984878, 960], [1793275984887, 960], [1793275984897, 960], [1793275984907, 960], [1793275984917, 960], [1793275984927, 960], [1793275984938, 960], [1793275984947, 960], [1793275984957, 960], [1793275984967, 960], [1793275984977, 960], [1793275984987, 960], [1793275984997, 960], [1793275985007, 960], [1793275985017, 960], [1793275985027, 960], [1793275985037, 960], [1793275985047, 960], [1793275985057, 960], [1793275985067, 960], [1793275985077, 960], [1793275985087, 960], [1793275985097, 960], [1793275985107, 960], [1793275985117, 960], [1793275985127, 960], [1793275985137, 960], [1793275985147, 960], [1793275985157, 960], [1793275985167, 960], [1793275985177, 960], [1793275985187, 960], [1793275985197, 960], [1793275985207, 960], [1793275985217, 960], [1793275985227, 960], [1793275985237, 960], [1793275985247, 960], [1793275985257, 960], [1793275985267, 960], [1793275985277, 960], [1793275985287, 960], [1793275985297, 960], [1793275985307, 960], [1793275985317, 960], [1793275985327, 960], [1793275985337, 960], [1793275985347, 960], [1793275985357, 960], [1793275985367, 960], [1793275985377, 960], [1793275985387, 960], [1793275985397, 960], [1793275985407, 960], [1793275985417, 960], [1793275985427, 960], [1793275985437, 960], [1793275985447, 960], [1793275985457, 960], [1793275985467, 960], [1793275985477, 960], [1793275985487, 960], [1793275985497, 960], [1793275985507, 960], [1793275985517, 960], [1793275985527, 960], [1793275985537, 960], [1793275985547, 960], [1793275985557, 960], [1793275985567, 960], [1793275985577, 960], [1793275985587, 960], [1793275985597, 960], [1793275985607, 960], [1793275985617, 960], [1793275985627, 960], [1793275985637, 960], [1793275985647, 960], [1793275985657, 960], [1793275985667, 960], [1793275985677, 960], [1793275985687, 960], [1793275985697, 960], [1793275985707, 960], [1793275985717, 960], [1793275985727, 960], [1793275985737, 960], [1793275985747, 960], [1793275985757, 960], [1793275985767, 960], [1793275985777, 960], [1793275985787, 960], [1793275985797, 960], [1793275985807, 960], [1793275985817, 960], [1793275985827, 960], [1793275985837, 960], [1793275985847, 960], [1793275985857, 960], [1793275985867, 960], [1793275985877, 960], [1793275985887, 960], [1793275985898, 960], [1793275985907, 960], [1793275985918, 960], [1793275985927, 960], [1793275985937, 960], [1793275985947, 960], [1793275985957, 960], [1793275985967, 960], [1793275985977, 960], [1793275985987, 960], [1793275985997, 960], [1793275986007, 960], [1793275986017, 960], [1793275986027, 960], [1793275986037, 960], [1793275986047, 960], [1793275986057, 960], [1793275986067, 960], [1793275986077, 960], [1793275986087, 960], [1793275986097, 960], [1793275986107, 960], [1793275986117, 960], [1793275986127, 960], [1793275986137, 960], [1793275986147, 960], [1793275986157, 960], [1793275986167, 960], [1793275986177, 960], [1793275986188, 960], [1793275986197, 960], [1793275986207, 960], [1793275986217, 960], [1793275986227, 960], [1793275986237, 960], [1793275986247, 960], [1793275986257, 960], [1793275986267, 960], [1793275986277, 960], [1793275986287, 960], [1793275986297, 960], [1793275986307, 960], [1793275986317, 960], [1793275986327, 960], [1793275986337, 960], [1793275986347, 960], [1793275986357, 960], [1793275986367, 960], [1793275986377, 960], [1793275986387, 960], [1793275986397, 960], [1793275986407, 960], [1793275986417, 960], [1793275986427, 960], [1793275986437, 960], [1793275986448, 960], [1793275986457, 960], [1793275986468, 960], [1793275986478, 960], [1793275986487, 960], [1793275986497, 960], [1793275986507, 960], [1793275986517, 960], [1793275986527, 960], [1793275986537, 960], [1793275986547, 960], [1793275986557, 960], [1793275986567, 960], [1793275986577, 960], [1793275986587, 960], [1793275986597, 960], [1793275986607, 960], [1793275986617, 960], [1793275986627, 960], [1793275986637, 960], [1793275986647, 960], [1793275986657, 960], [1793275986667, 960], [1793275986677, 960], [1793275986687, 960], [1793275986697, 960], [1793275986707, 960], [1793275986717, 960], [1793275986727, 960], [1793275986737, 960], [1793275986747, 960], [1793275986757, 960], [1793275986767, 960], [1793275986777, 960], [1793275986787, 960], [1793275986797, 960], [1793275986807, 960], [1793275986817, 960], [1793275986827, 960], [1793275986837, 960], [1793275986847, 960], [1793275986857, 960], [1793275986867, 960], [1793275986877, 960], [1793275986887, 960], [1793275986897, 960], [1793275986907, 960], [1793275986917, 960], [1793275986927, 960], [1793275986937, 960], [1793275986947, 960], [1793275986957, 960], [1793275986967, 960], [1793275986977, 960], [1793275986987, 960], [1793275986997, 960], [1793275987007, 960], [1793275987017, 960], [1793275987027, 960], [1793275987037, 960], [1793275987047, 960], [1793275987057, 960], [1793275987068, 960], [1793275987078, 960], [1793275987088, 960], [1793275987097, 960], [1793275987107, 960], [1793275987117, 960], [1793275987127, 960], [1793275987137, 960], [1793275987147, 960], [1793275987157, 960], [1793275987167, 960], [1793275987177, 960], [1793275987187, 960], [1793275987197, 960], [1793275987207, 960], [1793275987217, 960], [1793275987227, 960], [1793275987237, 960], [1793275987247, 960], [1793275987257, 960], [1793275987267, 960], [1793275987277, 960], [1793275987287, 960], [1793275987297, 960], [1793275987308, 960], [1793275987317, 960], [1793275987327, 960], [1793275987337, 960], [1793275987347, 960], [1793275987357, 960], [1793275987367, 960], [1793275987377, 960], [1793275987387, 960], [1793275987397, 960], [1793275987407, 960], [1793275987417, 960], [1793275987427, 960], [1793275987437, 960], [1793275987447, 960], [1793275987457, 960], [1793275987467, 960], [1793275987477, 960], [1793275987487, 960], [1793275987497, 960], [1793275987507, 960], [1793275987517, 960], [1793275987527, 960], [1793275987537, 960], [1793275987547, 960], [1793275987557, 960], [1793275987567, 960], [1793275987577, 960], [1793275987587, 960], [1793275987597, 960], [1793275987607, 960], [1793275987617, 960], [1793275987627, 960], [1793275987637, 960], [1793275987647, 960], [1793275987657, 960], [1793275987667, 960], [1793275987677, 960], [1793275987687, 960], [1793275987697, 960], [1793275987707, 960], [1793275987717, 960], [1793275987727, 960], [1793275987737, 960], [1793275987747, 960], [1793275987757, 960], [1793275987767, 960], [1793275987777, 960], [1793275987787, 960], [1793275987797, 960], [1793275987807, 960], [1793275987817, 960], [1793275987827, 960], [1793275987837, 960], [1793275987847, 960], [1793275987857, 960], [1793275987867, 960], [1793275987877, 960], [1793275987887, 960], [1793275987897, 960], [1793275987907, 960], [1793275987917, 960], [1793275987927, 960], [1793275987937, 960], [1793275987947, 960], [1793275987957, 960], [1793275987967, 960], [1793275987977, 960], [1793275987987, 960], [1793275987997, 960], [1793275988007, 960], [1793275988017, 960], [1793275988027, 960], [1793275988037, 960], [1793275988047, 960], [1793275988057, 960], [1793275988067, 960], [1793275988077, 960], [1793275988087, 960], [1793275988097, 960], [1793275988107, 960], [1793275988117, 960], [1793275988127, 960], [1793275988137, 960], [1793275988147, 960], [1793275988157, 960], [1793275988167, 960], [1793275988177, 960], [1793275988187, 960], [1793275988197, 960], [1793275988207, 960], [1793275988217, 960], [1793275988227, 960], [1793275988237, 960], [1793275988247, 960], [1793275988257, 960], [1793275988267, 960], [1793275988277, 960], [1793275988287, 960], [1793275988297, 960], [1793275988307, 960], [1793275988317, 960], [1793275988327, 960], [1793275988337, 960], [1793275988347, 960], [1793275988357, 960], [1793275988367, 960], [1793275988377, 960], [1793275988387, 960], [1793275988397, 960], [1793275988407, 960], [1793275988417, 960], [1793275988427, 960], [1793275988437, 960], [1793275988447, 960], [1793275988457, 960], [1793275988467, 960], [1793275988477, 960], [1793275988487, 960], [1793275988497, 960], [1793275988507, 960], [1793275988517, 960], [1793275988527, 960], [1793275988537, 960], [1793275988547, 960], [1793275988557, 960], [1793275988567, 960], [1793275988577, 960], [1793275988587, 960], [1793275988597, 960], [1793275988607, 960], [1793275988617, 960], [1793275988627, 960], [1793275988637, 960], [1793275988647, 960], [1793275988657, 960], [1793275988667, 960], [1793275988677, 960], [1793275988687, 960], [1793275988697, 960], [1793275988707, 960], [1793275988717, 960], [1793275988727, 960], [1793275988737, 960], [1793275988747, 960], [1793275988757, 960], [1793275988767, 960], [1793275988777, 960], [1793275988787, 960], [1793275988797, 960], [1793275988807, 960], [1793275988817, 960], [1793275988827, 960], [1793275988837, 960], [1793275988847, 960], [1793275988857, 960], [1793275988867, 960], [1793275988877, 960], [1793275988887, 960], [1793275988897, 960], [1793275988907, 960], [1793275988917, 960], [1793275988927, 960], [1793275988937, 960], [1793275988947, 960], [1793275988957, 960], [1793275988967, 960], [1793275988977, 960], [1793275988987, 960], [1793275988997, 960], [1793275989007, 960], [1793275989017, 960], [1793275989027, 960], [1793275989037, 960], [1793275989047, 960], [1793275989057, 960], [1793275989067, 960], [1793275989077, 960], [1793275989087, 960], [1793275989097, 960], [1793275989107, 960], [1793275989117, 960], [1793275989127, 960], [1793275989137, 960], [1793275989147, 960], [1793275989157, 960], [1793275989167, 960], [1793275989177, 960], [1793275989187, 960], [1793275989197, 960], [1793275989207, 960], [1793275989217, 960], [1793275989227, 960], [1793275989237, 960], [1793275989247, 960], [1793275989257, 960], [1793275989267, 960], [1793275989277, 960], [1793275989287, 960], [1793275989297, 960], [1793275989307, 960], [1793275989317, 960], [1793275989327, 960], [1793275989337, 960], [1793275989347, 960], [1793275989357, 960], [1793275989367, 960], [1793275989377, 960], [1793275989387, 960], [1793275989397, 960], [1793275989407, 960], [1793275989417, 960], [1793275989427, 960], [1793275989437, 960], [1793275989447, 960], [1793275989457, 960], [1793275989467, 960], [1793275989477, 960], [1793275989487, 960], [1793275989497, 960], [1793275989507, 960], [1793275989517, 960], [1793275989527, 960], [1793275989537, 960], [1793275989547, 960], [1793275989557, 960], [1793275989567, 960], [1793275989577, 960], [1793275989587, 960], [1793275989597, 960], [1793275989608, 960], [1793275989617, 960], [1793275989628, 960], [1793275989637, 960], [1793275989647, 960], [1793275989657, 960], [1793275989667, 960], [1793275989677, 960], [1793275989687, 960], [1793275989697, 960], [1793275989707, 960], [1793275989717, 960], [1793275989727, 960], [1793275989737, 960], [1793275989747, 960], [1793275989757, 960], [1793275989767, 960], [1793275989777, 960], [1793275989787, 960], [1793275989797, 960], [1793275989808, 960], [1793275989817, 960], [1793275989827, 960], [1793275989837, 960], [1793275989847, 960], [1793275989857, 960], [1793275989867, 960], [1793275989877, 960], [1793275989887, 960], [1793275989897, 960], [1793275989907, 960], [1793275989917, 960], [1793275989927, 960], [1793275989937, 960], [1793275989947, 960], [1793275989957, 960], [1793275989967, 960], [1793275989977, 960], [1793275989987, 960], [1793275989997, 960], [1793275990007, 960], [1793275990017, 960], [1793275990027, 960], [1793275990037, 960], [1793275990047, 960], [1793275990057, 960], [1793275990067, 960], [1793275990077, 960], [1793275990087, 960], [1793275990097, 960], [1793275990107, 960], [1793275990117, 960], [1793275990127, 960], [1793275990137, 960], [1793275990147, 960], [1793275990157, 960], [1793275990167, 960], [1793275990177, 960], [1793275990187, 960], [1793275990197, 960], [1793275990207, 960], [1793275990217, 960], [1793275990227, 960], [1793275990237, 960], [1793275990247, 960], [1793275990257, 960], [1793275990267, 960], [1793275990277, 960], [1793275990287, 960], [1793275990297, 960], [1793275990307, 960], [1793275990317, 960], [1793275990327, 960], [1793275990337, 960], [1793275990347, 960], [1793275990357, 960], [1793275990367, 960], [1793275990377, 960], [1793275990387, 960], [1793275990397, 960], [1793275990407, 960], [1793275990418, 960], [1793275990427, 960], [1793275990437, 960], [1793275990447, 960], [1793275990457, 960], [1793275990467, 960], [1793275990477, 960], [1793275990487, 960], [1793275990497, 960], [1793275990508, 960], [1793275990517, 960], [1793275990527, 960], [1793275990537, 960], [1793275990547, 960], [1793275990557, 960], [1793275990567, 960], [1793275990577, 960], [1793275990587, 960], [1793275990597, 960], [1793275990607, 960], [1793275990617, 960], [1793275990627, 960], [1793275990637, 960], [1793275990648, 960], [1793275990657, 960], [1793275990668, 960], [1793275990677, 960], [1793275990687, 960], [1793275990697, 960], [1793275990707, 960], [1793275990718, 960], [1793275990727, 960], [1793275990738, 960], [1793275990747, 960], [1793275990757, 960], [1793275990767, 960], [1793275990777, 960], [1793275990787, 960], [1793275990797, 960], [1793275990807, 960], [1793275990817, 960], [1793275990827, 960], [1793275990837, 960], [1793275990847, 960], [1793275990857, 960], [1793275990867, 960], [1793275990877, 960], [1793275990887, 960], [1793275990897, 960], [1793275990907, 960], [1793275990917, 960], [1793275990928, 960], [1793275990938, 960], [1793275990947, 960], [1793275990957, 960], [1793275990967, 960], [1793275990977, 960], [1793275990987, 960], [1793275990997, 960], [1793275991007, 960], [1793275991017, 960], [1793275991027, 960], [1793275991037, 960], [1793275991047, 960], [1793275991057, 960], [1793275991067, 960], [1793275991077, 960], [1793275991087, 960], [1793275991097, 960], [1793275991107, 960], [1793275991117, 960], [1793275991127, 960], [1793275991137, 960], [1793275991147, 960], [1793275991157, 960], [1793275991167, 960], [1793275991177, 960], [1793275991187, 960], [1793275991197, 960], [1793275991207, 960], [1793275991217, 960], [1793275991227, 960], [1793275991237, 960], [1793275991247, 960], [1793275991257, 960], [1793275991267, 960], [1793275991277, 960], [1793275991287, 960], [1793275991297, 960], [1793275991307, 960], [1793275991317, 960], [1793275991327, 960], [1793275991337, 960], [1793275991347, 960], [1793275991357, 960], [1793275991367, 960], [1793275991377, 960], [1793275991387, 960], [1793275991397, 960], [1793275991407, 960], [1793275991417, 960], [1793275991427, 960], [1793275991437, 960], [1793275991447, 960], [1793275991457, 960], [1793275991467, 960], [1793275991477, 960], [1793275991487, 960], [1793275991497, 960], [1793275991507, 960], [1793275991517, 960], [1793275991527, 960], [1793275991537, 960], [1793275991547, 960], [1793275991557, 960], [1793275991567, 960], [1793275991577, 960], [1793275991587, 960], [1793275991597, 960], [1793275991607, 960], [1793275991617, 960], [1793275991627, 960], [1793275991637, 960], [1793275991647, 960], [1793275991657, 960], [1793275991667, 960], [1793275991677, 960], [1793275991687, 960], [1793275991697, 960], [1793275991707, 960], [1793275991717, 960], [1793275991727, 960], [1793275991737, 960], [1793275991747, 960], [1793275991757, 960], [1793275991767, 960], [1793275991777, 960], [1793275991787, 960], [1793275991797, 960], [1793275991807, 960], [1793275991817, 960], [1793275991827, 960], [1793275991837, 960], [1793275991847, 960], [1793275991857, 960], [1793275991867, 960], [1793275991877, 960], [1793275991887, 960], [1793275991897, 960], [1793275991907, 960], [1793275991917, 960], [1793275991927, 960], [1793275991937, 960], [1793275991948, 960], [1793275991957, 960], [1793275991967, 960], [1793275991977, 960], [1793275991988, 960], [1793275991997, 960], [1793275992008, 960], [1793275992017, 960], [1793275992028, 960], [1793275992037, 960], [1793275992048, 960], [1793275992058, 960], [1793275992067, 960], [1793275992077, 960], [1793275992087, 960], [1793275992097, 960], [1793275992108, 960], [1793275992117, 960], [1793275992128, 960], [1793275992138, 960], [1793275992148, 960], [1793275992157, 960], [1793275992168, 960], [1793275992177, 960], [1793275992187, 960], [1793275992197, 960], [1793275992208, 960], [1793275992217, 960], [1793275992228, 960], [1793275992237, 960], [1793275992248, 960], [1793275992257, 960], [1793275992268, 960], [1793275992277, 960], [1793275992288, 960], [1793275992297, 960], [1793275992307, 960], [1793275992317, 960], [1793275992328, 960], [1793275992337, 960], [1793275992347, 960], [1793275992357, 960], [1793275992367, 960], [1793275992377, 960], [1793275992388, 960], [1793275992397, 960], [1793275992408, 960], [1793275992417, 960], [1793275992427, 960], [1793275992437, 960], [1793275992448, 960], [1793275992457, 960], [1793275992467, 960], [1793275992477, 960], [1793275992487, 960], [1793275992497, 960], [1793275992507, 960], [1793275992517, 960], [1793275992527, 960], [1793275992537, 960], [1793275992547, 960], [1793275992557, 960], [1793275992567, 960], [1793275992577, 960], [1793275992588, 960], [1793275992597, 960], [1793275992607, 960], [1793275992617, 960], [1793275992628, 960], [1793275992637, 960], [1793275992647, 960], [1793275992657, 960], [1793275992667, 960], [1793275992677, 960], [1793275992687, 960], [1793275992697, 960], [1793275992707, 960], [1793275992717, 960], [1793275992727, 960], [1793275992737, 960], [1793275992747, 960], [1793275992757, 960], [1793275992768, 960], [1793275992777, 960], [1793275992787, 960], [1793275992797, 960], [1793275992807, 960], [1793275992817, 960], [1793275992827, 960], [1793275992837, 960], [1793275992847, 960], [1793275992858, 960], [1793275992868, 960], [1793275992877, 960], [1793275992887, 960], [1793275992897, 960], [1793275992907, 960], [1793275992917, 960], [1793275992927, 960], [1793275992937, 960], [1793275992947, 960], [1793275992957, 960], [1793275992967, 960], [1793275992977, 960], [1793275992987, 960], [1793275992997, 960], [1793275993007, 960], [1793275993017, 960], [1793275993027, 960], [1793275993037, 960], [1793275993047, 960], [1793275993058, 960], [1793275993067, 960], [1793275993077, 960], [1793275993087, 960], [1793275993097, 960], [1793275993107, 960], [1793275993117, 960], [1793275993127, 960], [1793275993137, 960], [1793275993147, 960], [1793275993157, 960], [1793275993167, 960], [1793275993177, 960], [1793275993187, 960], [1793275993197, 960], [1793275993207, 960], [1793275993217, 960], [1793275993227, 960], [1793275993237, 960], [1793275993247, 960], [1793275993257, 960], [1793275993267, 960], [1793275993277, 960], [1793275993287, 960], [1793275993297, 960], [1793275993307, 960], [1793275993317, 960], [1793275993327, 960], [1793275993337, 960], [1793275993347, 960], [1793275993357, 960], [1793275993367, 960], [1793275993377, 960], [1793275993387, 960], [1793275993397, 960], [1793275993407, 960], [1793275993417, 960], [1793275993427, 960], [1793275993437, 960], [1793275993447, 960], [1793275993458, 960], [1793275993467, 960], [1793275993477, 960], [1793275993487, 960], [1793275993497, 960], [1793275993507, 960], [1793275993517, 960], [1793275993527, 960], [1793275993537, 960], [1793275993548, 960], [1793275993557, 960], [1793275993567, 960], [1793275993577, 960], [1793275993587, 960], [1793275993597, 960], [1793275993607, 960], [1793275993617, 960], [1793275993627, 960], [1793275993637, 960], [1793275993647, 960], [1793275993657, 960], [1793275993667, 960], [1793275993677, 960], [1793275993687, 960], [1793275993697, 960], [1793275993707, 960], [1793275993717, 960], [1793275993727, 960], [1793275993737, 960], [1793275993747, 960], [1793275993757, 960], [1793275993767, 960], [1793275993777, 960], [1793275993787, 960], [1793275993797, 960], [1793275993807, 960], [1793275993817, 960], [1793275993827, 960], [1793275993837, 960], [1793275993847, 960], [1793275993857, 960], [1793275993867, 960], [1793275993877, 960], [1793275993887, 960], [1793275993897, 960], [1793275993907, 960], [1793275993917, 960], [1793275993927, 960], [1793275993937, 960], [1793275993947, 960], [1793275993957, 960], [1793275993967, 960], [1793275993977, 960], [1793275993987, 960], [1793275993997, 960], [1793275994007, 960], [1793275994017, 960], [1793275994027, 960], [1793275994037, 960], [1793275994047, 960], [1793275994057, 960], [1793275994067, 960], [1793275994077, 960], [1793275994087, 960], [1793275994097, 960], [1793275994107, 960], [1793275994117, 960], [1793275994127, 960], [1793275994137, 960], [1793275994147, 960], [1793275994157, 960], [1793275994167, 960], [1793275994177, 960], [1793275994187, 960], [1793275994197, 960], [1793275994207, 960], [1793275994217, 960], [1793275994227, 960], [1793275994237, 960], [1793275994247, 960], [1793275994257, 960], [1793275994267, 960], [1793275994277, 960], [1793275994287, 960], [1793275994297, 960], [1793275994307, 960], [1793275994317, 960], [1793275994327, 960], [1793275994337, 960], [1793275994347, 960], [1793275994357, 960], [1793275994368, 960], [1793275994377, 960], [1793275994387, 960], [1793275994397, 960], [1793275994407, 960], [1793275994417, 960], [1793275994427, 960], [1793275994437, 960], [1793275994447, 960], [1793275994457, 960], [1793275994467, 960], [1793275994477, 960], [1793275994487, 960], [1793275994497, 960], [1793275994507, 960], [1793275994517, 960], [1793275994527, 960], [1793275994537, 960], [1793275994547, 960], [1793275994557, 960], [1793275994567, 960], [1793275994577, 960], [1793275994587, 960], [1793275994597, 960], [1793275994607, 960], [1793275994617, 960], [1793275994627, 960], [1793275994637, 960], [1793275994647, 960], [1793275994657, 960], [1793275994667, 960], [1793275994677, 960], [1793275994687, 960], [1793275994697, 960], [1793275994707, 960], [1793275994717, 960], [1793275994727, 960], [1793275994737, 960], [1793275994747, 960], [1793275994757, 960], [1793275994767, 960], [1793275994777, 960], [1793275994787, 960], [1793275994797, 960], [1793275994807, 960], [1793275994817, 960], [1793275994827, 960], [1793275994837, 960], [1793275994847, 960], [1793275994857, 960], [1793275994867, 960], [1793275994877, 960], [1793275994887, 960], [1793275994897, 960], [1793275994907, 960], [1793275994917, 960], [1793275994927, 960], [1793275994937, 960], [1793275994947, 960], [1793275994957, 960], [1793275994967, 960], [1793275994977, 960], [1793275994987, 960], [1793275994997, 960], [1793275995007, 960], [1793275995017, 960], [1793275995027, 960], [1793275995037, 960], [1793275995047, 960], [1793275995057, 960], [1793275995067, 960], [1793275995078, 960], [1793275995087, 960], [1793275995097, 960], [1793275995107, 960], [1793275995117, 960], [1793275995127, 960], [1793275995137, 960], [1793275995147, 960], [1793275995157, 960], [1793275995167, 960], [1793275995177, 960], [1793275995187, 960], [1793275995197, 960], [1793275995207, 960], [1793275995217, 960], [1793275995227, 960], [1793275995237, 960], [1793275995247, 960], [1793275995257, 960], [1793275995267, 960], [1793275995277, 960], [1793275995287, 960], [1793275995297, 960], [1793275995307, 960], [1793275995317, 960], [1793275995327, 960], [1793275995337, 960], [1793275995347, 960], [1793275995357, 960], [1793275995367, 960], [1793275995377, 960], [1793275995387, 960], [1793275995397, 960], [1793275995407, 960], [1793275995417, 960], [1793275995427, 960], [1793275995437, 960], [1793275995447, 960], [1793275995457, 960], [1793275995467, 960], [1793275995477, 960], [1793275995487, 960], [1793275995497, 960], [1793275995507, 960], [1793275995517, 960], [1793275995527, 960], [1793275995537, 960], [1793275995547, 960], [1793275995557, 960], [1793275995567, 960], [1793275995577, 960], [1793275995587, 960], [1793275995597, 960], [1793275995607, 960], [1793275995617, 960], [1793275995627, 960], [1793275995637, 960], [1793275995647, 960], [1793275995657, 960], [1793275995667, 960], [1793275995677, 960], [1793275995687, 960], [1793275995697, 960], [1793275995707, 960], [1793275995717, 960], [1793275995727, 960], [1793275995737, 960], [1793275995747, 960], [1793275995757, 960], [1793275995767, 960], [1793275995777, 960], [1793275995788, 960], [1793275995797, 960], [1793275995807, 960], [1793275995817, 960], [1793275995827, 960], [1793275995837, 960], [1793275995847, 960], [1793275995857, 960], [1793275995867, 960], [1793275995877, 960], [1793275995887, 960], [1793275995897, 960], [1793275995907, 960], [1793275995917, 960], [1793275995927, 960], [1793275995937, 960], [1793275995947, 960], [1793275995957, 960], [1793275995967, 960], [1793275995977, 960], [1793275995987, 960], [1793275995997, 960], [1793275996007, 960], [1793275996017, 960], [1793275996027, 960], [1793275996037, 960], [1793275996047, 960], [1793275996057, 960], [1793275996067, 960], [1793275996077, 960], [1793275996087, 960], [1793275996097, 960], [1793275996107, 960], [1793275996117, 960], [1793275996127, 960], [1793275996137, 960], [1793275996147, 960], [1793275996157, 960], [1793275996167, 960], [1793275996177, 960], [1793275996187, 960], [1793275996197, 960], [1793275996207, 960], [1793275996217, 960], [1793275996227, 960], [1793275996237, 960], [1793275996247, 960], [1793275996257, 960], [1793275996267, 960], [1793275996277, 960], [1793275996287, 960], [1793275996297, 960], [1793275996307, 960], [1793275996317, 960], [1793275996327, 960], [1793275996337, 960], [1793275996347, 960], [1793275996357, 960], [1793275996367, 960], [1793275996377, 960], [1793275996387, 960], [1793275996397, 960], [1793275996407, 960], [1793275996417, 960], [1793275996427, 960], [1793275996437, 960], [1793275996447, 960], [1793275996457, 960], [1793275996467, 960], [1793275996477, 960], [1793275996487, 960], [1793275996497, 960], [1793275996507, 960], [1793275996517, 960], [1793275996527, 960], [1793275996537, 960], [1793275996547, 960], [1793275996558, 960], [1793275996567, 960], [1793275996577, 960], [1793275996587, 960], [1793275996597, 960], [1793275996607, 960], [1793275996617, 960], [1793275996627, 960], [1793275996637, 960], [1793275996647, 960], [1793275996657, 960], [1793275996667, 960], [1793275996677, 960], [1793275996687, 960], [1793275996698, 960], [1793275996708, 960], [1793275996717, 960], [1793275996727, 960], [1793275996737, 960], [1793275996747, 960], [1793275996757, 960], [1793275996767, 960], [1793275996777, 960], [1793275996787, 960], [1793275996797, 960], [1793275996807, 960], [1793275996817, 960], [1793275996827, 960], [1793275996837, 960], [1793275996847, 960], [1793275996857, 960], [1793275996867, 960], [1793275996877, 960], [1793275996887, 960], [1793275996897, 960], [1793275996907, 960], [1793275996917, 960], [1793275996927, 960], [1793275996939, 960], [1793275996948, 960], [1793275996958, 960], [1793275996967, 960], [1793275996978, 960], [1793275996987, 960], [1793275996997, 960], [1793275997008, 960], [1793275997017, 960], [1793275997028, 960], [1793275997037, 960], [1793275997047, 960], [1793275997057, 960], [1793275997067, 960], [1793275997077, 960], [1793275997087, 960], [1793275997097, 960], [1793275997107, 960], [1793275997117, 960], [1793275997127, 960], [1793275997137, 960], [1793275997147, 960], [1793275997157, 960], [1793275997167, 960], [1793275997178, 960], [1793275997187, 960], [1793275997197, 960], [1793275997207, 960], [1793275997217, 960], [1793275997227, 960], [1793275997237, 960], [1793275997247, 960], [1793275997257, 960], [1793275997267, 960], [1793275997277, 960], [1793275997287, 960], [1793275997297, 960], [1793275997307, 960], [1793275997317, 960], [1793275997328, 960], [1793275997337, 960], [1793275997347, 960], [1793275997357, 960], [1793275997367, 960], [1793275997377, 960], [1793275997387, 960], [1793275997397, 960], [1793275997407, 960], [1793275997418, 960], [1793275997428, 960], [1793275997437, 960], [1793275997448, 960], [1793275997457, 960], [1793275997468, 960], [1793275997478, 960], [1793275997487, 960], [1793275997497, 960], [1793275997507, 960], [1793275997518, 960], [1793275997528, 960], [1793275997537, 960], [1793275997547, 960], [1793275997558, 960], [1793275997568, 960], [1793275997578, 960], [1793275997588, 960], [1793275997598, 960], [1793275997608, 960], [1793275997618, 960], [1793275997627, 960], [1793275997638, 960], [1793275997647, 960], [1793275997657, 960], [1793275997667, 960], [1793275997677, 960], [1793275997688, 960], [1793275997698, 960], [1793275997707, 960], [1793275997718, 960], [1793275997728, 960], [1793275997738, 960], [1793275997747, 960], [1793275997758, 960], [1793275997768, 960], [1793275997777, 960], [1793275997788, 960], [1793275997797, 960], [1793275997807, 960], [1793275997817, 960], [1793275997827, 960], [1793275997838, 960], [1793275997848, 960], [1793275997857, 960], [1793275997868, 960], [1793275997877, 960], [1793275997888, 960], [1793275997898, 960], [1793275997907, 960], [1793275997918, 960], [1793275997927, 960], [1793275997937, 960], [1793275997948, 960], [1793275997958, 960], [1793275997967, 960], [1793275997977, 960], [1793275997988, 960], [1793275997998, 960], [1793275998008, 960], [1793275998018, 960], [1793275998027, 960], [1793275998038, 960], [1793275998048, 960], [1793275998057, 960], [1793275998067, 960], [1793275998077, 960], [1793275998088, 960], [1793275998097, 960], [1793275998107, 960], [1793275998117, 960], [1793275998127, 960], [1793275998137, 960], [1793275998147, 960], [1793275998157, 960], [1793275998167, 960], [1793275998177, 960], [1793275998187, 960], [1793275998197, 960], [1793275998207, 960], [1793275998217, 960], [1793275998228, 960], [1793275998238, 960], [1793275998247, 960], [1793275998257, 960], [1793275998267, 960], [1793275998277, 960], [1793275998287, 960], [1793275998298, 960], [1793275998307, 960], [1793275998317, 960], [1793275998327, 960], [1793275998337, 960], [1793275998347, 960], [1793275998357, 960], [1793275998367, 960], [1793275998377, 960], [1793275998387, 960], [1793275998397, 960], [1793275998407, 960], [1793275998417, 960], [1793275998427, 960], [1793275998437, 960], [1793275998447, 960], [1793275998457, 960], [1793275998467, 960], [1793275998477, 960], [1793275998487, 960], [1793275998497, 960], [1793275998507, 960], [1793275998517, 960], [1793275998527, 960], [1793275998537, 960], [1793275998547, 960], [1793275998557, 960], [1793275998567, 960], [1793275998578, 960], [1793275998587, 960], [1793275998597, 960], [1793275998607, 960], [1793275998617, 960], [1793275998628, 960], [1793275998637, 960], [1793275998648, 960], [1793275998657, 960], [1793275998668, 960], [1793275998678, 960], [1793275998688, 960], [1793275998697, 960], [1793275998708, 960], [1793275998717, 960], [1793275998727, 960], [1793275998737, 960], [1793275998747, 960], [1793275998757, 960], [1793275998767, 960], [1793275998777, 960], [1793275998787, 960], [1793275998797, 960], [1793275998807, 960], [1793275998817, 960], [1793275998827, 960], [1793275998837, 960], [1793275998847, 960], [1793275998857, 960], [1793275998867, 960], [1793275998877, 960], [1793275998887, 960], [1793275998897, 960], [1793275998907, 960], [1793275998917, 960], [1793275998927, 960], [1793275998937, 960], [1793275998947, 960], [1793275998957, 960], [1793275998967, 960], [1793275998977, 960], [1793275998987, 960], [1793275998997, 960], [1793275999007, 960], [1793275999017, 960], [1793275999027, 960], [1793275999037, 960], [1793275999047, 960], [1793275999057, 960], [1793275999067, 960], [1793275999077, 960], [1793275999087, 960], [1793275999097, 960], [1793275999107, 960], [1793275999117, 960], [1793275999127, 960], [1793275999137, 960], [1793275999147, 960], [1793275999157, 960], [1793275999167, 960], [1793275999177, 960], [1793275999187, 960], [1793275999197, 960], [1793275999207, 960], [1793275999217, 960], [1793275999227, 960], [1793275999237, 960], [1793275999247, 960], [1793275999257, 960], [1793275999267, 960], [1793275999277, 960], [1793275999287, 960], [1793275999297, 960], [1793275999307, 960], [1793275999317, 960], [1793275999327, 960], [1793275999337, 960], [1793275999347, 960], [1793275999357, 960], [1793275999367, 960], [1793275999377, 960], [1793275999387, 960], [1793275999397, 960], [1793275999407, 960], [1793275999417, 960], [1793275999427, 960], [1793275999438, 960], [1793275999447, 960], [1793275999457, 960], [1793275999467, 960], [1793275999477, 960], [1793275999487, 960], [1793275999497, 960], [1793275999507, 960], [1793275999517, 960], [1793275999527, 960], [1793275999537, 960], [1793275999548, 960], [1793275999558, 960], [1793275999567, 960], [1793275999577, 960], [1793275999587, 960], [1793275999597, 960], [1793275999607, 960], [1793275999617, 960], [1793275999627, 960], [1793275999637, 960], [1793275999647, 960], [1793275999657, 960], [1793275999667, 960], [1793275999677, 960], [1793275999687, 960], [1793275999697, 960], [1793275999707, 960], [1793275999717, 960], [1793275999727, 960], [1793275999737, 960], [1793275999747, 960], [1793275999757, 960], [1793275999767, 960], [1793275999777, 960], [1793275999787, 960], [1793275999798, 960], [1793275999807, 960], [1793275999817, 960], [1793275999827, 960], [1793275999837, 960], [1793275999847, 960], [1793275999857, 960], [1793275999867, 960], [1793275999877, 960], [1793275999887, 960], [1793275999897, 960], [1793275999907, 960], [1793275999917, 960], [1793275999927, 960], [1793275999937, 960], [1793275999947, 960], [1793275999957, 960], [1793275999967, 960], [1793275999977, 960], [1793275999987, 960], [1793275999997, 960], [1793276000007, 960], [1793276000017, 960], [1793276000027, 960], [1793276000037, 960], [1793276000047, 960], [1793276000057, 960], [1793276000067, 960], [1793276000077, 960], [1793276000087, 960], [1793276000097, 960], [1793276000107, 960], [1793276000117, 960], [1793276000127, 960], [1793276000137, 960], [1793276000147, 960], [1793276000157, 960], [1793276000167, 960], [1793276000177, 960], [1793276000187, 960], [1793276000197, 960], [1793276000207, 960], [1793276000217, 960], [1793276000227, 960], [1793276000237, 960], [1793276000247, 960], [1793276000257, 960], [1793276000267, 960], [1793276000277, 960], [1793276000287, 960], [1793276000297, 960], [1793276000307, 960], [1793276000317, 960], [1793276000327, 960], [1793276000337, 960], [1793276000347, 960], [1793276000357, 960], [1793276000367, 960], [1793276000377, 960], [1793276000387, 960], [1793276000397, 960], [1793276000407, 960], [1793276000417, 960], [1793276000427, 960], [1793276000437, 960], [1793276000447, 960], [1793276000457, 960], [1793276000467, 960], [1793276000477, 960], [1793276000487, 960], [1793276000497, 960], [1793276000507, 960], [1793276000517, 960], [1793276000527, 960], [1793276000537, 960], [1793276000547, 960], [1793276000557, 960], [1793276000567, 960], [1793276000577, 960], [1793276000587, 960], [1793276000597, 960], [1793276000607, 960], [1793276000617, 960], [1793276000627, 960], [1793276000637, 960], [1793276000647, 960], [1793276000657, 960], [1793276000667, 960], [1793276000677, 960], [1793276000687, 960], [1793276000697, 960], [1793276000707, 960], [1793276000717, 960], [1793276000727, 960], [1793276000737, 960], [1793276000747, 960], [1793276000757, 960], [1793276000767, 960], [1793276000777, 960], [1793276000787, 960], [1793276000797, 960], [1793276000807, 960], [1793276000817, 960], [1793276000827, 960], [1793276000837, 960], [1793276000848, 960], [1793276000857, 960], [1793276000867, 960], [1793276000877, 960], [1793276000887, 960], [1793276000897, 960], [1793276000907, 960], [1793276000917, 960], [1793276000927, 960], [1793276000937, 960], [1793276000947, 960], [1793276000957, 960], [1793276000967, 960], [1793276000977, 960], [1793276000987, 960], [1793276000997, 960], [1793276001007, 960], [1793276001017, 960], [1793276001027, 960], [1793276001037, 960], [1793276001047, 960], [1793276001058, 960], [1793276001067, 960], [1793276001077, 960], [1793276001087, 960], [1793276001097, 960], [1793276001107, 960], [1793276001117, 960], [1793276001127, 960], [1793276001137, 960], [1793276001147, 960], [1793276001157, 960], [1793276001167, 960], [1793276001177, 960], [1793276001187, 960], [1793276001197, 960], [1793276001208, 960], [1793276001217, 960], [1793276001227, 960], [1793276001237, 960], [1793276001247, 960], [1793276001258, 960], [1793276001267, 960], [1793276001277, 960], [1793276001287, 960], [1793276001297, 960], [1793276001308, 960], [1793276001317, 960], [1793276001327, 960], [1793276001337, 960], [1793276001348, 960], [1793276001357, 960], [1793276001367, 960], [1793276001377, 960], [1793276001387, 960], [1793276001397, 960], [1793276001407, 960], [1793276001417, 960], [1793276001427, 960], [1793276001437, 960], [1793276001447, 960], [1793276001458, 960], [1793276001467, 960], [1793276001477, 960], [1793276001487, 960], [1793276001497, 960], [1793276001507, 960], [1793276001517, 960], [1793276001527, 960], [1793276001537, 960], [1793276001547, 960], [1793276001557, 960], [1793276001567, 960], [1793276001577, 960], [1793276001587, 960], [1793276001597, 960], [1793276001607, 960], [1793276001617, 960], [1793276001627, 960], [1793276001637, 960], [1793276001648, 960], [1793276001657, 960], [1793276001667, 960], [1793276001677, 960], [1793276001687, 960], [1793276001697, 960], [1793276001707, 960], [1793276001717, 960], [1793276001727, 960], [1793276001737, 960], [1793276001747, 960], [1793276001758, 960], [1793276001768, 960], [1793276001777, 960], [1793276001787, 960], [1793276001797, 960], [1793276001807, 960], [1793276001817, 960], [1793276001827, 960], [1793276001837, 960], [1793276001847, 960], [1793276001857, 960], [1793276001867, 960], [1793276001878, 960], [1793276001887, 960], [1793276001897, 960], [1793276001907, 960], [1793276001917, 960], [1793276001927, 960], [1793276001937, 960], [1793276001948, 960], [1793276001957, 960], [1793276001967, 960], [1793276001977, 960], [1793276001988, 960], [1793276001997, 960], [1793276002007, 960], [1793276002017, 960], [1793276002027, 960], [1793276002037, 960], [1793276002047, 960], [1793276002057, 960], [1793276002067, 960], [1793276002077, 960], [1793276002087, 960], [1793276002097, 960], [1793276002107, 960], [1793276002117, 960], [1793276002127, 960], [1793276002137, 960], [1793276002147, 960], [1793276002157, 960], [1793276002167, 960], [1793276002177, 960], [1793276002187, 960], [1793276002197, 960], [1793276002207, 960], [1793276002217, 960], [1793276002227, 960], [1793276002237, 960], [1793276002247, 960], [1793276002257, 960], [1793276002267, 960], [1793276002277, 960], [1793276002287, 960], [1793276002297, 960], [1793276002307, 960], [1793276002317, 960], [1793276002327, 960], [1793276002337, 960], [1793276002347, 960], [1793276002357, 960], [1793276002367, 960], [1793276002377, 960], [1793276002387, 960], [1793276002397, 960], [1793276002407, 960], [1793276002417, 960], [1793276002427, 960], [1793276002437, 960], [1793276002447, 960], [1793276002457, 960], [1793276002467, 960], [1793276002477, 960], [1793276002487, 960], [1793276002497, 960], [1793276002507, 960], [1793276002517, 960], [1793276002527, 960], [1793276002537, 960], [1793276002547, 960], [1793276002557, 960], [1793276002567, 960], [1793276002577, 960], [1793276002587, 960], [1793276002597, 960], [1793276002607, 960], [1793276002617, 960], [1793276002627, 960], [1793276002637, 960], [1793276002647, 960], [1793276002657, 960], [1793276002667, 960], [1793276002677, 960], [1793276002687, 960], [1793276002697, 960], [1793276002707, 960], [1793276002717, 960], [1793276002727, 960], [1793276002737, 960], [1793276002747, 960], [1793276002757, 960], [1793276002767, 960], [1793276002777, 960], [1793276002787, 960], [1793276002797, 960], [1793276002807, 960], [1793276002817, 960], [1793276002827, 960], [1793276002837, 960], [1793276002847, 960], [1793276002857, 960], [1793276002867, 960], [1793276002877, 960], [1793276002887, 960], [1793276002897, 960], [1793276002907, 960], [1793276002917, 960], [1793276002927, 960], [1793276002937, 960], [1793276002947, 960], [1793276002957, 960], [1793276002967, 960], [1793276002977, 960], [1793276002987, 960], [1793276002997, 960], [1793276003007, 960], [1793276003017, 960], [1793276003027, 960], [1793276003037, 960], [1793276003047, 960], [1793276003057, 960], [1793276003067, 960], [1793276003077, 960], [1793276003087, 960], [1793276003097, 960], [1793276003107, 960], [1793276003117, 960], [1793276003127, 960], [1793276003137, 960], [1793276003147, 960], [1793276003157, 960], [1793276003167, 960], [1793276003177, 960], [1793276003187, 960], [1793276003197, 960], [1793276003207, 960], [1793276003217, 960], [1793276003227, 960], [1793276003237, 960], [1793276003247, 960], [1793276003257, 960], [1793276003267, 960], [1793276003277, 960], [1793276003287, 960], [1793276003297, 960], [1793276003307, 960], [1793276003317, 960], [1793276003327, 960], [1793276003337, 960], [1793276003347, 960], [1793276003357, 960], [1793276003367, 960], [1793276003377, 960], [1793276003387, 960], [1793276003397, 960], [1793276003407, 960], [1793276003417, 960], [1793276003427, 960], [1793276003437, 960], [1793276003447, 960], [1793276003457, 960], [1793276003467, 960], [1793276003477, 960], [1793276003487, 960], [1793276003497, 960], [1793276003507, 960], [1793276003517, 960], [1793276003527, 960], [1793276003537, 960], [1793276003547, 960], [1793276003557, 960], [1793276003567, 960], [1793276003577, 960], [1793276003587, 960], [1793276003597, 960], [1793276003607, 960], [1793276003617, 960], [1793276003627, 960], [1793276003637, 960], [1793276003647, 960], [1793276003657, 960], [1793276003667, 960], [1793276003677, 960], [1793276003687, 960], [1793276003697, 960], [1793276003707, 960], [1793276003717, 960], [1793276003728, 960], [1793276003737, 960], [1793276003747, 960], [1793276003757, 960], [1793276003767, 960], [1793276003777, 960], [1793276003787, 960], [1793276003797, 960], [1793276003807, 960], [1793276003817, 960], [1793276003827, 960], [1793276003837, 960], [1793276003847, 960], [1793276003857, 960], [1793276003867, 960], [1793276003877, 960], [1793276003887, 960], [1793276003897, 960], [1793276003907, 960], [1793276003917, 960], [1793276003927, 960], [1793276003937, 960], [1793276003947, 960], [1793276003957, 960], [1793276003967, 960], [1793276003977, 960], [1793276003987, 960], [1793276003997, 960], [1793276004007, 960], [1793276004017, 960], [1793276004027, 960], [1793276004037, 960], [1793276004047, 960], [1793276004058, 960], [1793276004067, 960], [1793276004077, 960], [1793276004087, 960], [1793276004098, 960], [1793276004107, 960], [1793276004117, 960], [1793276004127, 960], [1793276004137, 960], [1793276004147, 960], [1793276004157, 960], [1793276004167, 960], [1793276004177, 960], [1793276004187, 960], [1793276004197, 960], [1793276004207, 960], [1793276004217, 960], [1793276004227, 960], [1793276004237, 960], [1793276004247, 960], [1793276004258, 960], [1793276004267, 960], [1793276004277, 960], [1793276004287, 960], [1793276004297, 960], [1793276004307, 960], [1793276004317, 960], [1793276004327, 960], [1793276004338, 960], [1793276004347, 960], [1793276004357, 960], [1793276004367, 960], [1793276004377, 960], [1793276004387, 960], [1793276004397, 960], [1793276004407, 960], [1793276004417, 960], [1793276004427, 960], [1793276004437, 960], [1793276004447, 960], [1793276004457, 960], [1793276004467, 960], [1793276004477, 960], [1793276004487, 960], [1793276004497, 960], [1793276004507, 960], [1793276004517, 960], [1793276004527, 960], [1793276004537, 960], [1793276004547, 960], [1793276004557, 960], [1793276004567, 960], [1793276004577, 960], [1793276004587, 960], [1793276004597, 960], [1793276004607, 960], [1793276004617, 960], [1793276004627, 960], [1793276004637, 960], [1793276004647, 960], [1793276004657, 960], [1793276004667, 960], [1793276004677, 960], [1793276004687, 960], [1793276004697, 960], [1793276004707, 960], [1793276004717, 960], [1793276004727, 960], [1793276004737, 960], [1793276004747, 960], [1793276004757, 960], [1793276004767, 960], [1793276004777, 960], [1793276004787, 960], [1793276004797, 960], [1793276004807, 960], [1793276004817, 960], [1793276004827, 960], [1793276004837, 960], [1793276004847, 960], [1793276004857, 960], [1793276004867, 960], [1793276004877, 960], [1793276004887, 960], [1793276004897, 960], [1793276004907, 960], [1793276004917, 960], [1793276004927, 960], [1793276004937, 960], [1793276004947, 960], [1793276004958, 960], [1793276004967, 960], [1793276004977, 960], [1793276004987, 960], [1793276004997, 960], [1793276005007, 960], [1793276005017, 960], [1793276005027, 960], [1793276005037, 960], [1793276005047, 960], [1793276005057, 960], [1793276005067, 960], [1793276005077, 960], [1793276005087, 960], [1793276005097, 960], [1793276005107, 960], [1793276005117, 960], [1793276005127, 960], [1793276005137, 960], [1793276005147, 960], [1793276005157, 960], [1793276005167, 960], [1793276005177, 960], [1793276005187, 960], [1793276005197, 960], [1793276005207, 960], [1793276005217, 960], [1793276005227, 960], [1793276005237, 960], [1793276005247, 960], [1793276005257, 960], [1793276005267, 960], [1793276005277, 960], [1793276005287, 960], [1793276005297, 960], [1793276005307, 960], [1793276005317, 960], [1793276005327, 960], [1793276005337, 960], [1793276005347, 960], [1793276005357, 960], [1793276005367, 960], [1793276005377, 960], [1793276005387, 960], [1793276005397, 960], [1793276005407, 960], [1793276005417, 960], [1793276005427, 960], [1793276005437, 960], [1793276005447, 960], [1793276005457, 960], [1793276005467, 960], [1793276005477, 960], [1793276005487, 960], [1793276005497, 960], [1793276005507, 960], [1793276005517, 960], [1793276005527, 960], [1793276005537, 960], [1793276005547, 960], [1793276005557, 960], [1793276005567, 960], [1793276005577, 960], [1793276005587, 960], [1793276005597, 960], [1793276005607, 960], [1793276005617, 960], [1793276005627, 960], [1793276005637, 960], [1793276005647, 960], [1793276005657, 960], [1793276005667, 960], [1793276005677, 960], [1793276005687, 960], [1793276005697, 960], [1793276005707, 960], [1793276005717, 960], [1793276005727, 960], [1793276005737, 960], [1793276005747, 960], [1793276005757, 960], [1793276005767, 960], [1793276005777, 960], [1793276005787, 960], [1793276005797, 960], [1793276005807, 960], [1793276005817, 960], [1793276005827, 960], [1793276005837, 960], [1793276005847, 960], [1793276005857, 960], [1793276005867, 960], [1793276005877, 960], [1793276005887, 960], [1793276005897, 960], [1793276005907, 960], [1793276005917, 960], [1793276005927, 960], [1793276005937, 960], [1793276005947, 960], [1793276005957, 960], [1793276005967, 960], [1793276005977, 960], [1793276005987, 960], [1793276005997, 960], [1793276006007, 960], [1793276006017, 960], [1793276006027, 960], [1793276006037, 960], [1793276006047, 960], [1793276006057, 960], [1793276006067, 960], [1793276006077, 960], [1793276006087, 960], [1793276006097, 960], [1793276006107, 960], [1793276006117, 960], [1793276006127, 960], [1793276006137, 960], [1793276006147, 960], [1793276006157, 960], [1793276006167, 960], [1793276006177, 960], [1793276006187, 960], [1793276006197, 960], [1793276006207, 960], [1793276006217, 960], [1793276006227, 960], [1793276006237, 960], [1793276006247, 960], [1793276006257, 960], [1793276006267, 960], [1793276006277, 960], [1793276006287, 960], [1793276006297, 960], [1793276006307, 960], [1793276006317, 960], [1793276006327, 960], [1793276006337, 960], [1793276006347, 960], [1793276006358, 960], [1793276006367, 960], [1793276006377, 960], [1793276006387, 960], [1793276006397, 960], [1793276006407, 960], [1793276006417, 960], [1793276006427, 960], [1793276006437, 960], [1793276006447, 960], [1793276006457, 960], [1793276006467, 960], [1793276006477, 960], [1793276006487, 960], [1793276006497, 960], [1793276006507, 960], [1793276006517, 960], [1793276006527, 960], [1793276006537, 960], [1793276006547, 960], [1793276006557, 960], [1793276006567, 960], [1793276006577, 960], [1793276006588, 960], [1793276006598, 960], [1793276006607, 960], [1793276006617, 960], [1793276006627, 960], [1793276006638, 960], [1793276006647, 960], [1793276006657, 960], [1793276006668, 960], [1793276006677, 960], [1793276006687, 960], [1793276006697, 960], [1793276006707, 960], [1793276006717, 960], [1793276006727, 960], [1793276006737, 960], [1793276006747, 960], [1793276006757, 960], [1793276006767, 960], [1793276006777, 960], [1793276006787, 960], [1793276006797, 960], [1793276006807, 960], [1793276006817, 960], [1793276006827, 960], [1793276006838, 960], [1793276006847, 960], [1793276006857, 960], [1793276006867, 960], [1793276006877, 960], [1793276006887, 960], [1793276006897, 960], [1793276006907, 960], [1793276006917, 960], [1793276006927, 960], [1793276006938, 960], [1793276006947, 960], [1793276006957, 960], [1793276006967, 960], [1793276006980, 960], [1793276006987, 960], [1793276006997, 960], [1793276007007, 960], [1793276007017, 960], [1793276007027, 960], [1793276007037, 960], [1793276007047, 960], [1793276007057, 960], [1793276007067, 960], [1793276007078, 960], [1793276007088, 960], [1793276007097, 960], [1793276007107, 960], [1793276007117, 960], [1793276007127, 960], [1793276007137, 960], [1793276007147, 960], [1793276007159, 960], [1793276007167, 960], [1793276007177, 960], [1793276007187, 960], [1793276007198, 960], [1793276007207, 960], [1793276007217, 960], [1793276007227, 960], [1793276007237, 960], [1793276007247, 960], [1793276007257, 960], [1793276007267, 960], [1793276007277, 960], [1793276007287, 960], [1793276007297, 960], [1793276007307, 960], [1793276007317, 960], [1793276007327, 960], [1793276007337, 960], [1793276007347, 960], [1793276007357, 960], [1793276007368, 960], [1793276007377, 960], [1793276007387, 960], [1793276007397, 960], [1793276007407, 960], [1793276007417, 960], [1793276007427, 960], [1793276007437, 960], [1793276007447, 960], [1793276007457, 960], [1793276007467, 960], [1793276007477, 960], [1793276007487, 960], [1793276007497, 960], [1793276007508, 960], [1793276007517, 960], [1793276007528, 960], [1793276007537, 960], [1793276007547, 960], [1793276007557, 960], [1793276007567, 960], [1793276007577, 960], [1793276007587, 960], [1793276007597, 960], [1793276007608, 960], [1793276007617, 960], [1793276007627, 960], [1793276007638, 960], [1793276007647, 960], [1793276007657, 960], [1793276007667, 960], [1793276007677, 960], [1793276007687, 960], [1793276007697, 960], [1793276007707, 960], [1793276007717, 960], [1793276007727, 960], [1793276007737, 960], [1793276007747, 960], [1793276007757, 960], [1793276007767, 960], [1793276007777, 960], [1793276007787, 960], [1793276007797, 960], [1793276007807, 960], [1793276007817, 960], [1793276007827, 960], [1793276007837, 960], [1793276007847, 960], [1793276007858, 960], [1793276007867, 960], [1793276007877, 960], [1793276007887, 960], [1793276007897, 960], [1793276007908, 960], [1793276007918, 960], [1793276007928, 960], [1793276007937, 960], [1793276007948, 960], [1793276007957, 960], [1793276007968, 960], [1793276007977, 960], [1793276007987, 960], [1793276007997, 960], [1793276008007, 960], [1793276008017, 960], [1793276008027, 960], [1793276008038, 960], [1793276008047, 960], [1793276008057, 960], [1793276008067, 960], [1793276008077, 960], [1793276008087, 960], [1793276008097, 960], [1793276008108, 960], [1793276008118, 960], [1793276008127, 960], [1793276008137, 960], [1793276008147, 960], [1793276008157, 960], [1793276008167, 960], [1793276008177, 960], [1793276008187, 960], [1793276008197, 960], [1793276008207, 960], [1793276008217, 960], [1793276008227, 960], [1793276008237, 960], [1793276008247, 960], [1793276008257, 960], [1793276008267, 960], [1793276008277, 960], [1793276008287, 960], [1793276008297, 960], [1793276008307, 960], [1793276008317, 960], [1793276008327, 960], [1793276008337, 960], [1793276008347, 960], [1793276008357, 960], [1793276008367, 960], [1793276008377, 960], [1793276008387, 960], [1793276008397, 960], [1793276008407, 960], [1793276008417, 960], [1793276008427, 960], [1793276008437, 960], [1793276008447, 960], [1793276008458, 960], [1793276008467, 960], [1793276008477, 960], [1793276008487, 960], [1793276008497, 960], [1793276008507, 960], [1793276008519, 960], [1793276008527, 960], [1793276008537, 960], [1793276008547, 960], [1793276008557, 960], [1793276008568, 960], [1793276008577, 960], [1793276008587, 960], [1793276008597, 960], [1793276008608, 960], [1793276008617, 960], [1793276008627, 960], [1793276008637, 960], [1793276008648, 960], [1793276008657, 960], [1793276008667, 960], [1793276008677, 960], [1793276008687, 960], [1793276008697, 960], [1793276008707, 960], [1793276008717, 960], [1793276008727, 960], [1793276008737, 960], [1793276008747, 960], [1793276008757, 960], [1793276008767, 960], [1793276008777, 960], [1793276008787, 960], [1793276008797, 960], [1793276008807, 960], [1793276008817, 960], [1793276008827, 960], [1793276008837, 960], [1793276008847, 960], [1793276008857, 960], [1793276008867, 960], [1793276008877, 960], [1793276008887, 960], [1793276008897, 960], [1793276008907, 960], [1793276008917, 960], [1793276008927, 960], [1793276008937, 960], [1793276008947, 960], [1793276008957, 960], [1793276008967, 960], [1793276008977, 960], [1793276008987, 960], [1793276008997, 960], [1793276009007, 960], [1793276009017, 960], [1793276009027, 960], [1793276009037, 960], [1793276009047, 960], [1793276009057, 960], [1793276009067, 960], [1793276009077, 960], [1793276009087, 960], [1793276009097, 960], [1793276009108, 960], [1793276009117, 960], [1793276009127, 960], [1793276009137, 960], [1793276009147, 960], [1793276009157, 960], [1793276009167, 960], [1793276009177, 960], [1793276009188, 960], [1793276009197, 960], [1793276009208, 960], [1793276009217, 960], [1793276009228, 960], [1793276009237, 960], [1793276009247, 960], [1793276009257, 960], [1793276009267, 960], [1793276009277, 960], [1793276009287, 960], [1793276009297, 960], [1793276009307, 960], [1793276009317, 960], [1793276009327, 960], [1793276009337, 960], [1793276009347, 960], [1793276009357, 960], [1793276009367, 960], [1793276009377, 960], [1793276009387, 960], [1793276009397, 960], [1793276009407, 960], [1793276009417, 960], [1793276009427, 960], [1793276009438, 960], [1793276009447, 960], [1793276009458, 960], [1793276009467, 960], [1793276009477, 960], [1793276009487, 960], [1793276009497, 960], [1793276009507, 960], [1793276009517, 960], [1793276009527, 960], [1793276009537, 960], [1793276009547, 960], [1793276009558, 960], [1793276009567, 960], [1793276009577, 960], [1793276009587, 960], [1793276009597, 960], [1793276009608, 960], [1793276009617, 960], [1793276009628, 960], [1793276009637, 960], [1793276009647, 960], [1793276009658, 960], [1793276009667, 960], [1793276009677, 960], [1793276009687, 960], [1793276009697, 960], [1793276009707, 960], [1793276009717, 960], [1793276009727, 960], [1793276009737, 960], [1793276009747, 960], [1793276009757, 960], [1793276009767, 960], [1793276009777, 960], [1793276009787, 960], [1793276009797, 960], [1793276009807, 960], [1793276009817, 960], [1793276009827, 960], [1793276009837, 960], [1793276009847, 960], [1793276009858, 960], [1793276009867, 960], [1793276009877, 960], [1793276009887, 960], [1793276009897, 960], [1793276009907, 960], [1793276009917, 960], [1793276009927, 960], [1793276009937, 960], [1793276009947, 960], [1793276009957, 960], [1793276009967, 960], [1793276009977, 960], [1793276009987, 960], [1793276009997, 960], [1793276010007, 960], [1793276010017, 960], [1793276010027, 960], [1793276010037, 960], [1793276010047, 960], [1793276010057, 960], [1793276010067, 960], [1793276010077, 960], [1793276010087, 960], [1793276010097, 960], [1793276010107, 960], [1793276010117, 960], [1793276010127, 960], [1793276010137, 960], [1793276010147, 960], [1793276010157, 960], [1793276010167, 960], [1793276010177, 960], [1793276010187, 960], [1793276010197, 960], [1793276010207, 960], [1793276010217, 960], [1793276010227, 960], [1793276010237, 960], [1793276010247, 960], [1793276010257, 960], [1793276010267, 960], [1793276010277, 960], [1793276010287, 960], [1793276010297, 960], [1793276010307, 960], [1793276010317, 960], [1793276010327, 960], [1793276010337, 960], [1793276010347, 960], [1793276010357, 960], [1793276010367, 960], [1793276010377, 960], [1793276010387, 960], [1793276010397, 960], [1793276010407, 960], [1793276010417, 960], [1793276010427, 960], [1793276010437, 960], [1793276010447, 960], [1793276010459, 960], [1793276010468, 960], [1793276010477, 960], [1793276010487, 960], [1793276010497, 960], [1793276010507, 960], [1793276010517, 960], [1793276010527, 960], [1793276010537, 960], [1793276010547, 960], [1793276010557, 960], [1793276010567, 960], [1793276010577, 960], [1793276010587, 960], [1793276010597, 960], [1793276010607, 960], [1793276010617, 960], [1793276010627, 960], [1793276010637, 960], [1793276010647, 960], [1793276010658, 960], [1793276010668, 960], [1793276010677, 960], [1793276010687, 960], [1793276010697, 960], [1793276010707, 960], [1793276010717, 960], [1793276010727, 960], [1793276010737, 960], [1793276010747, 960], [1793276010757, 960], [1793276010767, 960], [1793276010777, 960], [1793276010787, 960], [1793276010797, 960], [1793276010807, 960], [1793276010817, 960], [1793276010827, 960], [1793276010837, 960], [1793276010847, 960], [1793276010857, 960], [1793276010867, 960], [1793276010877, 960], [1793276010887, 960], [1793276010897, 960], [1793276010907, 960], [1793276010917, 960], [1793276010927, 960], [1793276010937, 960], [1793276010947, 960], [1793276010957, 960], [1793276010967, 960], [1793276010977, 960], [1793276010987, 960], [1793276010997, 960], [1793276011007, 960], [1793276011017, 960], [1793276011027, 960], [1793276011037, 960], [1793276011047, 960], [1793276011057, 960], [1793276011067, 960], [1793276011077, 960], [1793276011087, 960], [1793276011097, 960], [1793276011108, 960], [1793276011117, 960], [1793276011127, 960], [1793276011137, 960], [1793276011147, 960], [1793276011157, 960], [1793276011167, 960], [1793276011177, 960], [1793276011187, 960], [1793276011197, 960], [1793276011207, 960], [1793276011217, 960], [1793276011227, 960], [1793276011237, 960], [1793276011247, 960], [1793276011258, 960], [1793276011267, 960], [1793276011277, 960], [1793276011287, 960], [1793276011297, 960], [1793276011307, 960], [1793276011317, 960], [1793276011327, 960], [1793276011337, 960], [1793276011347, 960], [1793276011357, 960], [1793276011367, 960], [1793276011377, 960], [1793276011387, 960], [1793276011397, 960], [1793276011407, 960], [1793276011417, 960], [1793276011427, 960], [1793276011437, 960], [1793276011447, 960], [1793276011457, 960], [1793276011467, 960], [1793276011477, 960], [1793276011487, 960], [1793276011497, 960], [1793276011507, 960], [1793276011517, 960], [1793276011527, 960], [1793276011537, 960], [1793276011547, 960], [1793276011557, 960], [1793276011567, 960], [1793276011577, 960], [1793276011587, 960], [1793276011597, 960], [1793276011607, 960], [1793276011617, 960], [1793276011627, 960], [1793276011637, 960], [1793276011647, 960], [1793276011657, 960], [1793276011667, 960], [1793276011678, 960], [1793276011687, 960], [1793276011697, 960], [1793276011708, 960], [1793276011717, 960], [1793276011727, 960], [1793276011737, 960], [1793276011747, 960], [1793276011757, 960], [1793276011768, 960], [1793276011777, 960], [1793276011787, 960], [1793276011797, 960], [1793276011807, 960], [1793276011817, 960], [1793276011827, 960], [1793276011837, 960], [1793276011847, 960], [1793276011857, 960], [1793276011867, 960], [1793276011877, 960], [1793276011887, 960], [1793276011897, 960], [1793276011907, 960], [1793276011917, 960], [1793276011927, 960], [1793276011937, 960], [1793276011947, 960], [1793276011957, 960], [1793276011967, 960], [1793276011977, 960], [1793276011987, 960], [1793276011997, 960], [1793276012007, 960], [1793276012017, 960], [1793276012027, 960], [1793276012037, 960], [1793276012047, 960], [1793276012057, 960], [1793276012067, 960], [1793276012077, 960], [1793276012087, 960], [1793276012097, 960], [1793276012107, 960], [1793276012117, 960], [1793276012127, 960], [1793276012137, 960], [1793276012147, 960], [1793276012157, 960], [1793276012167, 960], [1793276012177, 960], [1793276012187, 960], [1793276012197, 960], [1793276012207, 960], [1793276012217, 960], [1793276012227, 960], [1793276012237, 960], [1793276012247, 960], [1793276012257, 960], [1793276012267, 960], [1793276012277, 960], [1793276012287, 960], [1793276012297, 960], [1793276012307, 960], [1793276012317, 960], [1793276012327, 960], [1793276012337, 960], [1793276012347, 960], [1793276012357, 960], [1793276012367, 960], [1793276012377, 960], [1793276012387, 960], [1793276012397, 960], [1793276012407, 960], [1793276012417, 960], [1793276012427, 960], [1793276012437, 960], [1793276012447, 960], [1793276012457, 960], [1793276012467, 960], [1793276012477, 960], [1793276012487, 960], [1793276012497, 960], [1793276012507, 960], [1793276012517, 960], [1793276012527, 960], [1793276012537, 960], [1793276012547, 960], [1793276012557, 960], [1793276012567, 960], [1793276012577, 960], [1793276012587, 960], [1793276012597, 960], [1793276012607, 960], [1793276012617, 960], [1793276012627, 960], [1793276012637, 960], [1793276012647, 960], [1793276012658, 960], [1793276012667, 960], [1793276012678, 960], [1793276012687, 960], [1793276012697, 960], [1793276012707, 960], [1793276012717, 960], [1793276012727, 960], [1793276012737, 960], [1793276012747, 960], [1793276012757, 960], [1793276012767, 960], [1793276012777, 960], [1793276012787, 960], [1793276012797, 960], [1793276012807, 960], [1793276012817, 960], [1793276012827, 960], [1793276012837, 960], [1793276012847, 960], [1793276012857, 960], [1793276012867, 960], [1793276012877, 960], [1793276012887, 960], [1793276012897, 960], [1793276012907, 960], [1793276012917, 960], [1793276012927, 960], [1793276012937, 960], [1793276012947, 960], [1793276012957, 960], [1793276012968, 960], [1793276012977, 960], [1793276012988, 960], [1793276012997, 960], [1793276013007, 960], [1793276013017, 960], [1793276013027, 960], [1793276013037, 960], [1793276013047, 960], [1793276013057, 960], [1793276013067, 960], [1793276013077, 960], [1793276013087, 960], [1793276013097, 960], [1793276013107, 960], [1793276013117, 960], [1793276013127, 960], [1793276013137, 960], [1793276013147, 960], [1793276013157, 960], [1793276013167, 960], [1793276013177, 960], [1793276013187, 960], [1793276013197, 960], [1793276013207, 960], [1793276013217, 960], [1793276013227, 960], [1793276013237, 960], [1793276013247, 960], [1793276013257, 960], [1793276013267, 960], [1793276013277, 960], [1793276013287, 960], [1793276013297, 960], [1793276013307, 960], [1793276013317, 960], [1793276013327, 960], [1793276013337, 960], [1793276013347, 960], [1793276013357, 960], [1793276013367, 960], [1793276013377, 960], [1793276013387, 960], [1793276013397, 960], [1793276013407, 960], [1793276013417, 960], [1793276013427, 960], [1793276013437, 960], [1793276013447, 960], [1793276013457, 960], [1793276013467, 960], [1793276013477, 960], [1793276013487, 960], [1793276013497, 960], [1793276013507, 960], [1793276013517, 960], [1793276013527, 960], [1793276013537, 960], [1793276013547, 960], [1793276013557, 960], [1793276013567, 960], [1793276013577, 960], [1793276013587, 960], [1793276013597, 960], [1793276013607, 960], [1793276013617, 960], [1793276013627, 960], [1793276013637, 960], [1793276013647, 960], [1793276013657, 960], [1793276013667, 960], [1793276013677, 960], [1793276013687, 960], [1793276013697, 960], [1793276013707, 960], [1793276013717, 960], [1793276013727, 960], [1793276013737, 960], [1793276013747, 960], [1793276013757, 960], [1793276013767, 960], [1793276013777, 960], [1793276013787, 960], [1793276013797, 960], [1793276013807, 960], [1793276013817, 960], [1793276013827, 960], [1793276013837, 960], [1793276013847, 960], [1793276013857, 960], [1793276013867, 960], [1793276013877, 960], [1793276013887, 960], [1793276013897, 960], [1793276013907, 960], [1793276013917, 960], [1793276013927, 960], [1793276013937, 960], [1793276013947, 960], [1793276013957, 960], [1793276013967, 960], [1793276013977, 960], [1793276013987, 960], [1793276013997, 960], [1793276014007, 960], [1793276014017, 960], [1793276014027, 960], [1793276014037, 960], [1793276014047, 960], [1793276014057, 960], [1793276014067, 960], [1793276014077, 960], [1793276014087, 960], [1793276014097, 960], [1793276014107, 960], [1793276014117, 960], [1793276014127, 960], [1793276014137, 960], [1793276014147, 960], [1793276014157, 960], [1793276014167, 960], [1793276014177, 960], [1793276014187, 960], [1793276014197, 960], [1793276014207, 960], [1793276014217, 960], [1793276014227, 960], [1793276014237, 960], [1793276014247, 960], [1793276014257, 960], [1793276014267, 960], [1793276014277, 960], [1793276014287, 960], [1793276014297, 960], [1793276014307, 960], [1793276014317, 960], [1793276014327, 960], [1793276014337, 960], [1793276014347, 960], [1793276014357, 960], [1793276014367, 960], [1793276014377, 960], [1793276014387, 960], [1793276014397, 960], [1793276014407, 960], [1793276014417, 960], [1793276014427, 960], [1793276014437, 960], [1793276014447, 960], [1793276014457, 960], [1793276014467, 960], [1793276014477, 960], [1793276014487, 960], [1793276014497, 960], [1793276014507, 960], [1793276014517, 960], [1793276014527, 960], [1793276014537, 960], [1793276014547, 960], [1793276014558, 960], [1793276014567, 960], [1793276014577, 960], [1793276014587, 960], [1793276014597, 960], [1793276014607, 960], [1793276014617, 960], [1793276014627, 960], [1793276014637, 960], [1793276014647, 960], [1793276014657, 960], [1793276014667, 960], [1793276014677, 960], [1793276014687, 960], [1793276014698, 960], [1793276014707, 960], [1793276014717, 960], [1793276014727, 960], [1793276014737, 960], [1793276014747, 960], [1793276014757, 960], [1793276014767, 960], [1793276014777, 960], [1793276014787, 960], [1793276014797, 960], [1793276014807, 960], [1793276014817, 960], [1793276014827, 960], [1793276014837, 960], [1793276014847, 960], [1793276014857, 960], [1793276014867, 960], [1793276014877, 960], [1793276014887, 960], [1793276014897, 960], [1793276014907, 960], [1793276014917, 960], [1793276014927, 960], [1793276014937, 960], [1793276014947, 960], [1793276014957, 960], [1793276014967, 960], [1793276014977, 960], [1793276014987, 960], [1793276014997, 960], [1793276015007, 960], [1793276015017, 960], [1793276015027, 960], [1793276015037, 960], [1793276015047, 960], [1793276015057, 960], [1793276015067, 960], [1793276015077, 960], [1793276015087, 960], [1793276015097, 960], [1793276015107, 960], [1793276015117, 960], [1793276015127, 960], [1793276015137, 960], [1793276015147, 960], [1793276015157, 960], [1793276015167, 960], [1793276015177, 960], [1793276015187, 960], [1793276015197, 960], [1793276015207, 960], [1793276015217, 960], [1793276015227, 960], [1793276015237, 960], [1793276015247, 960], [1793276015257, 960], [1793276015267, 960], [1793276015277, 960], [1793276015287, 960], [1793276015297, 960], [1793276015307, 960], [1793276015317, 960], [1793276015327, 960], [1793276015337, 960], [1793276015347, 960], [1793276015357, 960], [1793276015367, 960], [1793276015377, 960], [1793276015387, 960], [1793276015397, 960], [1793276015407, 960], [1793276015417, 960], [1793276015427, 960], [1793276015437, 960], [1793276015447, 960], [1793276015457, 960], [1793276015467, 960], [1793276015477, 960], [1793276015487, 960], [1793276015497, 960], [1793276015507, 960], [1793276015517, 960], [1793276015527, 960], [1793276015537, 960], [1793276015547, 960], [1793276015557, 960], [1793276015567, 960], [1793276015577, 960], [1793276015587, 960], [1793276015597, 960], [1793276015607, 960], [1793276015617, 960], [1793276015627, 960], [1793276015637, 960], [1793276015647, 960], [1793276015657, 960], [1793276015667, 960], [1793276015677, 960], [1793276015687, 960], [1793276015697, 960], [1793276015707, 960], [1793276015717, 960], [1793276015727, 960], [1793276015737, 960], [1793276015747, 960], [1793276015757, 960], [1793276015767, 960], [1793276015777, 960], [1793276015787, 960], [1793276015797, 960], [1793276015807, 960], [1793276015817, 960], [1793276015828, 960], [1793276015837, 960], [1793276015847, 960], [1793276015857, 960], [1793276015867, 960], [1793276015877, 960], [1793276015887, 960], [1793276015897, 960], [1793276015908, 960], [1793276015917, 960], [1793276015928, 960], [1793276015937, 960], [1793276015947, 960], [1793276015957, 960], [1793276015967, 960], [1793276015977, 960], [1793276015987, 960], [1793276015997, 960], [1793276016007, 960], [1793276016017, 960], [1793276016027, 960], [1793276016037, 960], [1793276016047, 960], [1793276016057, 960], [1793276016067, 960], [1793276016077, 960], [1793276016087, 960], [1793276016097, 960], [1793276016107, 960], [1793276016117, 960], [1793276016127, 960], [1793276016137, 960], [1793276016147, 960], [1793276016157, 960], [1793276016167, 960], [1793276016177, 960], [1793276016187, 960], [1793276016197, 960], [1793276016207, 960], [1793276016217, 960], [1793276016227, 960], [1793276016237, 960], [1793276016247, 960], [1793276016257, 960], [1793276016267, 960], [1793276016277, 960], [1793276016287, 960], [1793276016297, 960], [1793276016307, 960], [1793276016317, 960], [1793276016327, 960], [1793276016337, 960], [1793276016347, 960], [1793276016357, 960], [1793276016367, 960], [1793276016377, 960], [1793276016387, 960], [1793276016397, 960], [1793276016407, 960], [1793276016417, 960], [1793276016427, 960], [1793276016438, 960], [1793276016447, 960], [1793276016457, 960], [1793276016467, 960], [1793276016477, 960], [1793276016487, 960], [1793276016497, 960], [1793276016507, 960], [1793276016517, 960], [1793276016527, 960], [1793276016537, 960], [1793276016547, 960], [1793276016557, 960], [1793276016567, 960], [1793276016577, 960], [1793276016587, 960], [1793276016597, 960], [1793276016607, 960], [1793276016617, 960], [1793276016627, 960], [1793276016637, 960], [1793276016647, 960], [1793276016657, 960], [1793276016667, 960], [1793276016677, 960], [1793276016687, 960], [1793276016697, 960], [1793276016707, 960], [1793276016717, 960], [1793276016727, 960], [1793276016737, 960], [1793276016747, 960], [1793276016757, 960], [1793276016767, 960], [1793276016777, 960], [1793276016787, 960], [1793276016797, 960], [1793276016807, 960], [1793276016817, 960], [1793276016827, 960], [1793276016837, 960], [1793276016847, 960], [1793276016857, 960], [1793276016867, 960], [1793276016877, 960], [1793276016887, 960], [1793276016897, 960], [1793276016907, 960], [1793276016917, 960], [1793276016927, 960], [1793276016937, 960], [1793276016947, 960], [1793276016957, 960], [1793276016967, 960], [1793276016977, 960], [1793276016987, 960], [1793276016997, 960], [1793276017007, 960], [1793276017017, 960], [1793276017027, 960], [1793276017037, 960], [1793276017047, 960], [1793276017057, 960], [1793276017067, 960], [1793276017077, 960], [1793276017087, 960], [1793276017098, 960], [1793276017107, 960], [1793276017117, 960], [1793276017127, 960], [1793276017137, 960], [1793276017147, 960], [1793276017157, 960], [1793276017167, 960], [1793276017177, 960], [1793276017187, 960], [1793276017197, 960], [1793276017207, 960], [1793276017217, 960], [1793276017227, 960], [1793276017237, 960], [1793276017247, 960], [1793276017257, 960], [1793276017267, 960], [1793276017277, 960], [1793276017287, 960], [1793276017297, 960], [1793276017307, 960], [1793276017317, 960], [1793276017327, 960], [1793276017337, 960], [1793276017347, 960], [1793276017357, 960], [1793276017367, 960], [1793276017377, 960], [1793276017387, 960], [1793276017397, 960], [1793276017407, 960], [1793276017417, 960], [1793276017427, 960], [1793276017437, 960], [1793276017447, 960], [1793276017457, 960], [1793276017467, 960], [1793276017477, 960], [1793276017487, 960], [1793276017497, 960], [1793276017507, 960], [1793276017517, 960], [1793276017527, 960], [1793276017537, 960], [1793276017547, 960], [1793276017557, 960], [1793276017567, 960], [1793276017577, 960], [1793276017587, 960], [1793276017597, 960], [1793276017607, 960], [1793276017617, 960], [1793276017627, 960], [1793276017637, 960], [1793276017647, 960], [1793276017657, 960], [1793276017667, 960], [1793276017677, 960], [1793276017687, 960], [1793276017697, 960], [1793276017707, 960], [1793276017717, 960], [1793276017727, 960], [1793276017737, 960], [1793276017747, 960], [1793276017757, 960], [1793276017767, 960], [1793276017777, 960], [1793276017787, 960], [1793276017797, 960], [1793276017807, 960], [1793276017817, 960], [1793276017827, 960], [1793276017837, 960], [1793276017847, 960], [1793276017857, 960], [1793276017867, 960], [1793276017877, 960], [1793276017887, 960], [1793276017897, 960], [1793276017907, 960], [1793276017917, 960], [1793276017927, 960], [1793276017937, 960], [1793276017947, 960], [1793276017957, 960], [1793276017967, 960], [1793276017977, 960], [1793276017987, 960], [1793276017997, 960], [1793276018007, 960], [1793276018017, 960], [1793276018027, 960], [1793276018037, 960], [1793276018047, 960], [1793276018057, 960], [1793276018067, 960], [1793276018077, 960], [1793276018087, 960], [1793276018097, 960], [1793276018107, 960], [1793276018117, 960], [1793276018127, 960], [1793276018137, 960], [1793276018147, 960], [1793276018157, 960], [1793276018167, 960], [1793276018177, 960], [1793276018187, 960], [1793276018197, 960], [1793276018207, 960], [1793276018217, 960], [1793276018227, 960], [1793276018237, 960], [1793276018247, 960], [1793276018257, 960], [1793276018267, 960], [1793276018277, 960], [1793276018287, 960], [1793276018297, 960], [1793276018307, 960], [1793276018317, 960], [1793276018327, 960], [1793276018337, 960], [1793276018347, 960], [1793276018357, 960], [1793276018367, 960], [1793276018377, 960], [1793276018387, 960], [1793276018397, 960], [1793276018408, 960], [1793276018417, 960], [1793276018428, 960], [1793276018437, 960], [1793276018448, 960], [1793276018457, 960], [1793276018467, 960], [1793276018477, 960], [1793276018487, 960], [1793276018497, 960], [1793276018507, 960], [1793276018517, 960], [1793276018527, 960], [1793276018537, 960], [1793276018547, 960], [1793276018558, 960], [1793276018567, 960], [1793276018577, 960], [1793276018587, 960], [1793276018597, 960], [1793276018607, 960], [1793276018617, 960], [1793276018627, 960], [1793276018637, 960], [1793276018647, 960], [1793276018657, 960], [1793276018667, 960], [1793276018677, 960], [1793276018687, 960], [1793276018697, 960], [1793276018707, 960], [1793276018718, 960], [1793276018727, 960], [1793276018738, 960], [1793276018747, 960], [1793276018757, 960], [1793276018767, 960], [1793276018777, 960], [1793276018787, 960], [1793276018797, 960], [1793276018807, 960], [1793276018817, 960], [1793276018827, 960], [1793276018837, 960], [1793276018847, 960], [1793276018857, 960], [1793276018867, 960], [1793276018877, 960], [1793276018887, 960], [1793276018897, 960], [1793276018907, 960], [1793276018917, 960], [1793276018927, 960], [1793276018937, 960], [1793276018947, 960], [1793276018957, 960], [1793276018967, 960], [1793276018977, 960], [1793276018987, 960], [1793276018997, 960], [1793276019007, 960], [1793276019017, 960], [1793276019027, 960], [1793276019037, 960], [1793276019047, 960], [1793276019057, 960], [1793276019067, 960], [1793276019077, 960], [1793276019087, 960], [1793276019097, 960], [1793276019107, 960], [1793276019117, 960], [1793276019127, 960], [1793276019137, 960], [1793276019147, 960], [1793276019157, 960], [1793276019167, 960], [1793276019177, 960], [1793276019187, 960], [1793276019197, 960], [1793276019207, 960], [1793276019217, 960], [1793276019227, 960], [1793276019237, 960], [1793276019247, 960], [1793276019257, 960], [1793276019267, 960], [1793276019277, 960], [1793276019287, 960], [1793276019297, 960], [1793276019307, 960], [1793276019317, 960], [1793276019327, 960], [1793276019337, 960], [1793276019347, 960], [1793276019357, 960], [1793276019367, 960], [1793276019377, 960], [1793276019387, 960], [1793276019397, 960], [1793276019407, 960], [1793276019417, 960], [1793276019427, 960], [1793276019437, 960], [1793276019447, 960], [1793276019457, 960], [1793276019467, 960], [1793276019477, 960], [1793276019487, 960], [1793276019497, 960], [1793276019507, 960], [1793276019517, 960], [1793276019527, 960], [1793276019537, 960], [1793276019547, 960], [1793276019557, 960], [1793276019567, 960], [1793276019577, 960], [1793276019587, 960], [1793276019597, 960], [1793276019607, 960], [1793276019617, 960], [1793276019627, 960], [1793276019637, 960], [1793276019647, 960], [1793276019657, 960], [1793276019667, 960], [1793276019677, 960], [1793276019687, 960], [1793276019697, 960], [1793276019707, 960], [1793276019717, 960], [1793276019727, 960], [1793276019737, 960], [1793276019747, 960], [1793276019757, 960], [1793276019767, 960], [1793276019777, 960], [1793276019787, 960], [1793276019797, 960], [1793276019807, 960], [1793276019817, 960], [1793276019827, 960], [1793276019837, 960], [1793276019847, 960], [1793276019857, 960], [1793276019867, 960], [1793276019877, 960], [1793276019887, 960], [1793276019897, 960], [1793276019907, 960], [1793276019917, 960], [1793276019927, 960], [1793276019937, 960], [1793276019947, 960], [1793276019957, 960], [1793276019967, 960], [1793276019977, 960], [1793276019987, 960], [1793276019997, 960], [1793276020007, 960], [1793276020017, 960], [1793276020027, 960], [1793276020037, 960], [1793276020047, 960], [1793276020057, 960], [1793276020067, 960], [1793276020077, 960], [1793276020087, 960], [1793276020097, 960], [1793276020107, 960], [1793276020117, 960], [1793276020127, 960], [1793276020137, 960], [1793276020147, 960], [1793276020157, 960], [1793276020167, 960], [1793276020177, 960], [1793276020187, 960], [1793276020197, 960], [1793276020207, 960], [1793276020217, 960], [1793276020227, 960], [1793276020238, 960], [1793276020247, 960], [1793276020257, 960], [1793276020267, 960], [1793276020277, 960], [1793276020287, 960], [1793276020297, 960], [1793276020307, 960], [1793276020317, 960], [1793276020327, 960], [1793276020337, 960], [1793276020347, 960], [1793276020357, 960], [1793276020367, 960], [1793276020377, 960], [1793276020387, 960], [1793276020397, 960], [1793276020407, 960], [1793276020417, 960], [1793276020427, 960], [1793276020437, 960], [1793276020447, 960], [1793276020457, 960], [1793276020467, 960], [1793276020477, 960], [1793276020487, 960], [1793276020497, 960], [1793276020507, 960], [1793276020517, 960], [1793276020527, 960], [1793276020537, 960], [1793276020547, 960], [1793276020557, 960], [1793276020567, 960], [1793276020577, 960], [1793276020587, 960], [1793276020597, 960], [1793276020607, 960], [1793276020617, 960], [1793276020627, 960], [1793276020637, 960], [1793276020647, 960], [1793276020657, 960], [1793276020667, 960], [1793276020677, 960], [1793276020687, 960], [1793276020697, 960], [1793276020707, 960], [1793276020717, 960], [1793276020727, 960], [1793276020737, 960], [1793276020747, 960], [1793276020757, 960], [1793276020767, 960], [1793276020777, 960], [1793276020787, 960], [1793276020797, 960], [1793276020807, 960], [1793276020817, 960], [1793276020827, 960], [1793276020837, 960], [1793276020847, 960], [1793276020857, 960], [1793276020867, 960], [1793276020877, 960], [1793276020887, 960], [1793276020897, 960], [1793276020907, 960], [1793276020917, 960], [1793276020927, 960], [1793276020937, 960], [1793276020947, 960], [1793276020957, 960], [1793276020967, 960], [1793276020977, 960], [1793276020987, 960], [1793276020997, 960], [1793276021007, 960], [1793276021017, 960], [1793276021027, 960], [1793276021037, 960], [1793276021047, 960], [1793276021057, 960], [1793276021067, 960], [1793276021077, 960], [1793276021087, 960], [1793276021097, 960], [1793276021107, 960], [1793276021117, 960], [1793276021127, 960], [1793276021137, 960], [1793276021147, 960], [1793276021157, 960], [1793276021167, 960], [1793276021177, 960], [1793276021187, 960], [1793276021197, 960], [1793276021207, 960], [1793276021217, 960], [1793276021227, 960], [1793276021237, 960], [1793276021247, 960], [1793276021257, 960], [1793276021267, 960], [1793276021277, 960], [1793276021287, 960], [1793276021297, 960], [1793276021307, 960], [1793276021317, 960], [1793276021327, 960], [1793276021337, 960], [1793276021347, 960], [1793276021357, 960], [1793276021367, 960], [1793276021377, 960], [1793276021387, 960], [1793276021397, 960], [1793276021407, 960], [1793276021417, 960], [1793276021427, 960], [1793276021437, 960], [1793276021447, 960], [1793276021457, 960], [1793276021467, 960], [1793276021477, 960], [1793276021487, 960], [1793276021497, 960], [1793276021507, 960], [1793276021517, 960], [1793276021527, 960], [1793276021537, 960], [1793276021547, 960], [1793276021557, 960], [1793276021567, 960], [1793276021577, 960], [1793276021587, 960], [1793276021597, 960], [1793276021607, 960], [1793276021617, 960], [1793276021627, 960], [1793276021637, 960], [1793276021647, 960], [1793276021657, 960], [1793276021667, 960], [1793276021677, 960], [1793276021687, 960], [1793276021697, 960], [1793276021707, 960], [1793276021717, 960], [1793276021727, 960], [1793276021737, 960], [1793276021747, 960], [1793276021757, 960], [1793276021767, 960], [1793276021777, 960], [1793276021787, 960], [1793276021797, 960], [1793276021807, 960], [1793276021817, 960], [1793276021827, 960], [1793276021837, 960], [1793276021847, 960], [1793276021858, 960], [1793276021867, 960], [1793276021877, 960], [1793276021887, 960], [1793276021897, 960], [1793276021907, 960], [1793276021917, 960], [1793276021927, 960], [1793276021938, 960], [1793276021947, 960], [1793276021957, 960], [1793276021967, 960], [1793276021977, 960], [1793276021987, 960], [1793276021997, 960], [1793276022007, 960], [1793276022017, 960], [1793276022027, 960], [1793276022037, 960], [1793276022047, 960], [1793276022057, 960], [1793276022067, 960], [1793276022077, 960], [1793276022087, 960], [1793276022097, 960], [1793276022107, 960], [1793276022117, 960], [1793276022127, 960], [1793276022137, 960], [1793276022147, 960], [1793276022157, 960], [1793276022167, 960], [1793276022177, 960], [1793276022187, 960], [1793276022197, 960], [1793276022207, 960], [1793276022217, 960], [1793276022227, 960], [1793276022237, 960], [1793276022247, 960], [1793276022257, 960], [1793276022267, 960], [1793276022277, 960], [1793276022287, 960], [1793276022297, 960], [1793276022307, 960], [1793276022317, 960], [1793276022327, 960], [1793276022337, 960], [1793276022347, 960], [1793276022357, 960], [1793276022367, 960], [1793276022377, 960], [1793276022387, 960], [1793276022397, 960], [1793276022407, 960], [1793276022417, 960], [1793276022427, 960], [1793276022437, 960], [1793276022447, 960], [1793276022457, 960], [1793276022467, 960], [1793276022477, 960], [1793276022487, 960], [1793276022497, 960], [1793276022507, 960], [1793276022517, 960], [1793276022527, 960], [1793276022537, 960], [1793276022547, 960], [1793276022557, 960], [1793276022567, 960], [1793276022577, 960], [1793276022587, 960], [1793276022597, 960], [1793276022607, 960], [1793276022617, 960], [1793276022627, 960], [1793276022639, 960], [1793276022649, 960], [1793276022657, 960], [1793276022667, 960], [1793276022677, 960], [1793276022687, 960], [1793276022697, 960], [1793276022707, 960], [1793276022717, 960], [1793276022727, 960], [1793276022737, 960], [1793276022747, 960], [1793276022757, 960], [1793276022767, 960], [1793276022777, 960], [1793276022787, 960], [1793276022797, 960], [1793276022807, 960], [1793276022817, 960], [1793276022827, 960], [1793276022837, 960], [1793276022847, 960], [1793276022857, 960], [1793276022867, 960], [1793276022877, 960], [1793276022887, 960], [1793276022897, 960], [1793276022907, 960], [1793276022917, 960], [1793276022927, 960], [1793276022937, 960], [1793276022947, 960], [1793276022957, 960], [1793276022967, 960], [1793276022977, 960], [1793276022987, 960], [1793276022997, 960], [1793276023007, 960], [1793276023017, 960], [1793276023027, 960], [1793276023037, 960], [1793276023047, 960], [1793276023057, 960], [1793276023067, 960], [1793276023077, 960], [1793276023087, 960], [1793276023097, 960], [1793276023107, 960], [1793276023117, 960], [1793276023127, 960], [1793276023137, 960], [1793276023147, 960], [1793276023157, 960], [1793276023167, 960], [1793276023177, 960], [1793276023187, 960], [1793276023197, 960], [1793276023207, 960], [1793276023217, 960], [1793276023227, 960], [1793276023237, 960], [1793276023247, 960], [1793276023257, 960], [1793276023267, 960], [1793276023277, 960], [1793276023287, 960], [1793276023297, 960], [1793276023307, 960], [1793276023317, 960], [1793276023327, 960], [1793276023337, 960], [1793276023347, 960], [1793276023357, 960], [1793276023367, 960], [1793276023377, 960], [1793276023387, 960], [1793276023397, 960], [1793276023407, 960], [1793276023417, 960], [1793276023427, 960], [1793276023437, 960], [1793276023447, 960], [1793276023457, 960], [1793276023467, 960], [1793276023477, 960], [1793276023487, 960], [1793276023497, 960], [1793276023507, 960], [1793276023517, 960], [1793276023527, 960], [1793276023537, 960], [1793276023547, 960], [1793276023557, 960], [1793276023567, 960], [1793276023577, 960], [1793276023587, 960], [1793276023597, 960], [1793276023607, 960], [1793276023617, 960], [1793276023627, 960], [1793276023637, 960], [1793276023647, 960], [1793276023657, 960], [1793276023667, 960], [1793276023677, 960], [1793276023687, 960], [1793276023697, 960], [1793276023707, 960], [1793276023717, 960], [1793276023727, 960], [1793276023737, 960], [1793276023747, 960], [1793276023757, 960], [1793276023767, 960], [1793276023777, 960], [1793276023787, 960], [1793276023797, 960], [1793276023807, 960], [1793276023817, 960], [1793276023827, 960], [1793276023837, 960], [1793276023847, 960], [1793276023857, 960], [1793276023867, 960], [1793276023877, 960], [1793276023887, 960], [1793276023897, 960], [1793276023907, 960], [1793276023917, 960], [1793276023927, 960], [1793276023937, 960], [1793276023947, 960], [1793276023957, 960], [1793276023967, 960], [1793276023977, 960], [1793276023987, 960], [1793276023997, 960], [1793276024007, 960], [1793276024017, 960], [1793276024027, 960], [1793276024037, 960], [1793276024047, 960], [1793276024057, 960], [1793276024067, 960], [1793276024077, 960], [1793276024087, 960], [1793276024097, 960], [1793276024107, 960], [1793276024117, 960], [1793276024127, 960], [1793276024137, 960], [1793276024147, 960], [1793276024157, 960], [1793276024167, 960], [1793276024177, 960], [1793276024187, 960], [1793276024197, 960], [1793276024207, 960], [1793276024217, 960], [1793276024227, 960], [1793276024237, 960], [1793276024247, 960], [1793276024257, 960], [1793276024267, 960], [1793276024277, 960], [1793276024287, 960], [1793276024297, 960], [1793276024307, 960], [1793276024317, 960], [1793276024327, 960], [1793276024337, 960], [1793276024347, 960], [1793276024357, 960], [1793276024367, 960], [1793276024377, 960], [1793276024387, 960], [1793276024397, 960], [1793276024407, 960], [1793276024417, 960], [1793276024427, 960], [1793276024437, 960], [1793276024447, 960], [1793276024457, 960], [1793276024467, 960], [1793276024477, 960], [1793276024487, 960], [1793276024497, 960], [1793276024507, 960], [1793276024517, 960], [1793276024527, 960], [1793276024537, 960], [1793276024547, 960], [1793276024557, 960], [1793276024567, 960], [1793276024577, 960], [1793276024587, 960], [1793276024597, 960], [1793276024607, 960], [1793276024617, 960], [1793276024627, 960], [1793276024637, 960], [1793276024647, 960], [1793276024657, 960], [1793276024667, 960], [1793276024677, 960], [1793276024687, 960], [1793276024697, 960], [1793276024707, 960], [1793276024717, 960], [1793276024727, 960], [1793276024737, 960], [1793276024747, 960], [1793276024757, 960], [1793276024767, 960], [1793276024777, 960], [1793276024788, 960], [1793276024797, 960], [1793276024808, 960], [1793276024817, 960], [1793276024827, 960], [1793276024837, 960], [1793276024847, 960], [1793276024857, 960], [1793276024867, 960], [1793276024877, 960], [1793276024887, 960], [1793276024897, 960], [1793276024907, 960], [1793276024917, 960], [1793276024927, 960], [1793276024937, 960], [1793276024947, 960], [1793276024957, 960], [1793276024967, 960], [1793276024977, 960], [1793276024987, 960], [1793276024997, 960], [1793276025007, 960], [1793276025017, 960], [1793276025027, 960], [1793276025037, 960], [1793276025047, 960], [1793276025057, 960], [1793276025067, 960], [1793276025077, 960], [1793276025087, 960], [1793276025097, 960], [1793276025107, 960], [1793276025117, 960], [1793276025127, 960], [1793276025137, 960], [1793276025147, 960], [1793276025157, 960], [1793276025167, 960], [1793276025177, 960], [1793276025187, 960], [1793276025197, 960], [1793276025207, 960], [1793276025217, 960], [1793276025227, 960], [1793276025238, 960], [1793276025247, 960], [1793276025257, 960], [1793276025267, 960], [1793276025277, 960], [1793276025287, 960], [1793276025297, 960], [1793276025307, 960], [1793276025317, 960], [1793276025327, 960], [1793276025337, 960], [1793276025347, 960], [1793276025357, 960], [1793276025367, 960], [1793276025377, 960], [1793276025387, 960], [1793276025397, 960], [1793276025407, 960], [1793276025417, 960], [1793276025427, 960], [1793276025437, 960], [1793276025447, 960], [1793276025457, 960], [1793276025467, 960], [1793276025477, 960], [1793276025487, 960], [1793276025497, 960], [1793276025507, 960], [1793276025517, 960], [1793276025527, 960], [1793276025537, 960], [1793276025547, 960], [1793276025557, 960], [1793276025567, 960], [1793276025577, 960], [1793276025587, 960], [1793276025597, 960], [1793276025607, 960], [1793276025617, 960], [1793276025627, 960], [1793276025637, 960], [1793276025647, 960], [1793276025657, 960], [1793276025667, 960], [1793276025677, 960], [1793276025687, 960], [1793276025697, 960], [1793276025707, 960], [1793276025717, 960], [1793276025727, 960], [1793276025737, 960], [1793276025747, 960], [1793276025757, 960], [1793276025767, 960], [1793276025777, 960], [1793276025787, 960], [1793276025797, 960], [1793276025807, 960], [1793276025817, 960], [1793276025827, 960], [1793276025837, 960], [1793276025847, 960], [1793276025857, 960], [1793276025867, 960], [1793276025877, 960], [1793276025887, 960], [1793276025897, 960], [1793276025907, 960], [1793276025917, 960], [1793276025927, 960], [1793276025937, 960], [1793276025947, 960], [1793276025957, 960], [1793276025967, 960], [1793276025977, 960], [1793276025987, 960], [1793276025997, 960], [1793276026007, 960], [1793276026017, 960], [1793276026027, 960], [1793276026037, 960], [1793276026047, 960], [1793276026057, 960], [1793276026067, 960], [1793276026077, 960], [1793276026087, 960], [1793276026097, 960], [1793276026107, 960], [1793276026117, 960], [1793276026127, 960], [1793276026137, 960], [1793276026147, 960], [1793276026157, 960], [1793276026167, 960], [1793276026177, 960], [1793276026187, 960], [1793276026197, 960], [1793276026207, 960], [1793276026217, 960], [1793276026227, 960], [1793276026237, 960], [1793276026247, 960], [1793276026257, 960], [1793276026267, 960], [1793276026277, 960], [1793276026287, 960], [1793276026297, 960], [1793276026308, 960], [1793276026317, 960], [1793276026327, 960], [1793276026337, 960], [1793276026348, 960], [1793276026357, 960], [1793276026368, 960], [1793276026377, 960], [1793276026388, 960], [1793276026397, 960], [1793276026408, 960], [1793276026417, 960], [1793276026428, 960], [1793276026437, 960], [1793276026448, 960], [1793276026457, 960], [1793276026467, 960], [1793276026477, 960], [1793276026487, 960], [1793276026497, 960], [1793276026508, 960], [1793276026517, 960], [1793276026527, 960], [1793276026537, 960], [1793276026547, 960], [1793276026557, 960], [1793276026567, 960], [1793276026577, 960], [1793276026587, 960], [1793276026597, 960], [1793276026607, 960], [1793276026617, 960], [1793276026627, 960], [1793276026637, 960], [1793276026647, 960], [1793276026657, 960], [1793276026667, 960], [1793276026677, 960], [1793276026687, 960], [1793276026697, 960], [1793276026707, 960], [1793276026717, 960], [1793276026727, 960], [1793276026737, 960], [1793276026747, 960], [1793276026757, 960], [1793276026767, 960], [1793276026777, 960], [1793276026787, 960], [1793276026797, 960], [1793276026807, 960], [1793276026817, 960], [1793276026827, 960], [1793276026837, 960], [1793276026847, 960], [1793276026857, 960], [1793276026867, 960], [1793276026877, 960], [1793276026887, 960], [1793276026897, 960], [1793276026907, 960], [1793276026917, 960], [1793276026927, 960], [1793276026937, 960], [1793276026947, 960], [1793276026957, 960], [1793276026967, 960], [1793276026977, 960], [1793276026987, 960], [1793276026997, 960], [1793276027007, 960], [1793276027017, 960], [1793276027027, 960], [1793276027037, 960], [1793276027047, 960], [1793276027057, 960], [1793276027068, 960], [1793276027077, 960], [1793276027087, 960], [1793276027097, 960], [1793276027107, 960], [1793276027117, 960], [1793276027127, 960], [1793276027137, 960], [1793276027147, 960], [1793276027157, 960], [1793276027167, 960], [1793276027177, 960], [1793276027187, 960], [1793276027197, 960], [1793276027207, 960], [1793276027217, 960], [1793276027227, 960], [1793276027237, 960], [1793276027247, 960], [1793276027257, 960], [1793276027267, 960], [1793276027277, 960], [1793276027287, 960], [1793276027297, 960], [1793276027307, 960], [1793276027317, 960], [1793276027327, 960], [1793276027337, 960], [1793276027347, 960], [1793276027357, 960], [1793276027367, 960], [1793276027377, 960], [1793276027387, 960], [1793276027397, 960], [1793276027407, 960], [1793276027417, 960], [1793276027427, 960], [1793276027437, 960], [1793276027447, 960], [1793276027457, 960], [1793276027467, 960], [1793276027477, 960], [1793276027487, 960], [1793276027497, 960], [1793276027507, 960], [1793276027517, 960], [1793276027527, 960], [1793276027537, 960], [1793276027547, 960], [1793276027557, 960], [1793276027567, 960], [1793276027577, 960], [1793276027587, 960], [1793276027597, 960], [1793276027607, 960], [1793276027617, 960], [1793276027627, 960], [1793276027637, 960], [1793276027647, 960], [1793276027657, 960], [1793276027667, 960], [1793276027677, 960], [1793276027687, 960], [1793276027697, 960], [1793276027707, 960], [1793276027717, 960], [1793276027728, 960], [1793276027737, 960], [1793276027747, 960], [1793276027757, 960], [1793276027767, 960], [1793276027777, 960], [1793276027787, 960], [1793276027797, 960], [1793276027807, 960], [1793276027817, 960], [1793276027827, 960], [1793276027837, 960], [1793276027848, 960], [1793276027857, 960], [1793276027868, 960], [1793276027877, 960], [1793276027887, 960], [1793276027897, 960], [1793276027908, 960], [1793276027917, 960], [1793276027927, 960], [1793276027937, 960], [1793276027947, 960], [1793276027957, 960], [1793276027967, 960], [1793276027977, 960], [1793276027987, 960], [1793276027997, 960], [1793276028007, 960], [1793276028017, 960], [1793276028028, 960], [1793276028037, 960], [1793276028047, 960], [1793276028057, 960], [1793276028067, 960], [1793276028077, 960], [1793276028087, 960], [1793276028097, 960], [1793276028107, 960], [1793276028117, 960], [1793276028127, 960], [1793276028137, 960], [1793276028147, 960], [1793276028157, 960], [1793276028167, 960], [1793276028177, 960], [1793276028187, 960], [1793276028197, 960], [1793276028207, 960], [1793276028217, 960], [1793276028227, 960], [1793276028237, 960], [1793276028247, 960], [1793276028257, 960], [1793276028267, 960], [1793276028277, 960], [1793276028287, 960], [1793276028297, 960], [1793276028307, 960], [1793276028317, 960], [1793276028327, 960], [1793276028337, 960], [1793276028347, 960], [1793276028357, 960], [1793276028367, 960], [1793276028377, 960], [1793276028387, 960], [1793276028397, 960], [1793276028407, 960], [1793276028417, 960], [1793276028427, 960], [1793276028437, 960], [1793276028448, 960], [1793276028457, 960], [1793276028467, 960], [1793276028477, 960], [1793276028488, 960], [1793276028497, 960], [1793276028508, 960], [1793276028517, 960], [1793276028528, 960], [1793276028537, 960], [1793276028548, 960], [1793276028557, 960], [1793276028568, 960], [1793276028577, 960], [1793276028588, 960], [1793276028597, 960], [1793276028608, 960], [1793276028618, 960], [1793276028628, 960], [1793276028637, 960], [1793276028648, 960], [1793276028657, 960], [1793276028668, 960], [1793276028677, 960], [1793276028688, 960], [1793276028697, 960], [1793276028708, 960], [1793276028717, 960], [1793276028728, 960], [1793276028738, 960], [1793276028748, 960], [1793276028757, 960], [1793276028768, 960], [1793276028777, 960], [1793276028788, 960], [1793276028797, 960], [1793276028807, 960], [1793276028817, 960], [1793276028827, 960], [1793276028837, 960], [1793276028847, 960], [1793276028857, 960], [1793276028867, 960], [1793276028877, 960], [1793276028887, 960], [1793276028897, 960], [1793276028907, 960], [1793276028917, 960], [1793276028927, 960], [1793276028937, 960], [1793276028947, 960], [1793276028957, 960], [1793276028967, 960], [1793276028977, 960], [1793276028987, 960], [1793276028997, 960], [1793276029007, 960], [1793276029017, 960], [1793276029027, 960], [1793276029037, 960], [1793276029047, 960], [1793276029057, 960], [1793276029067, 960], [1793276029077, 960], [1793276029087, 960], [1793276029097, 960], [1793276029107, 960], [1793276029117, 960], [1793276029127, 960], [1793276029137, 960], [1793276029147, 960], [1793276029157, 960], [1793276029167, 960], [1793276029177, 960], [1793276029187, 960], [1793276029197, 960], [1793276029207, 960], [1793276029217, 960], [1793276029228, 960], [1793276029237, 960], [1793276029247, 960], [1793276029257, 960], [1793276029267, 960], [1793276029277, 960], [1793276029287, 960], [1793276029297, 960], [1793276029307, 960], [1793276029317, 960], [1793276029327, 960], [1793276029337, 960], [1793276029347, 960], [1793276029357, 960], [1793276029368, 960], [1793276029377, 960], [1793276029387, 960], [1793276029397, 960], [1793276029407, 960], [1793276029417, 960], [1793276029427, 960], [1793276029437, 960], [1793276029447, 960], [1793276029457, 960], [1793276029467, 960], [1793276029477, 960], [1793276029487, 960], [1793276029497, 960], [1793276029507, 960], [1793276029517, 960], [1793276029527, 960], [1793276029537, 960], [1793276029547, 960], [1793276029557, 960], [1793276029567, 960], [1793276029577, 960], [1793276029587, 960], [1793276029597, 960], [1793276029607, 960], [1793276029618, 960], [1793276029627, 960], [1793276029637, 960], [1793276029648, 960], [1793276029657, 960], [1793276029667, 960], [1793276029677, 960], [1793276029687, 960], [1793276029697, 960], [1793276029707, 960], [1793276029717, 960], [1793276029727, 960], [1793276029737, 960], [1793276029747, 960], [1793276029757, 960], [1793276029767, 960], [1793276029777, 960], [1793276029787, 960], [1793276029797, 960], [1793276029807, 960], [1793276029817, 960], [1793276029828, 960], [1793276029837, 960], [1793276029847, 960], [1793276029857, 960], [1793276029867, 960], [1793276029877, 960], [1793276029887, 960], [1793276029897, 960], [1793276029907, 960], [1793276029917, 960], [1793276029927, 960], [1793276029937, 960], [1793276029947, 960], [1793276029957, 960], [1793276029967, 960], [1793276029977, 960], [1793276029987, 960], [1793276029997, 960], [1793276030007, 960], [1793276030017, 960], [1793276030027, 960], [1793276030037, 960], [1793276030047, 960], [1793276030057, 960], [1793276030067, 960], [1793276030077, 960], [1793276030087, 960], [1793276030097, 960], [1793276030107, 960], [1793276030117, 960], [1793276030127, 960], [1793276030137, 960], [1793276030147, 960], [1793276030157, 960], [1793276030168, 960], [1793276030177, 960], [1793276030188, 960], [1793276030197, 960], [1793276030207, 960], [1793276030217, 960], [1793276030227, 960], [1793276030237, 960], [1793276030247, 960], [1793276030257, 960], [1793276030268, 960], [1793276030277, 960], [1793276030288, 960], [1793276030297, 960], [1793276030308, 960], [1793276030317, 960], [1793276030328, 960], [1793276030337, 960], [1793276030348, 960], [1793276030357, 960], [1793276030368, 960], [1793276030377, 960], [1793276030388, 960], [1793276030397, 960], [1793276030408, 960], [1793276030417, 960], [1793276030428, 960], [1793276030437, 960], [1793276030448, 960], [1793276030457, 960], [1793276030468, 960], [1793276030477, 960], [1793276030488, 960], [1793276030497, 960], [1793276030508, 960], [1793276030517, 960], [1793276030528, 960], [1793276030537, 960], [1793276030548, 960], [1793276030557, 960], [1793276030568, 960], [1793276030578, 960], [1793276030587, 960], [1793276030597, 960], [1793276030607, 960], [1793276030617, 960], [1793276030627, 960], [1793276030637, 960], [1793276030647, 960], [1793276030657, 960], [1793276030667, 960], [1793276030677, 960], [1793276030688, 960], [1793276030697, 960], [1793276030707, 960], [1793276030717, 960], [1793276030727, 960], [1793276030737, 960], [1793276030747, 960], [1793276030757, 960], [1793276030767, 960], [1793276030777, 960], [1793276030787, 960], [1793276030797, 960], [1793276030807, 960], [1793276030817, 960], [1793276030827, 960], [1793276030837, 960], [1793276030847, 960], [1793276030857, 960], [1793276030867, 960], [1793276030877, 960], [1793276030887, 960], [1793276030897, 960], [1793276030907, 960], [1793276030917, 960], [1793276030927, 960], [1793276030937, 960], [1793276030947, 960], [1793276030957, 960], [1793276030967, 960], [1793276030977, 960], [1793276030987, 960], [1793276030997, 960], [1793276031007, 960], [1793276031017, 960], [1793276031027, 960], [1793276031037, 960], [1793276031047, 960], [1793276031057, 960], [1793276031067, 960], [1793276031077, 960], [1793276031087, 960], [1793276031097, 960], [1793276031107, 960], [1793276031117, 960], [1793276031127, 960], [1793276031137, 960], [1793276031147, 960], [1793276031158, 960], [1793276031167, 960], [1793276031177, 960], [1793276031187, 960], [1793276031197, 960], [1793276031207, 960], [1793276031217, 960], [1793276031227, 960], [1793276031237, 960], [1793276031247, 960], [1793276031257, 960], [1793276031267, 960], [1793276031277, 960], [1793276031287, 960], [1793276031297, 960], [1793276031307, 960], [1793276031317, 960], [1793276031327, 960], [1793276031337, 960], [1793276031347, 960], [1793276031357, 960], [1793276031367, 960], [1793276031377, 960], [1793276031387, 960], [1793276031397, 960], [1793276031407, 960], [1793276031417, 960], [1793276031427, 960], [1793276031437, 960], [1793276031447, 960], [1793276031457, 960], [1793276031467, 960], [1793276031477, 960], [1793276031487, 960], [1793276031497, 960], [1793276031507, 960], [1793276031517, 960], [1793276031527, 960], [1793276031537, 960], [1793276031547, 960], [1793276031557, 960], [1793276031567, 960], [1793276031577, 960], [1793276031587, 960], [1793276031597, 960], [1793276031607, 960], [1793276031617, 960], [1793276031627, 960], [1793276031637, 960], [1793276031647, 960], [1793276031657, 960], [1793276031667, 960], [1793276031677, 960], [1793276031687, 960], [1793276031697, 960], [1793276031707, 960], [1793276031717, 960], [1793276031727, 960], [1793276031737, 960], [1793276031747, 960], [1793276031757, 960], [1793276031767, 960], [1793276031777, 960], [1793276031787, 960], [1793276031797, 960], [1793276031807, 960], [1793276031817, 960], [1793276031827, 960], [1793276031837, 960], [1793276031847, 960], [1793276031857, 960], [1793276031867, 960], [1793276031877, 960], [1793276031887, 960], [1793276031897, 960], [1793276031907, 960], [1793276031917, 960], [1793276031927, 960], [1793276031937, 960], [1793276031947, 960], [1793276031957, 960], [1793276031967, 960], [1793276031977, 960], [1793276031987, 960], [1793276031997, 960], [1793276032007, 960], [1793276032017, 960], [1793276032027, 960], [1793276032037, 960], [1793276032047, 960], [1793276032057, 960], [1793276032067, 960], [1793276032077, 960], [1793276032087, 960], [1793276032097, 960], [1793276032107, 960], [1793276032117, 960], [1793276032127, 960], [1793276032137, 960], [1793276032147, 960], [1793276032157, 960], [1793276032167, 960], [1793276032177, 960], [1793276032187, 960], [1793276032197, 960], [1793276032207, 960], [1793276032217, 960], [1793276032227, 960], [1793276032237, 960], [1793276032247, 960], [1793276032257, 960], [1793276032267, 960], [1793276032277, 960], [1793276032287, 960], [1793276032297, 960], [1793276032307, 960], [1793276032317, 960], [1793276032327, 960], [1793276032337, 960], [1793276032348, 960], [1793276032357, 960], [1793276032367, 960], [1793276032377, 960], [1793276032387, 960], [1793276032398, 960], [1793276032407, 960], [1793276032417, 960], [1793276032427, 960], [1793276032437, 960], [1793276032447, 960], [1793276032457, 960], [1793276032467, 960], [1793276032477, 960], [1793276032487, 960], [1793276032497, 960], [1793276032507, 960], [1793276032517, 960], [1793276032527, 960], [1793276032537, 960], [1793276032547, 960], [1793276032557, 960], [1793276032567, 960], [1793276032577, 960], [1793276032587, 960], [1793276032597, 960], [1793276032607, 960], [1793276032617, 960], [1793276032627, 960], [1793276032637, 960], [1793276032647, 960], [1793276032657, 960], [1793276032667, 960], [1793276032677, 960], [1793276032687, 960], [1793276032697, 960], [1793276032707, 960], [1793276032717, 960], [1793276032727, 960], [1793276032737, 960], [1793276032747, 960], [1793276032757, 960], [1793276032767, 960], [1793276032777, 960], [1793276032787, 960], [1793276032797, 960], [1793276032807, 960], [1793276032817, 960], [1793276032827, 960], [1793276032837, 960], [1793276032847, 960], [1793276032857, 960], [1793276032867, 960], [1793276032877, 960], [1793276032887, 960], [1793276032897, 960], [1793276032907, 960], [1793276032917, 960], [1793276032927, 960], [1793276032937, 960], [1793276032947, 960], [1793276032957, 960], [1793276032967, 960], [1793276032977, 960], [1793276032987, 960], [1793276032997, 960], [1793276033007, 960], [1793276033017, 960], [1793276033027, 960], [1793276033037, 960], [1793276033047, 960], [1793276033057, 960], [1793276033067, 960], [1793276033077, 960], [1793276033087, 960], [1793276033097, 960], [1793276033107, 960], [1793276033117, 960], [1793276033127, 960], [1793276033137, 960], [1793276033147, 960], [1793276033157, 960], [1793276033167, 960], [1793276033177, 960], [1793276033187, 960], [1793276033197, 960], [1793276033207, 960], [1793276033217, 960], [1793276033227, 960], [1793276033237, 960], [1793276033247, 960], [1793276033257, 960], [1793276033267, 960], [1793276033277, 960], [1793276033287, 960], [1793276033297, 960], [1793276033307, 960], [1793276033317, 960], [1793276033327, 960], [1793276033337, 960], [1793276033347, 960], [1793276033357, 960], [1793276033367, 960], [1793276033377, 960], [1793276033387, 960], [1793276033397, 960], [1793276033407, 960], [1793276033417, 960], [1793276033427, 960], [1793276033437, 960], [1793276033447, 960], [1793276033457, 960], [1793276033467, 960], [1793276033477, 960], [1793276033487, 960], [1793276033497, 960], [1793276033507, 960], [1793276033517, 960], [1793276033527, 960], [1793276033537, 960], [1793276033547, 960], [1793276033557, 960], [1793276033567, 960], [1793276033577, 960], [1793276033587, 960], [1793276033597, 960], [1793276033607, 960], [1793276033617, 960], [1793276033627, 960], [1793276033637, 960], [1793276033647, 960], [1793276033657, 960], [1793276033667, 960], [1793276033677, 960], [1793276033687, 960], [1793276033697, 960], [1793276033707, 960], [1793276033717, 960], [1793276033727, 960], [1793276033737, 960], [1793276033747, 960], [1793276033757, 960], [1793276033767, 960], [1793276033777, 960], [1793276033787, 960], [1793276033797, 960], [1793276033807, 960], [1793276033817, 960], [1793276033827, 960], [1793276033837, 960], [1793276033847, 960], [1793276033857, 960], [1793276033867, 960], [1793276033877, 960], [1793276033887, 960], [1793276033897, 960], [1793276033908, 960], [1793276033917, 960], [1793276033927, 960], [1793276033937, 960], [1793276033947, 960], [1793276033957, 960], [1793276033967, 960], [1793276033977, 960], [1793276033987, 960], [1793276033997, 960], [1793276034007, 960], [1793276034017, 960], [1793276034027, 960], [1793276034037, 960], [1793276034047, 960], [1793276034057, 960], [1793276034067, 960], [1793276034077, 960], [1793276034087, 960], [1793276034097, 960], [1793276034107, 960], [1793276034117, 960], [1793276034127, 960], [1793276034137, 960], [1793276034147, 960], [1793276034157, 960], [1793276034167, 960], [1793276034177, 960], [1793276034187, 960], [1793276034197, 960], [1793276034207, 960], [1793276034217, 960], [1793276034227, 960], [1793276034237, 960], [1793276034247, 960], [1793276034257, 960], [1793276034267, 960], [1793276034277, 960], [1793276034287, 960], [1793276034297, 960], [1793276034307, 960], [1793276034317, 960], [1793276034327, 960], [1793276034337, 960], [1793276034347, 960], [1793276034357, 960], [1793276034367, 960], [1793276034377, 960], [1793276034387, 960], [1793276034397, 960], [1793276034407, 960], [1793276034417, 960], [1793276034427, 960], [1793276034437, 960], [1793276034447, 960], [1793276034457, 960], [1793276034467, 960], [1793276034477, 960], [1793276034487, 960], [1793276034497, 960], [1793276034507, 960], [1793276034517, 960], [1793276034527, 960], [1793276034537, 960], [1793276034547, 960], [1793276034557, 960], [1793276034567, 960], [1793276034577, 960], [1793276034587, 960], [1793276034597, 960], [1793276034607, 960], [1793276034617, 960], [1793276034627, 960], [1793276034637, 960], [1793276034647, 960], [1793276034657, 960], [1793276034667, 960], [1793276034677, 960], [1793276034687, 960], [1793276034697, 960], [1793276034707, 960], [1793276034717, 960], [1793276034727, 960], [1793276034737, 960], [1793276034747, 960], [1793276034757, 960], [1793276034767, 960], [1793276034777, 960], [1793276034787, 960], [1793276034797, 960], [1793276034807, 960], [1793276034817, 960], [1793276034827, 960], [1793276034837, 960], [1793276034847, 960], [1793276034857, 960], [1793276034867, 960], [1793276034877, 960], [1793276034887, 960], [1793276034897, 960], [1793276034907, 960], [1793276034917, 960], [1793276034927, 960], [1793276034937, 960], [1793276034947, 960], [1793276034957, 960], [1793276034967, 960], [1793276034977, 960], [1793276034987, 960], [1793276034997, 960], [1793276035007, 960], [1793276035017, 960], [1793276035027, 960], [1793276035037, 960], [1793276035047, 960], [1793276035057, 960], [1793276035067, 960], [1793276035077, 960], [1793276035087, 960], [1793276035097, 960], [1793276035107, 960], [1793276035117, 960], [1793276035127, 960], [1793276035137, 960], [1793276035147, 960], [1793276035157, 960], [1793276035167, 960], [1793276035177, 960], [1793276035187, 960], [1793276035197, 960], [1793276035207, 960], [1793276035217, 960], [1793276035227, 960], [1793276035237, 960], [1793276035247, 960], [1793276035257, 960], [1793276035267, 960], [1793276035277, 960], [1793276035287, 960], [1793276035297, 960], [1793276035307, 960], [1793276035317, 960], [1793276035327, 960], [1793276035337, 960], [1793276035347, 960], [1793276035357, 960], [1793276035367, 960], [1793276035377, 960], [1793276035387, 960], [1793276035397, 960], [1793276035407, 960], [1793276035417, 960], [1793276035427, 960], [1793276035437, 960], [1793276035447, 960], [1793276035457, 960], [1793276035467, 960], [1793276035477, 960], [1793276035487, 960], [1793276035497, 960], [1793276035507, 960], [1793276035517, 960], [1793276035527, 960], [1793276035537, 960], [1793276035547, 960], [1793276035557, 960], [1793276035567, 960], [1793276035577, 960], [1793276035587, 960], [1793276035597, 960], [1793276035607, 960], [1793276035617, 960], [1793276035627, 960], [1793276035637, 960], [1793276035647, 960], [1793276035657, 960], [1793276035667, 960], [1793276035677, 960], [1793276035687, 960], [1793276035697, 960], [1793276035707, 960], [1793276035717, 960], [1793276035728, 960], [1793276035737, 960], [1793276035747, 960], [1793276035757, 960], [1793276035767, 960], [1793276035777, 960], [1793276035787, 960], [1793276035797, 960], [1793276035807, 960], [1793276035817, 960], [1793276035827, 960], [1793276035837, 960], [1793276035847, 960], [1793276035857, 960], [1793276035867, 960], [1793276035878, 960], [1793276035887, 960], [1793276035897, 960], [1793276035907, 960], [1793276035917, 960], [1793276035927, 960], [1793276035937, 960], [1793276035947, 960], [1793276035957, 960], [1793276035967, 960], [1793276035977, 960], [1793276035987, 960], [1793276035997, 960], [1793276036007, 960], [1793276036017, 960], [1793276036027, 960], [1793276036037, 960], [1793276036047, 960], [1793276036057, 960], [1793276036067, 960], [1793276036077, 960], [1793276036087, 960], [1793276036097, 960], [1793276036107, 960], [1793276036117, 960], [1793276036127, 960], [1793276036137, 960], [1793276036147, 960], [1793276036157, 960], [1793276036167, 960], [1793276036177, 960], [1793276036187, 960], [1793276036197, 960], [1793276036207, 960], [1793276036217, 960], [1793276036227, 960], [1793276036237, 960], [1793276036247, 960], [1793276036257, 960], [1793276036267, 960], [1793276036277, 960], [1793276036287, 960], [1793276036297, 960], [1793276036307, 960], [1793276036317, 960], [1793276036327, 960], [1793276036337, 960], [1793276036347, 960], [1793276036357, 960], [1793276036367, 960], [1793276036377, 960], [1793276036387, 960], [1793276036397, 960], [1793276036407, 960], [1793276036417, 960], [1793276036427, 960], [1793276036437, 960], [1793276036447, 960], [1793276036457, 960], [1793276036467, 960], [1793276036477, 960], [1793276036487, 960], [1793276036497, 960], [1793276036507, 960], [1793276036517, 960], [1793276036527, 960], [1793276036537, 960], [1793276036547, 960], [1793276036557, 960], [1793276036567, 960], [1793276036577, 960], [1793276036587, 960], [1793276036597, 960], [1793276036607, 960], [1793276036617, 960], [1793276036627, 960], [1793276036637, 960], [1793276036647, 960], [1793276036657, 960], [1793276036667, 960], [1793276036677, 960], [1793276036687, 960], [1793276036697, 960], [1793276036707, 960], [1793276036717, 960], [1793276036727, 960], [1793276036737, 960], [1793276036747, 960], [1793276036757, 960], [1793276036767, 960], [1793276036777, 960], [1793276036787, 960], [1793276036797, 960], [1793276036807, 960], [1793276036817, 960], [1793276036827, 960], [1793276036837, 960], [1793276036847, 960], [1793276036857, 960], [1793276036867, 960], [1793276036877, 960], [1793276036888, 960], [1793276036897, 960], [1793276036907, 960], [1793276036917, 960], [1793276036927, 960], [1793276036937, 960], [1793276036947, 960], [1793276036957, 960], [1793276036968, 960], [1793276036977, 960], [1793276036988, 960], [1793276036997, 960], [1793276037007, 960], [1793276037017, 960], [1793276037027, 960], [1793276037037, 960], [1793276037047, 960], [1793276037057, 960], [1793276037067, 960], [1793276037077, 960], [1793276037087, 960], [1793276037097, 960], [1793276037107, 960], [1793276037117, 960], [1793276037127, 960], [1793276037137, 960], [1793276037147, 960], [1793276037157, 960], [1793276037167, 960], [1793276037178, 960], [1793276037187, 960], [1793276037197, 960], [1793276037207, 960], [1793276037217, 960], [1793276037227, 960], [1793276037237, 960], [1793276037247, 960], [1793276037257, 960], [1793276037267, 960], [1793276037277, 960], [1793276037287, 960], [1793276037297, 960], [1793276037307, 960], [1793276037317, 960], [1793276037327, 960], [1793276037337, 960], [1793276037348, 960], [1793276037357, 960], [1793276037367, 960], [1793276037377, 960], [1793276037387, 960], [1793276037397, 960], [1793276037408, 960], [1793276037417, 960], [1793276037427, 960], [1793276037437, 960], [1793276037447, 960], [1793276037457, 960], [1793276037467, 960], [1793276037477, 960], [1793276037487, 960], [1793276037497, 960], [1793276037507, 960], [1793276037517, 960], [1793276037527, 960], [1793276037537, 960], [1793276037547, 960], [1793276037557, 960], [1793276037567, 960], [1793276037577, 960], [1793276037587, 960], [1793276037597, 960], [1793276037607, 960], [1793276037617, 960], [1793276037627, 960], [1793276037637, 960], [1793276037647, 960], [1793276037657, 960], [1793276037667, 960], [1793276037677, 960], [1793276037687, 960], [1793276037697, 960], [1793276037707, 960], [1793276037717, 960], [1793276037727, 960], [1793276037737, 960], [1793276037747, 960], [1793276037757, 960], [1793276037767, 960], [1793276037777, 960], [1793276037787, 960], [1793276037797, 960], [1793276037807, 960], [1793276037817, 960], [1793276037827, 960], [1793276037837, 960], [1793276037847, 960], [1793276037857, 960], [1793276037867, 960], [1793276037877, 960], [1793276037887, 960], [1793276037897, 960], [1793276037907, 960], [1793276037917, 960], [1793276037927, 960], [1793276037937, 960], [1793276037947, 960], [1793276037957, 960], [1793276037967, 960], [1793276037977, 960], [1793276037987, 960], [1793276037997, 960], [1793276038007, 960], [1793276038017, 960], [1793276038027, 960], [1793276038037, 960], [1793276038047, 960], [1793276038057, 960], [1793276038067, 960], [1793276038077, 960], [1793276038087, 960], [1793276038097, 960], [1793276038107, 960], [1793276038117, 960], [1793276038127, 960], [1793276038137, 960], [1793276038147, 960], [1793276038157, 960], [1793276038167, 960], [1793276038177, 960], [1793276038187, 960], [1793276038197, 960], [1793276038207, 960], [1793276038217, 960], [1793276038227, 960], [1793276038237, 960], [1793276038247, 960], [1793276038257, 960], [1793276038267, 960], [1793276038277, 960], [1793276038287, 960], [1793276038297, 960], [1793276038307, 960], [1793276038317, 960], [1793276038327, 960], [1793276038337, 960], [1793276038347, 960], [1793276038357, 960], [1793276038367, 960], [1793276038377, 960], [1793276038387, 960], [1793276038397, 960], [1793276038407, 960], [1793276038417, 960], [1793276038427, 960], [1793276038437, 960], [1793276038447, 960], [1793276038457, 960], [1793276038467, 960], [1793276038477, 960], [1793276038487, 960], [1793276038497, 960], [1793276038507, 960], [1793276038517, 960], [1793276038527, 960], [1793276038537, 960], [1793276038547, 960], [1793276038557, 960], [1793276038567, 960], [1793276038577, 960], [1793276038587, 960], [1793276038597, 960], [1793276038607, 960], [1793276038617, 960], [1793276038627, 960], [1793276038637, 960], [1793276038647, 960], [1793276038657, 960], [1793276038667, 960], [1793276038677, 960], [1793276038687, 960], [1793276038697, 960], [1793276038707, 960], [1793276038717, 960], [1793276038727, 960], [1793276038737, 960], [1793276038747, 960], [1793276038757, 960], [1793276038767, 960], [1793276038777, 960], [1793276038787, 960], [1793276038797, 960], [1793276038807, 960], [1793276038817, 960], [1793276038827, 960], [1793276038837, 960], [1793276038847, 960], [1793276038857, 960], [1793276038867, 960], [1793276038877, 960], [1793276038887, 960], [1793276038897, 960], [1793276038907, 960], [1793276038917, 960], [1793276038927, 960], [1793276038937, 960], [1793276038947, 960], [1793276038957, 960], [1793276038967, 960], [1793276038977, 960], [1793276038987, 960], [1793276038997, 960], [1793276039007, 960], [1793276039017, 960], [1793276039027, 960], [1793276039037, 960], [1793276039047, 960], [1793276039057, 960], [1793276039067, 960], [1793276039077, 960], [1793276039087, 960], [1793276039097, 960], [1793276039107, 960], [1793276039117, 960], [1793276039127, 960], [1793276039137, 960], [1793276039147, 960], [1793276039157, 960], [1793276039167, 960], [1793276039177, 960], [1793276039187, 960], [1793276039197, 960], [1793276039207, 960], [1793276039217, 960], [1793276039227, 960], [1793276039237, 960], [1793276039247, 960], [1793276039257, 960], [1793276039267, 960], [1793276039277, 960], [1793276039287, 960], [1793276039297, 960], [1793276039307, 960], [1793276039317, 960], [1793276039327, 960], [1793276039337, 960], [1793276039347, 960], [1793276039357, 960], [1793276039367, 960], [1793276039377, 960], [1793276039387, 960], [1793276039397, 960], [1793276039407, 960], [1793276039417, 960], [1793276039427, 960], [1793276039437, 960], [1793276039447, 960], [1793276039457, 960], [1793276039467, 960], [1793276039477, 960], [1793276039487, 960], [1793276039497, 960], [1793276039507, 960], [1793276039517, 960], [1793276039527, 960], [1793276039537, 960], [1793276039547, 960], [1793276039557, 960], [1793276039567, 960], [1793276039577, 960], [1793276039587, 960], [1793276039597, 960], [1793276039607, 960], [1793276039617, 960], [1793276039627, 960], [1793276039637, 960], [1793276039647, 960], [1793276039657, 960], [1793276039667, 960], [1793276039677, 960], [1793276039687, 960], [1793276039697, 960], [1793276039707, 960], [1793276039717, 960], [1793276039727, 960], [1793276039737, 960], [1793276039747, 960], [1793276039757, 960], [1793276039767, 960], [1793276039777, 960], [1793276039787, 960], [1793276039797, 960], [1793276039807, 960], [1793276039817, 960], [1793276039827, 960], [1793276039837, 960], [1793276039847, 960], [1793276039857, 960], [1793276039867, 960], [1793276039877, 960], [1793276039887, 960], [1793276039897, 960], [1793276039907, 960], [1793276039917, 960], [1793276039927, 960], [1793276039937, 960], [1793276039947, 960], [1793276039957, 960], [1793276039967, 960], [1793276039977, 960], [1793276039987, 960], [1793276039997, 960], [1793276040007, 960], [1793276040017, 960], [1793276040027, 960], [1793276040037, 960], [1793276040047, 960], [1793276040057, 960], [1793276040067, 960], [1793276040077, 960], [1793276040087, 960], [1793276040097, 960], [1793276040107, 960], [1793276040117, 960], [1793276040127, 960], [1793276040137, 960], [1793276040147, 960], [1793276040157, 960], [1793276040167, 960], [1793276040177, 960], [1793276040187, 960], [1793276040197, 960], [1793276040207, 960], [1793276040217, 960], [1793276040227, 960], [1793276040237, 960], [1793276040247, 960], [1793276040257, 960], [1793276040267, 960], [1793276040277, 960], [1793276040287, 960], [1793276040297, 960], [1793276040307, 960], [1793276040317, 960], [1793276040327, 960], [1793276040337, 960], [1793276040347, 960], [1793276040357, 960], [1793276040367, 960], [1793276040377, 960], [1793276040387, 960], [1793276040397, 960], [1793276040407, 960], [1793276040417, 960], [1793276040427, 960], [1793276040437, 960], [1793276040447, 960], [1793276040457, 960], [1793276040467, 960], [1793276040477, 960], [1793276040487, 960], [1793276040497, 960], [1793276040507, 960], [1793276040517, 960], [1793276040527, 960], [1793276040537, 960], [1793276040547, 960], [1793276040557, 960], [1793276040567, 960], [1793276040577, 960], [1793276040587, 960], [1793276040597, 960], [1793276040607, 960], [1793276040617, 960], [1793276040627, 960], [1793276040637, 960], [1793276040647, 960], [1793276040657, 960], [1793276040667, 960], [1793276040677, 960], [1793276040687, 960], [1793276040697, 960], [1793276040707, 960], [1793276040717, 960], [1793276040727, 960], [1793276040737, 960], [1793276040747, 960], [1793276040757, 960], [1793276040767, 960], [1793276040777, 960], [1793276040787, 960], [1793276040797, 960], [1793276040807, 960], [1793276040817, 960], [1793276040827, 960], [1793276040837, 960], [1793276040847, 960], [1793276040857, 960], [1793276040867, 960], [1793276040877, 960], [1793276040887, 960], [1793276040897, 960], [1793276040907, 960], [1793276040918, 960], [1793276040927, 960], [1793276040937, 960], [1793276040947, 960], [1793276040957, 960], [1793276040967, 960], [1793276040977, 960], [1793276040987, 960], [1793276040997, 960], [1793276041007, 960], [1793276041017, 960], [1793276041027, 960], [1793276041037, 960], [1793276041047, 960], [1793276041057, 960], [1793276041067, 960], [1793276041077, 960], [1793276041087, 960], [1793276041097, 960], [1793276041107, 960], [1793276041117, 960], [1793276041127, 960], [1793276041137, 960], [1793276041147, 960], [1793276041157, 960], [1793276041167, 960], [1793276041177, 960], [1793276041187, 960], [1793276041197, 960], [1793276041207, 960], [1793276041217, 960], [1793276041227, 960], [1793276041237, 960], [1793276041247, 960], [1793276041257, 960], [1793276041267, 960], [1793276041277, 960], [1793276041287, 960], [1793276041297, 960], [1793276041307, 960], [1793276041317, 960], [1793276041327, 960], [1793276041337, 960], [1793276041347, 960], [1793276041357, 960], [1793276041367, 960], [1793276041377, 960], [1793276041387, 960], [1793276041397, 960], [1793276041407, 960], [1793276041417, 960], [1793276041427, 960], [1793276041437, 960], [1793276041447, 960], [1793276041457, 960], [1793276041467, 960], [1793276041477, 960], [1793276041487, 960], [1793276041497, 960], [1793276041507, 960], [1793276041517, 960], [1793276041527, 960], [1793276041537, 960], [1793276041547, 960], [1793276041557, 960], [1793276041567, 960], [1793276041577, 960], [1793276041587, 960], [1793276041597, 960], [1793276041607, 960], [1793276041617, 960], [1793276041627, 960]]} \ No newline at end of file diff --git a/docs/rework/hel910/window/call2.json b/docs/rework/hel910/window/call2.json new file mode 100644 index 0000000..0b6a2b1 --- /dev/null +++ b/docs/rework/hel910/window/call2.json @@ -0,0 +1,384 @@ +{ + "session_voice": "rain", + "marks": { + "playback_end_ms": 1793275970454, + "user_final_ms": 1793275972886, + "turn_start_ms": 1793275976553, + "assistant_final_ms": 1793275982556, + "assistant_final_kind": "assistant_final", + "first_agent_frame_ms": 1793275970457, + "q2_turn_start_ms": 1793276022633, + "A_post_ms": 1793276022652 + }, + "reply_text_head": "好,小十。去化缘", + "barge": { + "outcome": "interrupted", + "old_audio_last_frame_ms": 1793276002937, + "cancel_ms": 1793275988927, + "frames_total": 4565, + "source": "pre-recorded wav playback over real WebRTC (not a human microphone)", + "new_user_final_ms": 1793275972886, + "new_reply_end": { + "kind": "turn_end", + "at_ms": 1793275982559 + } + }, + "timing_a": { + "fired": true, + "post_ms": 1793276022652, + "status": 200, + "body_head": "data: {\"t\": \"chat.cancelled\", \"epoch\": 1, \"turn_id\": \"58d03703-cf6b-4699-a4a5-d63a07f38bb4\"}\n\n", + "voice_turn_cancel_ms": 1793276030578, + "voice_turn_cancel_reason": "error_phi", + "q2_frames_after_cancel": 800 + }, + "hangup": { + "delete_status": 200, + "delete_body": { + "ended": true, + "room": "cg-voice-dlas9zmiox" + }, + "delete_ms": 1793276041619, + "agent_frames_after_delete": 1, + "room_removed": true + }, + "call": { + "tag": "call2", + "session": { + "url": "wss://192.168.200.12:8363", + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2aWRlbyI6eyJyb29tSm9pbiI6dHJ1ZSwicm9vbSI6ImNnLXZvaWNlLWRsYXM5em1pb3giLCJjYW5QdWJsaXNoIjp0cnVlLCJjYW5TdWJzY3JpYmUiOnRydWUsImNhblB1Ymxpc2hEYXRhIjp0cnVlfSwic3ViIjoidXNlci1qb29ibmlzYiIsImlzcyI6ImRldmtleSIsIm5iZiI6MTc5MzI3NTk1NiwiZXhwIjoxNzkzMjc2MjU2LCJuYW1lIjoi55So5oi3In0.GeGFqnvFP_XUgV8eLn6T2ZIqxCd7A8V-dHZBxMXp7Yo", + "room": "cg-voice-dlas9zmiox", + "session_id": "Br4leZ_1VqtwH_E4TIM9n8o5", + "agent_name": "cybergril-voice-agent", + "epoch": 1, + "expires_at": 1793276856594, + "voice": "rain" + }, + "session_voice": "rain", + "subtitle_count": 69, + "seq_monotonic": true, + "agent_frames": 8434, + "agent_audio_seconds": 84.3, + "agent_audio_rate": 48000, + "agent_joined_ms": 1793275957224, + "subtitles_file": "/opt/cybergril-hel910/evidence/call2.subtitles.jsonl", + "frames_file": "/opt/cybergril-hel910/evidence/call2.frames.json", + "agent_audio_file": "/opt/cybergril-hel910/evidence/call2.agent.wav" + }, + "budget_after": { + "at_ms": 1793276044162, + "token_usage": [ + { + "day": "2026-10-29", + "scene": "dialogue_main", + "used": 30398 + } + ], + "request_usage": [ + { + "day": "2026-10-29", + "category": "dialogue", + "requests": 10 + } + ], + "budget_total": [ + { + "key": "total_requests", + "value": 10 + }, + { + "key": "total_tokens", + "value": 30398 + } + ] + }, + "worker_state_after": { + "exists": true, + "content": { + "voice": "rain" + } + }, + "db_dump": { + "chat_message": [ + { + "id": 1, + "ts": 1793275110974, + "role": "user", + "turn_id": "25a72390-7a14-4ea0-821c-01bc87ab684c", + "status": "sent", + "text": "我就是个笨蛋派大星,我们一起去抓水母吧,我们一起度过快乐的一天" + }, + { + "id": 2, + "ts": 1793275113739, + "role": "companion", + "turn_id": "25a72390-7a14-4ea0-821c-01bc87ab684c", + "status": "sent", + "text": "好呀,小十。带上小网兜,慢一点也没关系,抓到一只算一只,抓不到就当风陪我们走一趟。" + }, + { + "id": 3, + "ts": 1793275121122, + "role": "user", + "turn_id": "e6732ca0-c56b-4cd2-9e60-5f6b4603cdc6", + "status": "sent", + "text": "先停下,我用打字跟你说:把你刚才那句还没说完的话作废,改用文字告诉我,你今天想拉我一起做的第一件事是什么?" + }, + { + "id": 4, + "ts": 1793275123508, + "role": "companion", + "turn_id": "e6732ca0-c56b-4cd2-9e60-5f6b4603cdc6", + "status": "sent", + "text": "今天想拉你一起做的第一件事,是找个安静的地方坐下,先一起晒一会儿太阳。" + }, + { + "id": 5, + "ts": 1793275181313, + "role": "user", + "turn_id": "c726406d-5476-4c3a-8dac-49b92c86c43e", + "status": "sent", + "text": "师傅,哎,这取经路比高,老庄种地还苦,俺老猪饿的能吞下石龙素包子,猴哥,你筋斗云块,要不先去画个缘" + }, + { + "id": 6, + "ts": 1793275183882, + "role": "companion", + "turn_id": "c726406d-5476-4c3a-8dac-49b92c86c43e", + "status": "sent", + "text": "行啊,小十。去画缘之前,先把那石龙素包子掏出来分我一半。" + }, + { + "id": 7, + "ts": 1793275231037, + "role": "user", + "turn_id": "e52af134-b80b-4e40-a42f-8aeab4a3a91b", + "status": "sent", + "text": "没错,我就是个笨蛋派大星,我们一起去抓水母吧,我们一起度过快乐的一天" + }, + { + "id": 8, + "ts": 1793275233262, + "role": "companion", + "turn_id": "e52af134-b80b-4e40-a42f-8aeab4a3a91b", + "status": "sent", + "text": "好,小十。先坐下来歇口气,等力气攒够了,再一起去抓水母。" + }, + { + "id": 9, + "ts": 1793275235147, + "role": "user", + "turn_id": "dc1f3c9d-33da-411f-ae1e-1a2559b150f4", + "status": "sent", + "text": "等一下,先别把刚才那段长回答说完,我打字补充:只用一句话告诉我你现在的心情,然后安静等我。" + }, + { + "id": 10, + "ts": 1793275236443, + "role": "companion", + "turn_id": "dc1f3c9d-33da-411f-ae1e-1a2559b150f4", + "status": "sent", + "text": "平静。" + }, + { + "id": 11, + "ts": 1793275351015, + "role": "user", + "turn_id": "188dec6c-e59c-49a5-bf56-ea5a071acf30", + "status": "sent", + "text": "没错,我就是个笨蛋派大星,我们一起去抓水母吧,我们一起度过快乐的一天" + }, + { + "id": 12, + "ts": 1793275357616, + "role": "companion", + "turn_id": "188dec6c-e59c-49a5-bf56-ea5a071acf30", + "status": "sent", + "text": "好,小十,那就一起。" + }, + { + "id": 13, + "ts": 1793275976566, + "role": "user", + "turn_id": "faeccd22-7cbf-48f5-8195-ca34d952c078", + "status": "sent", + "text": "师傅,哎,这取经路比高,老庄种地还苦,俺老猪饿的能吞下石龙素包子,猴哥,你筋斗云块,要不先去化个缘" + }, + { + "id": 14, + "ts": 1793275977965, + "role": "companion", + "turn_id": "faeccd22-7cbf-48f5-8195-ca34d952c078", + "status": "sent", + "text": "好,小十。去化缘" + }, + { + "id": 15, + "ts": 1793275985818, + "role": "user", + "turn_id": "3100252b-25b4-4090-8ae9-05441b77d69a", + "status": "sent", + "text": "盯着,你看怎么啦" + }, + { + "id": 16, + "ts": 1793275987410, + "role": "companion", + "turn_id": "3100252b-25b4-4090-8ae9-05441b77d69a", + "status": "sent", + "text": "我在" + }, + { + "id": 17, + "ts": 1793275989727, + "role": "user", + "turn_id": "1cef4c0c-a35e-4864-b0b2-00b002bc5585", + "status": "sent", + "text": "难得看你这么有意思的样子吗" + }, + { + "id": 18, + "ts": 1793275990925, + "role": "companion", + "turn_id": "1cef4c0c-a35e-4864-b0b2-00b002bc5585", + "status": "sent", + "text": "我在" + }, + { + "id": 19, + "ts": 1793276022655, + "role": "user", + "turn_id": "58d03703-cf6b-4699-a4a5-d63a07f38bb4", + "status": "cancelled", + "text": "先别把这句长回答生成完,我打字打断你:只用一句话告诉我你现在待在哪个角落。" + }, + { + "id": 20, + "ts": 1793276022662, + "role": "user", + "turn_id": "76a151eb-b2f0-46aa-a533-ae981ae53168", + "status": "failed", + "text": "师傅,哎,这取经路比高老庄种地还苦,俺老猪饿的能吞下石龙素包子,猴哥,你筋斗云块,要不先去化个缘" + } + ], + "budget_total": [ + { + "key": "total_requests", + "value": 10 + }, + { + "key": "total_tokens", + "value": 30398 + } + ], + "token_usage": [ + { + "day": "2026-10-29", + "scene": "dialogue_main", + "used": 30398 + } + ], + "request_usage": [ + { + "day": "2026-10-29", + "category": "dialogue", + "requests": 10 + } + ] + }, + "asr_ledger_after": { + "exists": true, + "events": 80, + "raw": [ + { + "kind": "audio", + "call": "cg-voice-dlas9zmiox", + "seconds": 5.023499, + "confirmed_seconds": 5.056311, + "frames": 101, + "bytes": 160752, + "sample_rate": 16000, + "window": "hel910-20261029-a", + "t": 1793276017.648 + }, + { + "kind": "audio", + "call": "cg-voice-dlas9zmiox", + "seconds": 5.023498, + "confirmed_seconds": 4.990686, + "frames": 100, + "bytes": 160752, + "sample_rate": 16000, + "window": "hel910-20261029-a", + "t": 1793276022.651 + }, + { + "kind": "audio", + "call": "cg-voice-dlas9zmiox", + "seconds": 5.056311, + "confirmed_seconds": 5.056311, + "frames": 101, + "bytes": 161802, + "sample_rate": 16000, + "window": "hel910-20261029-a", + "t": 1793276027.698 + }, + { + "kind": "audio", + "call": "cg-voice-dlas9zmiox", + "seconds": 5.023499, + "confirmed_seconds": 5.056373, + "frames": 101, + "bytes": 160752, + "sample_rate": 16000, + "window": "hel910-20261029-a", + "t": 1793276032.748 + }, + { + "kind": "audio", + "call": "cg-voice-dlas9zmiox", + "seconds": 5.023498, + "confirmed_seconds": 4.990624, + "frames": 100, + "bytes": 160752, + "sample_rate": 16000, + "window": "hel910-20261029-a", + "t": 1793276037.75 + }, + { + "kind": "audio", + "call": "cg-voice-dlas9zmiox", + "seconds": 5.023499, + "confirmed_seconds": 4.892186, + "frames": 83, + "bytes": 160752, + "sample_rate": 16000, + "window": "hel910-20261029-a", + "t": 1793276041.653 + }, + { + "kind": "audio", + "call": "cg-voice-dlas9zmiox", + "seconds": 0.820813, + "confirmed_seconds": 1.017813, + "frames": 4, + "bytes": 26266, + "sample_rate": 16000, + "window": "hel910-20261029-a", + "t": 1793276043.643 + }, + { + "kind": "call_end", + "call": "cg-voice-dlas9zmiox", + "reason": "error", + "audio_seconds": 86.384475, + "confirmed_audio_seconds": 86.384475, + "connect_attempts": 1, + "connect_failures": 0, + "connect_retries": 0, + "window": "hel910-20261029-a", + "t": 1793276043.643 + } + ] + } +} \ No newline at end of file diff --git a/docs/rework/hel910/window/call2.subtitles.jsonl b/docs/rework/hel910/window/call2.subtitles.jsonl new file mode 100644 index 0000000..bb5e85b --- /dev/null +++ b/docs/rework/hel910/window/call2.subtitles.jsonl @@ -0,0 +1,69 @@ +{"v": 2, "seq": 1, "kind": "interim", "role": "user", "text": "师", "_at_ms": 1793275957911} +{"v": 2, "seq": 2, "kind": "interim", "role": "user", "text": "傅", "_at_ms": 1793275958505} +{"v": 2, "seq": 3, "kind": "interim", "role": "user", "text": "诶这", "_at_ms": 1793275959117} +{"v": 2, "seq": 4, "kind": "interim", "role": "user", "text": "取经", "_at_ms": 1793275959706} +{"v": 2, "seq": 5, "kind": "interim", "role": "user", "text": "路比", "_at_ms": 1793275960316} +{"v": 2, "seq": 6, "kind": "interim", "role": "user", "text": "高老", "_at_ms": 1793275960909} +{"v": 2, "seq": 7, "kind": "interim", "role": "user", "text": "庄种地", "_at_ms": 1793275961508} +{"v": 2, "seq": 8, "kind": "interim", "role": "user", "text": "还", "_at_ms": 1793275962118} +{"v": 2, "seq": 9, "kind": "interim", "role": "user", "text": "苦俺", "_at_ms": 1793275962704} +{"v": 2, "seq": 10, "kind": "interim", "role": "user", "text": "老中", "_at_ms": 1793275963311} +{"v": 2, "seq": 11, "kind": "interim", "role": "user", "text": "饿的能", "_at_ms": 1793275963913} +{"v": 2, "seq": 12, "kind": "interim", "role": "user", "text": "吞下", "_at_ms": 1793275964521} +{"v": 2, "seq": 13, "kind": "interim", "role": "user", "text": "石龙", "_at_ms": 1793275965114} +{"v": 2, "seq": 14, "kind": "interim", "role": "user", "text": "素包", "_at_ms": 1793275965714} +{"v": 2, "seq": 15, "kind": "interim", "role": "user", "text": "子", "_at_ms": 1793275966304} +{"v": 2, "seq": 16, "kind": "interim", "role": "user", "text": "猴哥", "_at_ms": 1793275966910} +{"v": 2, "seq": 17, "kind": "interim", "role": "user", "text": "你筋", "_at_ms": 1793275967506} +{"v": 2, "seq": 18, "kind": "interim", "role": "user", "text": "斗云", "_at_ms": 1793275968108} +{"v": 2, "seq": 19, "kind": "interim", "role": "user", "text": "块", "_at_ms": 1793275968707} +{"v": 2, "seq": 20, "kind": "interim", "role": "user", "text": "要不", "_at_ms": 1793275969313} +{"v": 2, "seq": 21, "kind": "interim", "role": "user", "text": "先", "_at_ms": 1793275969905} +{"v": 2, "seq": 22, "kind": "interim", "role": "user", "text": "去画个", "_at_ms": 1793275970514} +{"v": 2, "seq": 23, "kind": "user_final", "role": "user", "text": "师傅,哎,这取经路比高,老庄种地还苦,俺老猪饿的能吞下石龙素包子,猴哥,你筋斗云块,要不先去化个缘", "_at_ms": 1793275972886} +{"v": 2, "seq": 24, "kind": "turn_start", "role": "assistant", "text": "", "speech_id": "speech_d7ad586b1cbe", "_at_ms": 1793275976553} +{"v": 2, "seq": 25, "kind": "assistant_interim", "role": "assistant", "text": "好,小十。去化缘", "speech_id": "speech_d7ad586b1cbe", "_at_ms": 1793275977968} +{"v": 2, "seq": 26, "kind": "assistant_final", "role": "assistant", "text": "好,小十。去化缘", "speech_id": "speech_d7ad586b1cbe", "turn_id": "faeccd22-7cbf-48f5-8195-ca34d952c078", "_at_ms": 1793275982556} +{"v": 2, "seq": 27, "kind": "turn_end", "role": "assistant", "text": "", "speech_id": "speech_d7ad586b1cbe", "turn_id": "faeccd22-7cbf-48f5-8195-ca34d952c078", "_at_ms": 1793275982559} +{"v": 2, "seq": 28, "kind": "interim", "role": "user", "text": "盯着你看", "_at_ms": 1793275983928} +{"v": 2, "seq": 29, "kind": "interim", "role": "user", "text": "怎么啦", "_at_ms": 1793275984510} +{"v": 2, "seq": 30, "kind": "user_final", "role": "user", "text": "盯着,你看怎么啦", "_at_ms": 1793275985803} +{"v": 2, "seq": 31, "kind": "turn_start", "role": "assistant", "text": "", "speech_id": "speech_43cf4c5b0e2f", "_at_ms": 1793275985811} +{"v": 2, "seq": 32, "kind": "interim", "role": "user", "text": "难得", "_at_ms": 1793275986014} +{"v": 2, "seq": 33, "kind": "interim", "role": "user", "text": "看你这么", "_at_ms": 1793275986611} +{"v": 2, "seq": 34, "kind": "interim", "role": "user", "text": "有意思的", "_at_ms": 1793275987209} +{"v": 2, "seq": 35, "kind": "assistant_interim", "role": "assistant", "text": "我在", "speech_id": "speech_43cf4c5b0e2f", "_at_ms": 1793275987414} +{"v": 2, "seq": 36, "kind": "interim", "role": "user", "text": "样子", "_at_ms": 1793275987812} +{"v": 2, "seq": 37, "kind": "user_final", "role": "user", "text": "难得看你这么有意思的样子吗", "_at_ms": 1793275988919} +{"v": 2, "seq": 38, "kind": "turn_cancel", "role": "assistant", "text": "", "speech_id": "speech_43cf4c5b0e2f", "reason": "interrupted", "_at_ms": 1793275988927} +{"v": 2, "seq": 39, "kind": "turn_start", "role": "assistant", "text": "", "speech_id": "speech_115a5fca7071", "_at_ms": 1793275989724} +{"v": 2, "seq": 40, "kind": "assistant_interim", "role": "assistant", "text": "我在", "speech_id": "speech_115a5fca7071", "_at_ms": 1793275990928} +{"v": 2, "seq": 41, "kind": "assistant_final", "role": "assistant", "text": "我在", "speech_id": "speech_115a5fca7071", "turn_id": "1cef4c0c-a35e-4864-b0b2-00b002bc5585", "_at_ms": 1793275992765} +{"v": 2, "seq": 42, "kind": "turn_end", "role": "assistant", "text": "", "speech_id": "speech_115a5fca7071", "turn_id": "1cef4c0c-a35e-4864-b0b2-00b002bc5585", "_at_ms": 1793275992768} +{"v": 2, "seq": 43, "kind": "interim", "role": "user", "text": "师", "_at_ms": 1793276004164} +{"v": 2, "seq": 44, "kind": "interim", "role": "user", "text": "傅诶", "_at_ms": 1793276004754} +{"v": 2, "seq": 45, "kind": "interim", "role": "user", "text": "这取", "_at_ms": 1793276005365} +{"v": 2, "seq": 46, "kind": "interim", "role": "user", "text": "经路", "_at_ms": 1793276005968} +{"v": 2, "seq": 47, "kind": "interim", "role": "user", "text": "比高", "_at_ms": 1793276006561} +{"v": 2, "seq": 48, "kind": "interim", "role": "user", "text": "老庄", "_at_ms": 1793276007158} +{"v": 2, "seq": 49, "kind": "interim", "role": "user", "text": "种地", "_at_ms": 1793276007759} +{"v": 2, "seq": 50, "kind": "interim", "role": "user", "text": "还", "_at_ms": 1793276008359} +{"v": 2, "seq": 51, "kind": "interim", "role": "user", "text": "苦俺", "_at_ms": 1793276008956} +{"v": 2, "seq": 52, "kind": "interim", "role": "user", "text": "老猪饿", "_at_ms": 1793276009557} +{"v": 2, "seq": 53, "kind": "interim", "role": "user", "text": "的能", "_at_ms": 1793276010158} +{"v": 2, "seq": 54, "kind": "interim", "role": "user", "text": "吞下石", "_at_ms": 1793276010760} +{"v": 2, "seq": 55, "kind": "interim", "role": "user", "text": "龙素", "_at_ms": 1793276011358} +{"v": 2, "seq": 56, "kind": "interim", "role": "user", "text": "包", "_at_ms": 1793276011954} +{"v": 2, "seq": 57, "kind": "interim", "role": "user", "text": "子猴", "_at_ms": 1793276012570} +{"v": 2, "seq": 58, "kind": "interim", "role": "user", "text": "哥", "_at_ms": 1793276013163} +{"v": 2, "seq": 59, "kind": "interim", "role": "user", "text": "你筋斗", "_at_ms": 1793276013764} +{"v": 2, "seq": 60, "kind": "interim", "role": "user", "text": "云", "_at_ms": 1793276014358} +{"v": 2, "seq": 61, "kind": "interim", "role": "user", "text": "快要", "_at_ms": 1793276014959} +{"v": 2, "seq": 62, "kind": "interim", "role": "user", "text": "不", "_at_ms": 1793276015560} +{"v": 2, "seq": 63, "kind": "interim", "role": "user", "text": "先去", "_at_ms": 1793276016157} +{"v": 2, "seq": 64, "kind": "interim", "role": "user", "text": "画个", "_at_ms": 1793276016762} +{"v": 2, "seq": 65, "kind": "user_final", "role": "user", "text": "师傅,哎,这取经路比高老庄种地还苦,俺老猪饿的能吞下石龙素包子,猴哥,你筋斗云块,要不先去化个缘", "_at_ms": 1793276018979} +{"v": 2, "seq": 66, "kind": "turn_start", "role": "assistant", "text": "", "speech_id": "speech_6ab8dc1b67d0", "_at_ms": 1793276022633} +{"v": 2, "seq": 67, "kind": "assistant_interim", "role": "assistant", "text": "她这会儿没接上话,稍后再试试。你写的话还在。", "speech_id": "speech_6ab8dc1b67d0", "_at_ms": 1793276022670} +{"v": 2, "seq": 68, "kind": "error", "role": "assistant", "text": "她这会儿没接上话,稍后再试试。你写的话还在。", "speech_id": "speech_6ab8dc1b67d0", "_at_ms": 1793276030576} +{"v": 2, "seq": 69, "kind": "turn_cancel", "role": "assistant", "text": "", "speech_id": "speech_6ab8dc1b67d0", "reason": "error_phi", "_at_ms": 1793276030578} diff --git a/docs/rework/hel910/window/db-final.json b/docs/rework/hel910/window/db-final.json new file mode 100644 index 0000000..5ea39e8 --- /dev/null +++ b/docs/rework/hel910/window/db-final.json @@ -0,0 +1,394 @@ +{ + "chat_message": [ + { + "id": 1, + "ts": 1793275110974, + "role": "user", + "text": "我就是个笨蛋派大星,我们一起去抓水母吧,我们一起度过快乐的一天", + "turn_id": "25a72390-7a14-4ea0-821c-01bc87ab684c", + "status": "sent", + "proactive": 0 + }, + { + "id": 2, + "ts": 1793275113739, + "role": "companion", + "text": "好呀,小十。带上小网兜,慢一点也没关系,抓到一只算一只,抓不到就当风陪我们走一趟。", + "turn_id": "25a72390-7a14-4ea0-821c-01bc87ab684c", + "status": "sent", + "proactive": 0 + }, + { + "id": 3, + "ts": 1793275121122, + "role": "user", + "text": "先停下,我用打字跟你说:把你刚才那句还没说完的话作废,改用文字告诉我,你今天想拉我一起做的第一件事是什么?", + "turn_id": "e6732ca0-c56b-4cd2-9e60-5f6b4603cdc6", + "status": "sent", + "proactive": 0 + }, + { + "id": 4, + "ts": 1793275123508, + "role": "companion", + "text": "今天想拉你一起做的第一件事,是找个安静的地方坐下,先一起晒一会儿太阳。", + "turn_id": "e6732ca0-c56b-4cd2-9e60-5f6b4603cdc6", + "status": "sent", + "proactive": 0 + }, + { + "id": 5, + "ts": 1793275181313, + "role": "user", + "text": "师傅,哎,这取经路比高,老庄种地还苦,俺老猪饿的能吞下石龙素包子,猴哥,你筋斗云块,要不先去画个缘", + "turn_id": "c726406d-5476-4c3a-8dac-49b92c86c43e", + "status": "sent", + "proactive": 0 + }, + { + "id": 6, + "ts": 1793275183882, + "role": "companion", + "text": "行啊,小十。去画缘之前,先把那石龙素包子掏出来分我一半。", + "turn_id": "c726406d-5476-4c3a-8dac-49b92c86c43e", + "status": "sent", + "proactive": 0 + }, + { + "id": 7, + "ts": 1793275231037, + "role": "user", + "text": "没错,我就是个笨蛋派大星,我们一起去抓水母吧,我们一起度过快乐的一天", + "turn_id": "e52af134-b80b-4e40-a42f-8aeab4a3a91b", + "status": "sent", + "proactive": 0 + }, + { + "id": 8, + "ts": 1793275233262, + "role": "companion", + "text": "好,小十。先坐下来歇口气,等力气攒够了,再一起去抓水母。", + "turn_id": "e52af134-b80b-4e40-a42f-8aeab4a3a91b", + "status": "sent", + "proactive": 0 + }, + { + "id": 9, + "ts": 1793275235147, + "role": "user", + "text": "等一下,先别把刚才那段长回答说完,我打字补充:只用一句话告诉我你现在的心情,然后安静等我。", + "turn_id": "dc1f3c9d-33da-411f-ae1e-1a2559b150f4", + "status": "sent", + "proactive": 0 + }, + { + "id": 10, + "ts": 1793275236443, + "role": "companion", + "text": "平静。", + "turn_id": "dc1f3c9d-33da-411f-ae1e-1a2559b150f4", + "status": "sent", + "proactive": 0 + }, + { + "id": 11, + "ts": 1793275351015, + "role": "user", + "text": "没错,我就是个笨蛋派大星,我们一起去抓水母吧,我们一起度过快乐的一天", + "turn_id": "188dec6c-e59c-49a5-bf56-ea5a071acf30", + "status": "sent", + "proactive": 0 + }, + { + "id": 12, + "ts": 1793275357616, + "role": "companion", + "text": "好,小十,那就一起。", + "turn_id": "188dec6c-e59c-49a5-bf56-ea5a071acf30", + "status": "sent", + "proactive": 0 + }, + { + "id": 13, + "ts": 1793275976566, + "role": "user", + "text": "师傅,哎,这取经路比高,老庄种地还苦,俺老猪饿的能吞下石龙素包子,猴哥,你筋斗云块,要不先去化个缘", + "turn_id": "faeccd22-7cbf-48f5-8195-ca34d952c078", + "status": "sent", + "proactive": 0 + }, + { + "id": 14, + "ts": 1793275977965, + "role": "companion", + "text": "好,小十。去化缘", + "turn_id": "faeccd22-7cbf-48f5-8195-ca34d952c078", + "status": "sent", + "proactive": 0 + }, + { + "id": 15, + "ts": 1793275985818, + "role": "user", + "text": "盯着,你看怎么啦", + "turn_id": "3100252b-25b4-4090-8ae9-05441b77d69a", + "status": "sent", + "proactive": 0 + }, + { + "id": 16, + "ts": 1793275987410, + "role": "companion", + "text": "我在", + "turn_id": "3100252b-25b4-4090-8ae9-05441b77d69a", + "status": "sent", + "proactive": 0 + }, + { + "id": 17, + "ts": 1793275989727, + "role": "user", + "text": "难得看你这么有意思的样子吗", + "turn_id": "1cef4c0c-a35e-4864-b0b2-00b002bc5585", + "status": "sent", + "proactive": 0 + }, + { + "id": 18, + "ts": 1793275990925, + "role": "companion", + "text": "我在", + "turn_id": "1cef4c0c-a35e-4864-b0b2-00b002bc5585", + "status": "sent", + "proactive": 0 + }, + { + "id": 19, + "ts": 1793276022655, + "role": "user", + "text": "先别把这句长回答生成完,我打字打断你:只用一句话告诉我你现在待在哪个角落。", + "turn_id": "58d03703-cf6b-4699-a4a5-d63a07f38bb4", + "status": "cancelled", + "proactive": 0 + }, + { + "id": 20, + "ts": 1793276022662, + "role": "user", + "text": "师傅,哎,这取经路比高老庄种地还苦,俺老猪饿的能吞下石龙素包子,猴哥,你筋斗云块,要不先去化个缘", + "turn_id": "76a151eb-b2f0-46aa-a533-ae981ae53168", + "status": "failed", + "proactive": 0 + } + ], + "companion": [ + { + "id": 1, + "identity_json": "{\"id\": \"1\", \"relation\": \"朋友\", \"nickname\": \"小十\", \"boundary\": \"尊重彼此的节奏\", \"name\": \"小测\", \"birth\": \"2001-06-15\", \"hour\": \"午时\", \"color\": {\"pillars\": {\"year\": \"辛巳\", \"month\": \"甲午\", \"day\": \"己酉\", \"time\": \"庚午\"}, \"traits\": \"话多、直接、不服管、爱纠正人、温和\", \"calendar\": {\"solar\": \"2001-06-15\", \"lunar\": \"二〇〇一年闰四月廿四\", \"leap_month\": true, \"hour\": \"午时\", \"hour_range\": \"11:00–12:59\", \"calculation_time\": \"12:00\", \"timezone\": \"Asia/Shanghai\", \"rule\": \"按北京时间和所选时辰内的偶数整点排盘;子时取本日00:00。月份按节气分界,未使用出生地或真太阳时。\"}, \"sections\": [{\"id\": \"expression\", \"title\": \"表达与社交节奏\", \"text\": \"熟悉的话题容易带动她主动展开,常借着说出来理清想法。这让交流有热度,但赶着表达时也可能挤掉对方的空间。发现节奏不同时,先复述对方的意思,再继续自己的观点。\", \"basis\": \"取自原档案的表达倾向;结合十神中食神、伤官对应的表达偏移。\"}, {\"id\": \"closeness\", \"title\": \"亲密、安全感与边界\", \"text\": \"她既需要被回应,也需要保留自己的安排。关系稳定时愿意靠近,信息过密时会想留一点空隙;这不是忽冷忽热的定论。把独处和下一次交流的期待说清楚,比反复猜测更有帮助。\", \"basis\": \"取自原档案的独处需求与自主倾向;日主己;五行侧重金、火,十神以食神较显著。\"}, {\"id\": \"repair\", \"title\": \"冲突时的反应与修复\", \"text\": \"发生分歧时,她可能先说明自己的理由,再观察对方是否愿意互相理解。有守住立场的能力,也可能在反复解释中消耗耐心。把事实、感受和希望怎样调整分开说,更容易找到可落实的修复。\", \"basis\": \"取自原档案的对抗、纠正与顺从倾向;没有把分歧当作已发生的记忆。\"}, {\"id\": \"rhythm\", \"title\": \"决策、行动与日常节律\", \"text\": \"她通常既看具体条件,也会给当下的感受留位置。事情明确时愿意推进,存在多种可能时会重新衡量;这种灵活有助于避开僵化,也可能拖延选择。给决定一个小范围和可调整的期限会更稳。\", \"basis\": \"取自原档案的纪律、日常规律、现实感与行动倾向。\"}, {\"id\": \"stress\", \"title\": \"压力下的变化与恢复\", \"text\": \"压力会影响她的回应速度和耐心,但影响不是每次都一样。环境清楚、有可预期的下一步时更容易回稳;反复追问可能增加负担。把刺激减少一点、留出休息,比要求马上恢复原样更合适。\", \"basis\": \"取自原档案由日主强弱形成的敏感度与恢复尺度;不是此刻情绪。\"}, {\"id\": \"growth\", \"title\": \"内在张力与成长空间\", \"text\": \"她更愿意自己判断,不轻易把决定交出去。这有助于保留独立和诚实,也可能让协商听起来像被限制。成长可以是把可商量的部分说清楚:保留立场,同时让对方真正参与,而不是靠退让或控制维持亲近。\", \"basis\": \"取自原档案的自主与顺从之间的组合;成长来自之后真实的相处,不由出生资料预写。\"}], \"interpretation\": \"这是以四柱、五行、十神和已存底色为依据的角色塑造说明,不是对真人性格的测定,也不是已经发生的经历。倾向不等于固定台词或此刻情绪。\"}}" + } + ], + "bazi_core": [ + { + "id": 1, + "birth_input": "{\"birth\": \"2001-06-15\", \"hour\": \"\\u5348\\u65f6\", \"tz\": \"Asia/Shanghai\"}", + "pillars": "{\"year\": \"辛巳\", \"month\": \"甲午\", \"day\": \"己酉\", \"time\": \"庚午\"}", + "day_master": "己", + "day_master_elem": "土", + "ten_gods": "{\"\\u98df\\u795e\": 0.23275862068965517, \"\\u6b63\\u5370\": 0.060344827586206885, \"\\u4f24\\u5b98\": 0.23275862068965517, \"\\u52ab\\u8d22\": 0.060344827586206885, \"\\u6b63\\u5b98\": 0.17241379310344826, \"\\u504f\\u5370\": 0.12068965517241377, \"\\u6bd4\\u80a9\": 0.12068965517241377}", + "element_scores": "{\"\\u6728\": 2.0, \"\\u706b\": 2.4, \"\\u571f\": 2.0, \"\\u91d1\": 2.9, \"\\u6c34\": 0.0}", + "strength": 0.3440860215053763, + "derived": "{\"autonomy\": 0.596551724137931, \"compliance\": 0.2655172413793103, \"expressiveness\": 0.8491379310344828, \"warmth\": 0.6163793103448276, \"anxiety\": 0.5, \"aggression\": 0.5, \"discipline\": 0.6379310344827587, \"correcting\": 0.6206896551724138, \"solitude_need\": 0.596551724137931, \"impulsivity\": 0.5422413793103448, \"sharing\": 0.4698275862068966, \"realism\": 0.5, \"romance\": 0.5, \"generosity\": 0.5, \"routine\": 0.5, \"caretaking\": 0.5422413793103448, \"initiative\": 0.4698275862068966, \"explaining\": 0.42758620689655175, \"sensitivity\": 1.1091397849462368, \"recovery_scale\": 1.1870967741935485, \"trust_floor\": 0.5, \"element_bias\": {\"\\u6728\": 0.2150537634408602, \"\\u706b\": 0.25806451612903225, \"\\u571f\": 0.2150537634408602, \"\\u91d1\": 0.31182795698924726, \"\\u6c34\": 0.0}, \"strength\": 0.3440860215053763}", + "version": 1, + "created_at": 1793274721137 + } + ], + "persona_job": [ + { + "id": 1, + "state": "failed", + "owner": "497d8e3e4cf406995b1cade83f60a652", + "lease_until": 1793274761137, + "reason": "generation_failed", + "provenance": "created-R2" + } + ], + "token_usage": [ + { + "day": "2026-10-29", + "scene": "dialogue_main", + "used": 30398 + } + ], + "request_usage": [ + { + "day": "2026-10-29", + "category": "dialogue", + "requests": 10 + } + ], + "budget_total": [ + { + "key": "total_requests", + "value": 10 + }, + { + "key": "total_tokens", + "value": 30398 + } + ], + "sharing_attempt": [ + { + "message_id": 2, + "turn_id": "25a72390-7a14-4ea0-821c-01bc87ab684c", + "epoch": 1, + "token": "hjEZheK3Eykyk8S_raw2Sft0mQs5sZxp7TooRh3__ys", + "text_hash": "c2ee89ce73cb6f55997b954f03cd91470f9a607ca354860532e3723e1bd5ece4", + "expires_at": 1793361513739, + "ack_at": null, + "candidates": "[]", + "state": "judged", + "selected": "[]", + "lease_until": 1793275175525, + "owner": "ae5b3da4d7b9b6b03d7ddfb95346f842", + "judgment_json": null, + "judged_at": 1793275135525, + "model": null + }, + { + "message_id": 4, + "turn_id": "e6732ca0-c56b-4cd2-9e60-5f6b4603cdc6", + "epoch": 1, + "token": "JKtPmucXVDtidVATDkmd6ms_rtbW-D08yS7Y94XxXsc", + "text_hash": "a40e4cc46410034a74fc7431ca8d77cafb85e7d86a9fab5f0a6d29f5ed73e212", + "expires_at": 1793361523508, + "ack_at": 1793275123516, + "candidates": "[]", + "state": "judged", + "selected": "[]", + "lease_until": 1793275205529, + "owner": "c9bd39978bfbbbe59d5cce108b732313", + "judgment_json": null, + "judged_at": 1793275165529, + "model": null + }, + { + "message_id": 6, + "turn_id": "c726406d-5476-4c3a-8dac-49b92c86c43e", + "epoch": 1, + "token": "StFEeQfEcbAYMvEOLUwGPh9YCEQ2qxDmATLsdQHN0u0", + "text_hash": "6f23aa4e1852ef2035dab15932d38d99980062d7a97234d9c3718cd0c17e08ba", + "expires_at": 1793361583882, + "ack_at": 1793275194491, + "candidates": "[]", + "state": "judged", + "selected": "[]", + "lease_until": 1793275235535, + "owner": "eba70539290f13f67ff79fde51314e78", + "judgment_json": null, + "judged_at": 1793275195535, + "model": null + }, + { + "message_id": 8, + "turn_id": "e52af134-b80b-4e40-a42f-8aeab4a3a91b", + "epoch": 1, + "token": "1XGtAHqxEhUTeLhzdKNdgkkFbDoIcSD-frIktFwcU_Q", + "text_hash": "1e44e181ffd0c8bde7743734d753272842dd62341ae621524f2c99febf00f5a3", + "expires_at": 1793361633262, + "ack_at": null, + "candidates": "[]", + "state": "judged", + "selected": "[]", + "lease_until": 1793275295544, + "owner": "dd352e7cad5af1d483786589dcd03ce5", + "judgment_json": null, + "judged_at": 1793275255544, + "model": null + }, + { + "message_id": 10, + "turn_id": "dc1f3c9d-33da-411f-ae1e-1a2559b150f4", + "epoch": 1, + "token": "bx99mmrkqfhUCyysWSR6j0wyfwFOpb6y6pyRpdjDPno", + "text_hash": "b7123f80eed52f0093c274ac380e9add3834a861915ac462de476bc57b8a1810", + "expires_at": 1793361636443, + "ack_at": 1793275236447, + "candidates": "[]", + "state": "judged", + "selected": "[]", + "lease_until": 1793275325548, + "owner": "e593a91da302170ae178db2f74ad92bb", + "judgment_json": null, + "judged_at": 1793275285548, + "model": null + }, + { + "message_id": 12, + "turn_id": "188dec6c-e59c-49a5-bf56-ea5a071acf30", + "epoch": 1, + "token": "abmkHDipAE1oNFXP9EXQ7za8ukG34ND-OQqtRScdJtM", + "text_hash": "c494f738d3f4b90a713e6d0d847e6c318687dde177d411dc4d27041612870791", + "expires_at": 1793361757616, + "ack_at": 1793275363881, + "candidates": "[]", + "state": "judged", + "selected": "[]", + "lease_until": 1793275415560, + "owner": "a7e1e8951d50df107584bc6d8dd28617", + "judgment_json": null, + "judged_at": 1793275375560, + "model": null + }, + { + "message_id": 14, + "turn_id": "faeccd22-7cbf-48f5-8195-ca34d952c078", + "epoch": 1, + "token": "I246ZrcVFbxsH4TyybQj6m_y7z89z2x0wKrZHU9TWkA", + "text_hash": "9c0869ba62f61e3aa7fbdb3796d7e4105b1ce2b0c67411ad67529c9135a8d9a9", + "expires_at": 1793362377965, + "ack_at": 1793275982559, + "candidates": "[]", + "state": "judged", + "selected": "[]", + "lease_until": 1793276045622, + "owner": "d7332f384d265be5e2fbdf8a3a57809f", + "judgment_json": null, + "judged_at": 1793276005622, + "model": null + }, + { + "message_id": 16, + "turn_id": "3100252b-25b4-4090-8ae9-05441b77d69a", + "epoch": 1, + "token": "maAFv_MreHy8ZXt-zkJCUjpXer0ZBCvfYiZvlwfXpHg", + "text_hash": "33f40475f82bfe083f44e6744917f76acfa69cc8c3fba89c3a03c09c9388cfbd", + "expires_at": 1793362387411, + "ack_at": null, + "candidates": "[]", + "state": "judged", + "selected": "[]", + "lease_until": 1793276075626, + "owner": "17317b2213cade6cb7c57dea1282d655", + "judgment_json": null, + "judged_at": 1793276035626, + "model": null + }, + { + "message_id": 18, + "turn_id": "1cef4c0c-a35e-4864-b0b2-00b002bc5585", + "epoch": 1, + "token": "hc3uDqDF0lxSxjCWZmBgCW-F-co9UofhwhpXf20UrX4", + "text_hash": "33f40475f82bfe083f44e6744917f76acfa69cc8c3fba89c3a03c09c9388cfbd", + "expires_at": 1793362390925, + "ack_at": 1793275992766, + "candidates": "[]", + "state": "judged", + "selected": "[]", + "lease_until": 1793276105630, + "owner": "05a9a9737f9240da765207a0645e0182", + "judgment_json": null, + "judged_at": 1793276065631, + "model": null + } + ] +} \ No newline at end of file diff --git a/docs/rework/hel910/window/dry.json b/docs/rework/hel910/window/dry.json new file mode 100644 index 0000000..33bbae5 --- /dev/null +++ b/docs/rework/hel910/window/dry.json @@ -0,0 +1,48 @@ +{ + "rooms_before": [], + "rooms_mid": [ + "cg-voice-9r5jjmcz0n" + ], + "hangup": { + "delete_status": 200, + "delete_body": { + "ended": true, + "room": "cg-voice-9r5jjmcz0n" + }, + "delete_ms": 1793274802357, + "agent_frames_after_delete": 0, + "room_removed": true + }, + "rooms_after": [], + "budget_after": { + "at_ms": 1793274806882, + "token_usage": [], + "request_usage": [], + "budget_total": [] + }, + "asr_ledger_after": { + "exists": true, + "events": 2, + "raw": [ + { + "kind": "call_start", + "call": "cg-voice-9r5jjmcz0n", + "stream_seq": 1, + "window": "hel910-20261029-a", + "t": 1793274792.96 + }, + { + "kind": "call_end", + "call": "cg-voice-9r5jjmcz0n", + "reason": "error", + "audio_seconds": 0.0, + "confirmed_audio_seconds": 0.0, + "connect_attempts": 0, + "connect_failures": 0, + "connect_retries": 0, + "window": "hel910-20261029-a", + "t": 1793274804.372 + } + ] + } +} \ No newline at end of file diff --git a/docs/rework/hel910/window/post-window.txt b/docs/rework/hel910/window/post-window.txt new file mode 100644 index 0000000..765fb87 --- /dev/null +++ b/docs/rework/hel910/window/post-window.txt @@ -0,0 +1,29 @@ +== HEL-910 post snapshot 2026-10-29T12:16:46Z == +-- ports (83xx/80xx/98xx/788x/10095) -- +LISTEN 0 2048 0.0.0.0:8310 0.0.0.0:* users:(("python",pid=1981,fd=9)) +LISTEN 0 5 0.0.0.0:8300 0.0.0.0:* users:(("python3",pid=1437,fd=3)) +LISTEN 0 2048 0.0.0.0:8350 0.0.0.0:* users:(("python",pid=1984,fd=9)) +LISTEN 0 2048 0.0.0.0:8320 0.0.0.0:* users:(("python",pid=1982,fd=9)) +LISTEN 0 4096 0.0.0.0:10095 0.0.0.0:* users:(("docker-proxy",pid=2542,fd=8)) +LISTEN 0 4096 [::]:10095 [::]:* users:(("docker-proxy",pid=2548,fd=8)) +LISTEN 0 4096 *:7881 *:* users:(("livekit-server",pid=2435,fd=4)) +LISTEN 0 4096 *:7880 *:* users:(("livekit-server",pid=2435,fd=7)) +-- our pids -- +api no pidfile +bridge no pidfile +worker no pidfile +tts9880 no pidfile +-- livekit rooms -- +invalid authorization token +-- voices.json hash + builtin count -- +7b2a50213312c3d0b517a3047434a29890501937178217815812809c3cac4970 /opt/voice-agent/cosyvoice/voices.json +entries: 11 ids: ['default', 'sunwukong', 'nezha', 'bajie', 'haimianbaobao', 'female_soft', 'male_warm', 'xiaoyun', 'rain', 'jiaojiao', 'bailu'] cg- entries: 0 +-- gpu -- +747 MiB, 32607 MiB +-- 8300/8310/8320/8350 untouched check -- +LISTEN 0 2048 0.0.0.0:8310 0.0.0.0:* +LISTEN 0 5 0.0.0.0:8300 0.0.0.0:* +LISTEN 0 2048 0.0.0.0:8350 0.0.0.0:* +LISTEN 0 2048 0.0.0.0:8320 0.0.0.0:* +-- tts.log size -- +27302 bytes 2026-10-29 20:16:37.339409311 +0800 diff --git a/docs/rework/hel910/window/pre-window.txt b/docs/rework/hel910/window/pre-window.txt new file mode 100644 index 0000000..6b4b3ac --- /dev/null +++ b/docs/rework/hel910/window/pre-window.txt @@ -0,0 +1,29 @@ +== HEL-910 pre snapshot 2026-10-29T11:51:06Z == +-- ports (83xx/80xx/98xx/788x/10095) -- +LISTEN 0 2048 0.0.0.0:8310 0.0.0.0:* users:(("python",pid=1981,fd=9)) +LISTEN 0 5 0.0.0.0:8300 0.0.0.0:* users:(("python3",pid=1437,fd=3)) +LISTEN 0 2048 0.0.0.0:8350 0.0.0.0:* users:(("python",pid=1984,fd=9)) +LISTEN 0 2048 0.0.0.0:8320 0.0.0.0:* users:(("python",pid=1982,fd=9)) +LISTEN 0 4096 0.0.0.0:10095 0.0.0.0:* users:(("docker-proxy",pid=2542,fd=8)) +LISTEN 0 4096 [::]:10095 [::]:* users:(("docker-proxy",pid=2548,fd=8)) +LISTEN 0 4096 *:7881 *:* users:(("livekit-server",pid=2435,fd=4)) +LISTEN 0 4096 *:7880 *:* users:(("livekit-server",pid=2435,fd=7)) +-- our pids -- +api no pidfile +bridge no pidfile +worker no pidfile +tts9880 no pidfile +-- livekit rooms -- +invalid authorization token +-- voices.json hash + builtin count -- +7b2a50213312c3d0b517a3047434a29890501937178217815812809c3cac4970 /opt/voice-agent/cosyvoice/voices.json +entries: 11 ids: ['default', 'sunwukong', 'nezha', 'bajie', 'haimianbaobao', 'female_soft', 'male_warm', 'xiaoyun', 'rain', 'jiaojiao', 'bailu'] cg- entries: 0 +-- gpu -- +747 MiB, 32607 MiB +-- 8300/8310/8320/8350 untouched check -- +LISTEN 0 2048 0.0.0.0:8310 0.0.0.0:* +LISTEN 0 5 0.0.0.0:8300 0.0.0.0:* +LISTEN 0 2048 0.0.0.0:8350 0.0.0.0:* +LISTEN 0 2048 0.0.0.0:8320 0.0.0.0:* +-- tts.log size -- +16311 bytes 2026-10-28 20:26:46.181514865 +0800 diff --git a/docs/rework/hel910/window/tts-window.log b/docs/rework/hel910/window/tts-window.log new file mode 100644 index 0000000..2bb6240 --- /dev/null +++ b/docs/rework/hel910/window/tts-window.log @@ -0,0 +1,91 @@ +INFO: 127.0.0.1:60586 - "GET /health HTTP/1.1" 200 OK +INFO: 127.0.0.1:42846 - "GET /health HTTP/1.1" 200 OK +INFO: 127.0.0.1:52016 - "POST /tts HTTP/1.1" 200 OK + 0%| | 0/1 [00:00你是不是早就想睡我了呀, this may lead to bad performance +2026-10-29 20:02:38,073 INFO synthesis text 好,小十,那就一起。 +2026-10-29 20:02:39,630 INFO yield speech len 4.2, rtf 0.3707294804709298 +[cosyvoice] first chunk after 2.003s (好,小十,那就一起。...) + 100%|██████████| 1/1 [00:02<00:00, 2.01s/it] 100%|██████████| 1/1 [00:02<00:00, 2.01s/it] +INFO: 127.0.0.1:39972 - "GET /health HTTP/1.1" 200 OK +INFO: 127.0.0.1:52960 - "GET /health HTTP/1.1" 200 OK +INFO: 127.0.0.1:47530 - "POST /tts HTTP/1.1" 200 OK + 0%| | 0/1 [00:00你是不是早就想睡我了呀, this may lead to bad performance +2026-10-29 20:12:58,439 INFO synthesis text 好,小十。去化缘。 +2026-10-29 20:12:59,596 INFO yield speech len 2.92, rtf 0.3961743557289855 +[cosyvoice] first chunk after 1.610s (好,小十。去化缘...) + 100%|██████████| 1/1 [00:01<00:00, 1.62s/it] 100%|██████████| 1/1 [00:01<00:00, 1.62s/it] +INFO: 127.0.0.1:58028 - "POST /tts HTTP/1.1" 200 OK + 0%| | 0/1 [00:00你是不是早就想睡我了呀, this may lead to bad performance +2026-10-29 20:13:08,478 INFO synthesis text 我在。 +2026-10-29 20:13:09,046 INFO yield speech len 0.84, rtf 0.6765649432227725 +INFO: 127.0.0.1:45692 - "POST /tts HTTP/1.1" 200 OK + + 0%| | 0/1 [00:00你是不是早就想睡我了呀, this may lead to bad performance +2026-10-29 20:13:11,393 INFO synthesis text 我在。 +2026-10-29 20:13:11,888 INFO yield speech len 0.84, rtf 0.5890837737492153 +[cosyvoice] first chunk after 0.952s (我在...) + + 100%|██████████| 1/1 [00:00<00:00, 1.04it/s] 100%|██████████| 1/1 [00:00<00:00, 1.04it/s] +INFO: 127.0.0.1:59420 - "POST /tts HTTP/1.1" 200 OK + + 0%| | 0/1 [00:00你是不是早就想睡我了呀, this may lead to bad performance +2026-10-29 20:13:43,127 INFO synthesis text 她这会儿没接上话,稍后再试试。你写的话还在。 + 0%| | 0/1 [00:35session] interim_transcript: 我就是 +[stt] interim: 一个笨 +[stt->session] interim_transcript: 一个笨 +[stt] interim: 蛋派 +[stt->session] interim_transcript: 蛋派 +[stt] interim: 大星 +[stt->session] interim_transcript: 大星 +[stt] interim: 我们一起 +[stt->session] interim_transcript: 我们一起 +[stt] interim: 去抓水 +[stt->session] interim_transcript: 去抓水 +[stt] interim: 母 +[stt->session] interim_transcript: 母 +[stt] interim: 吧我们一 +[stt->session] interim_transcript: 吧我们一 +[stt] interim: 起度过快 +[stt->session] interim_transcript: 起度过快 +[stt] interim: 乐的一 +[stt->session] interim_transcript: 乐的一 +[stt] FINAL(merged): 我就是个笨蛋派大星,我们一起去抓水母吧,我们一起度过快乐的一天 +[stt->session] final_transcript: 我就是个笨蛋派大星,我们一起去抓水母吧,我们一起度过快乐的一天 +[tts] first audio after 2.147s (好呀,小十。带上小网兜,慢一点也没关系,...) +[stt] interim: 师 +[stt->session] interim_transcript: 师 +[stt] interim: 傅 +[stt->session] interim_transcript: 傅 +[stt] interim: 诶这取 +[stt->session] interim_transcript: 诶这取 +[stt] interim: 经 +[stt->session] interim_transcript: 经 +[stt] interim: 路比高 +[stt->session] interim_transcript: 路比高 +[stt] interim: 老庄 +[stt->session] interim_transcript: 老庄 +[stt] interim: 种地 +[stt->session] interim_transcript: 种地 +[stt] interim: 还 +[stt->session] interim_transcript: 还 +[stt] interim: 苦俺老 +[stt->session] interim_transcript: 苦俺老 +[stt] interim: 猪饿 +[stt->session] interim_transcript: 猪饿 +[stt] interim: 的能吞 +[stt->session] interim_transcript: 的能吞 +[stt] interim: 下石 +[stt->session] interim_transcript: 下石 +[stt] interim: 龙素 +[stt->session] interim_transcript: 龙素 +[stt] interim: 包 +[stt->session] interim_transcript: 包 +[stt] interim: 子猴 +[stt->session] interim_transcript: 子猴 +[stt] interim: 哥你 +[stt->session] interim_transcript: 哥你 +[stt] interim: 筋斗 +[stt->session] interim_transcript: 筋斗 +[stt] interim: 云 +[stt->session] interim_transcript: 云 +[stt] interim: 快要 +[stt->session] interim_transcript: 快要 +[stt] interim: 不 +[stt->session] interim_transcript: 不 +[stt] interim: 先去 +[stt->session] interim_transcript: 先去 +[stt] interim: 画个 +[stt->session] interim_transcript: 画个 +[stt] FINAL(merged): 师傅,哎,这取经路比高,老庄种地还苦,俺老猪饿的能吞下石龙素包子,猴哥,你筋斗云块,要不先去画个缘 +[stt->session] final_transcript: 师傅,哎,这取经路比高,老庄种地还苦,俺老猪饿的能吞下石龙素包子,猴哥,你筋斗云 +[tts] first audio after 2.514s (行啊,小十。去画缘之前,先把那石龙素包子...) +[stt] interim: 没 +[stt->session] interim_transcript: 没 +[stt] interim: 错我 +[stt->session] interim_transcript: 错我 +[stt] interim: 就是个笨 +[stt->session] interim_transcript: 就是个笨 +[stt] interim: 蛋 +[stt->session] interim_transcript: 蛋 +[stt] interim: 派大 +[stt->session] interim_transcript: 派大 +[stt] interim: 星我们一 +[stt->session] interim_transcript: 星我们一 +[stt] interim: 起去抓 +[stt->session] interim_transcript: 起去抓 +[stt] interim: 水母 +[stt->session] interim_transcript: 水母 +[stt] interim: 吧我们 +[stt->session] interim_transcript: 吧我们 +[stt] interim: 一起度过 +[stt->session] interim_transcript: 一起度过 +[stt] interim: 快乐的一 +[stt->session] interim_transcript: 快乐的一 +[stt] interim: 天 +[stt->session] interim_transcript: 天 +[stt] FINAL(merged): 没错,我就是个笨蛋派大星,我们一起去抓水母吧,我们一起度过快乐的一天 +[stt->session] final_transcript: 没错,我就是个笨蛋派大星,我们一起去抓水母吧,我们一起度过快乐的一天 +[stt] interim: 没 +[stt->session] interim_transcript: 没 +[stt] interim: 错我 +[stt->session] interim_transcript: 错我 +[stt] interim: 就是个笨 +[stt->session] interim_transcript: 就是个笨 +[stt] interim: 蛋 +[stt->session] interim_transcript: 蛋 +[stt] interim: 派大 +[stt->session] interim_transcript: 派大 +[stt] interim: 星我们一 +[stt->session] interim_transcript: 星我们一 +[stt] interim: 起去抓 +[stt->session] interim_transcript: 起去抓 +[stt] interim: 水母 +[stt->session] interim_transcript: 水母 +[stt] interim: 吧我们 +[stt->session] interim_transcript: 吧我们 +[stt] interim: 一起度过 +[stt->session] interim_transcript: 一起度过 +[stt] interim: 快乐的一 +[stt->session] interim_transcript: 快乐的一 +[stt] FINAL(merged): 没错,我就是个笨蛋派大星,我们一起去抓水母吧,我们一起度过快乐的一天 +[stt->session] final_transcript: 没错,我就是个笨蛋派大星,我们一起去抓水母吧,我们一起度过快乐的一天 +[tts] first audio after 2.008s (好,小十,那就一起。...) +{"message": "closing agent session due to participant disconnect (disable via `RoomInputOptions.close_on_disconnect=False`)", "level": "INFO", "name": "livekit.agents", "room": "cg-voice-fdk5izk2uz", "participant": "user-wnjxjdyz", "reason": "CLIENT_INITIATED", "pid": 117121, "job_id": "AJ_6ER6CLfrDgjj", "room_id": "RM_kbpdRUqex2LN", "timestamp": "2026-10-29T12:02:44.305190+00:00"} +{"message": "process exiting", "level": "INFO", "name": "livekit.agents", "reason": "room disconnected", "pid": 117121, "job_id": "AJ_6ER6CLfrDgjj", "room": "cg-voice-fdk5izk2uz", "room_id": "RM_kbpdRUqex2LN", "timestamp": "2026-10-29T12:02:46.322112+00:00"} +{"message": "error while shutting down the job\nTraceback (most recent call last):\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/livekit/agents/ipc/job_proc_lazy_main.py\", line 504, in _shutdown_job\n await asyncio.gather(*shutdown_tasks)\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/livekit/agents/ipc/job_proc_lazy_main.py\", line 493, in _traced_shutdown_callback\n await callback(shutdown_info.reason)\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/livekit/agents/job.py\", line 637, in wrapper\n await callback() # type: ignore\n ^^^^^^^^^^^^^^^^\nTypeError: object NoneType can't be used in 'await' expression", "level": "ERROR", "name": "livekit.agents", "exc_info": "Traceback (most recent call last):\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/livekit/agents/ipc/job_proc_lazy_main.py\", line 504, in _shutdown_job\n await asyncio.gather(*shutdown_tasks)\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/livekit/agents/ipc/job_proc_lazy_main.py\", line 493, in _traced_shutdown_callback\n await callback(shutdown_info.reason)\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/livekit/agents/job.py\", line 637, in wrapper\n await callback() # type: ignore\n ^^^^^^^^^^^^^^^^\nTypeError: object NoneType can't be used in 'await' expression", "pid": 117121, "job_id": "AJ_6ER6CLfrDgjj", "room": "cg-voice-fdk5izk2uz", "room_id": "RM_kbpdRUqex2LN", "timestamp": "2026-10-29T12:02:46.322288+00:00"} +{"message": "received job request", "level": "INFO", "name": "livekit.agents", "job_id": "AJ_5Uk4XbETMfVr", "dispatch_id": "AD_i9twJRAXhgHd", "room": "cg-voice-jq8q4zm9h0", "room_id": "RM_XARewyWHLk4R", "agent_name": "cybergril-voice-agent", "resuming": false, "enable_recording": false, "pid": 117034, "timestamp": "2026-10-29T12:10:13.069565+00:00"} +{"message": "initializing process", "level": "INFO", "name": "livekit.agents", "pid": 118637, "timestamp": "2026-10-29T12:10:13.151002+00:00"} +{"message": "process initialized", "level": "INFO", "name": "livekit.agents", "pid": 118637, "elapsed_time": 0.13, "timestamp": "2026-10-29T12:10:13.284159+00:00"} +Nvidia Decoder is supported. +{"message": "adaptive interruption is disabled by default in production mode", "level": "INFO", "name": "livekit.agents", "pid": 117119, "job_id": "AJ_5Uk4XbETMfVr", "room": "cg-voice-jq8q4zm9h0", "room_id": "RM_XARewyWHLk4R", "timestamp": "2026-10-29T12:10:13.485573+00:00"} +{"message": "failed to emit event conversation_item_added\nTraceback (most recent call last):\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/livekit/rtc/event_emitter.py\", line 70, in emit\n callback(*callback_args)\n File \"/opt/cybergril-hel910/current/src/cybergril/voice/worker.py\", line 203, in _on_item\n if ev.item.role == \"assistant\":\n ^^^^^^^^^^^^\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/pydantic/main.py\", line 1105, in __getattr__\n raise AttributeError(f'{type(self).__name__!r} object has no attribute {item!r}')\nAttributeError: 'AgentHandoff' object has no attribute 'role'", "level": "ERROR", "name": "livekit", "exc_info": "Traceback (most recent call last):\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/livekit/rtc/event_emitter.py\", line 70, in emit\n callback(*callback_args)\n File \"/opt/cybergril-hel910/current/src/cybergril/voice/worker.py\", line 203, in _on_item\n if ev.item.role == \"assistant\":\n ^^^^^^^^^^^^\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/pydantic/main.py\", line 1105, in __getattr__\n raise AttributeError(f'{type(self).__name__!r} object has no attribute {item!r}')\nAttributeError: 'AgentHandoff' object has no attribute 'role'", "pid": 117119, "job_id": "AJ_5Uk4XbETMfVr", "room": "cg-voice-jq8q4zm9h0", "room_id": "RM_XARewyWHLk4R", "timestamp": "2026-10-29T12:10:13.487053+00:00"} +[cybergril-worker] session started (api=http://127.0.0.1:8360, voice=rain, agent_name=cybergril-voice-agent, asr_window=(window=hel910-20261029-a audio=264.243/720.000s confirmed=264.243s retries<= 2/call ledger=/opt/cybergril-hel910/asr-usage.jsonl)) +{"message": "received job request", "level": "INFO", "name": "livekit.agents", "job_id": "AJ_kS9dDvnAMCtu", "dispatch_id": "AD_rpzro2wKCVWM", "room": "cg-voice-dlas9zmiox", "room_id": "RM_yzXp5MvjnLxV", "agent_name": "cybergril-voice-agent", "resuming": false, "enable_recording": false, "pid": 117034, "timestamp": "2026-10-29T12:12:36.795242+00:00"} +{"message": "initializing process", "level": "INFO", "name": "livekit.agents", "pid": 119984, "timestamp": "2026-10-29T12:12:36.837621+00:00"} +{"message": "process initialized", "level": "INFO", "name": "livekit.agents", "pid": 119984, "elapsed_time": 0.11, "timestamp": "2026-10-29T12:12:36.952751+00:00"} +Nvidia Decoder is supported. +{"message": "RoomIO linked to participant", "level": "INFO", "name": "livekit.agents", "lk.pii.participant_identity": "user-joobnisb", "lk.pii.room_name": "cg-voice-dlas9zmiox", "pid": 117123, "job_id": "AJ_kS9dDvnAMCtu", "room": "cg-voice-dlas9zmiox", "room_id": "RM_yzXp5MvjnLxV", "timestamp": "2026-10-29T12:12:37.185284+00:00"} +{"message": "adaptive interruption is disabled by default in production mode", "level": "INFO", "name": "livekit.agents", "pid": 117123, "job_id": "AJ_kS9dDvnAMCtu", "room": "cg-voice-dlas9zmiox", "room_id": "RM_yzXp5MvjnLxV", "timestamp": "2026-10-29T12:12:37.186027+00:00"} +{"message": "failed to emit event conversation_item_added\nTraceback (most recent call last):\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/livekit/rtc/event_emitter.py\", line 70, in emit\n callback(*callback_args)\n File \"/opt/cybergril-hel910/current/src/cybergril/voice/worker.py\", line 203, in _on_item\n if ev.item.role == \"assistant\":\n ^^^^^^^^^^^^\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/pydantic/main.py\", line 1105, in __getattr__\n raise AttributeError(f'{type(self).__name__!r} object has no attribute {item!r}')\nAttributeError: 'AgentHandoff' object has no attribute 'role'", "level": "ERROR", "name": "livekit", "exc_info": "Traceback (most recent call last):\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/livekit/rtc/event_emitter.py\", line 70, in emit\n callback(*callback_args)\n File \"/opt/cybergril-hel910/current/src/cybergril/voice/worker.py\", line 203, in _on_item\n if ev.item.role == \"assistant\":\n ^^^^^^^^^^^^\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/pydantic/main.py\", line 1105, in __getattr__\n raise AttributeError(f'{type(self).__name__!r} object has no attribute {item!r}')\nAttributeError: 'AgentHandoff' object has no attribute 'role'", "pid": 117123, "job_id": "AJ_kS9dDvnAMCtu", "room": "cg-voice-dlas9zmiox", "room_id": "RM_yzXp5MvjnLxV", "timestamp": "2026-10-29T12:12:37.186855+00:00"} +[cybergril-worker] session started (api=http://127.0.0.1:8360, voice=rain, agent_name=cybergril-voice-agent, asr_window=(window=hel910-20261029-a audio=264.243/720.000s confirmed=264.243s retries<= 2/call ledger=/opt/cybergril-hel910/asr-usage.jsonl)) +[stt] utterance open, frame sr=24000 +[stt] interim: 师 +[stt->session] interim_transcript: 师 +[stt] interim: 傅 +[stt->session] interim_transcript: 傅 +[stt] interim: 诶这 +[stt->session] interim_transcript: 诶这 +[stt] interim: 取经 +[stt->session] interim_transcript: 取经 +[stt] interim: 路比 +[stt->session] interim_transcript: 路比 +[stt] interim: 高老 +[stt->session] interim_transcript: 高老 +[stt] interim: 庄种地 +[stt->session] interim_transcript: 庄种地 +[stt] interim: 还 +[stt->session] interim_transcript: 还 +[stt] interim: 苦俺 +[stt->session] interim_transcript: 苦俺 +[stt] interim: 老中 +[stt->session] interim_transcript: 老中 +[stt] interim: 饿的能 +[stt->session] interim_transcript: 饿的能 +[stt] interim: 吞下 +[stt->session] interim_transcript: 吞下 +[stt] interim: 石龙 +[stt->session] interim_transcript: 石龙 +[stt] interim: 素包 +[stt->session] interim_transcript: 素包 +[stt] interim: 子 +[stt->session] interim_transcript: 子 +[stt] interim: 猴哥 +[stt->session] interim_transcript: 猴哥 +[stt] interim: 你筋 +[stt->session] interim_transcript: 你筋 +[stt] interim: 斗云 +[stt->session] interim_transcript: 斗云 +[stt] interim: 块 +[stt->session] interim_transcript: 块 +[stt] interim: 要不 +[stt->session] interim_transcript: 要不 +[stt] interim: 先 +[stt->session] interim_transcript: 先 +[stt] interim: 去画个 +[stt->session] interim_transcript: 去画个 +[stt] FINAL(merged): 师傅,哎,这取经路比高,老庄种地还苦,俺老猪饿的能吞下石龙素包子,猴哥,你筋斗云块,要不先去化个缘 +[stt->session] final_transcript: 师傅,哎,这取经路比高,老庄种地还苦,俺老猪饿的能吞下石龙素包子,猴哥,你筋斗云 +[tts] first audio after 1.614s (好,小十。去化缘...) +[stt] interim: 盯着你看 +[stt->session] interim_transcript: 盯着你看 +[stt] interim: 怎么啦 +[stt->session] interim_transcript: 怎么啦 +[stt] FINAL(merged): 盯着,你看怎么啦 +[stt->session] final_transcript: 盯着,你看怎么啦 +[stt] interim: 难得 +[stt->session] interim_transcript: 难得 +[stt] interim: 看你这么 +[stt->session] interim_transcript: 看你这么 +[stt] interim: 有意思的 +[stt->session] interim_transcript: 有意思的 +[stt] interim: 样子 +[stt->session] interim_transcript: 样子 +[stt] FINAL(merged): 难得看你这么有意思的样子吗 +[stt->session] final_transcript: 难得看你这么有意思的样子吗 +{"message": "transcript arrives after turn has been committed. consider raising `min_delay` in the endpointing options to accommodate a slow stt. subsequent occurrences will log at debug level.", "level": "WARNING", "name": "livekit.agents", "pid": 117123, "job_id": "AJ_kS9dDvnAMCtu", "room": "cg-voice-dlas9zmiox", "room_id": "RM_yzXp5MvjnLxV", "timestamp": "2026-10-29T12:13:08.918069+00:00"} +[tts] first audio after 0.957s (我在...) +[stt] interim: 师 +[stt->session] interim_transcript: 师 +[stt] interim: 傅诶 +[stt->session] interim_transcript: 傅诶 +[stt] interim: 这取 +[stt->session] interim_transcript: 这取 +[stt] interim: 经路 +[stt->session] interim_transcript: 经路 +[stt] interim: 比高 +[stt->session] interim_transcript: 比高 +[stt] interim: 老庄 +[stt->session] interim_transcript: 老庄 +[stt] interim: 种地 +[stt->session] interim_transcript: 种地 +[stt] interim: 还 +[stt->session] interim_transcript: 还 +[stt] interim: 苦俺 +[stt->session] interim_transcript: 苦俺 +[stt] interim: 老猪饿 +[stt->session] interim_transcript: 老猪饿 +[stt] interim: 的能 +[stt->session] interim_transcript: 的能 +[stt] interim: 吞下石 +[stt->session] interim_transcript: 吞下石 +[stt] interim: 龙素 +[stt->session] interim_transcript: 龙素 +[stt] interim: 包 +[stt->session] interim_transcript: 包 +[stt] interim: 子猴 +[stt->session] interim_transcript: 子猴 +[stt] interim: 哥 +[stt->session] interim_transcript: 哥 +[stt] interim: 你筋斗 +[stt->session] interim_transcript: 你筋斗 +[stt] interim: 云 +[stt->session] interim_transcript: 云 +[stt] interim: 快要 +[stt->session] interim_transcript: 快要 +[stt] interim: 不 +[stt->session] interim_transcript: 不 +[stt] interim: 先去 +[stt->session] interim_transcript: 先去 +[stt] interim: 画个 +[stt->session] interim_transcript: 画个 +[stt] FINAL(merged): 师傅,哎,这取经路比高老庄种地还苦,俺老猪饿的能吞下石龙素包子,猴哥,你筋斗云块,要不先去化个缘 +[stt->session] final_transcript: 师傅,哎,这取经路比高老庄种地还苦,俺老猪饿的能吞下石龙素包子,猴哥,你筋斗云块 +[tts] first audio after 2.419s (她这会儿没接上话,稍后再试试。你写的话还...) +{"message": "livekit::rtc_engine::rtc_session:704:livekit::rtc_engine::rtc_session - publisher data channel '_reliable' closed unexpectedly", "level": "ERROR", "name": "livekit", "pid": 117123, "job_id": "AJ_kS9dDvnAMCtu", "room": "cg-voice-dlas9zmiox", "room_id": "RM_yzXp5MvjnLxV", "timestamp": "2026-10-29T12:14:01.641609+00:00"} +{"message": "livekit::rtc_engine::rtc_session:704:livekit::rtc_engine::rtc_session - publisher data channel '_lossy' closed unexpectedly", "level": "ERROR", "name": "livekit", "pid": 117123, "job_id": "AJ_kS9dDvnAMCtu", "room": "cg-voice-dlas9zmiox", "room_id": "RM_yzXp5MvjnLxV", "timestamp": "2026-10-29T12:14:01.642771+00:00"} +{"message": "livekit::rtc_engine::rtc_session:704:livekit::rtc_engine::rtc_session - publisher data channel '_data_track' closed unexpectedly", "level": "ERROR", "name": "livekit", "pid": 117123, "job_id": "AJ_kS9dDvnAMCtu", "room": "cg-voice-dlas9zmiox", "room_id": "RM_yzXp5MvjnLxV", "timestamp": "2026-10-29T12:14:01.644140+00:00"} +{"message": "closing agent session due to participant disconnect (disable via `RoomInputOptions.close_on_disconnect=False`)", "level": "INFO", "name": "livekit.agents", "room": "cg-voice-dlas9zmiox", "participant": "user-joobnisb", "reason": "ROOM_DELETED", "pid": 117123, "job_id": "AJ_kS9dDvnAMCtu", "room_id": "RM_yzXp5MvjnLxV", "timestamp": "2026-10-29T12:14:01.658858+00:00"} +{"message": "process exiting", "level": "INFO", "name": "livekit.agents", "reason": "parent process shutdown", "pid": 117123, "job_id": "AJ_kS9dDvnAMCtu", "room": "cg-voice-dlas9zmiox", "room_id": "RM_yzXp5MvjnLxV", "timestamp": "2026-10-29T12:14:03.649239+00:00"} +{"message": "error while shutting down the job\nTraceback (most recent call last):\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/livekit/agents/ipc/job_proc_lazy_main.py\", line 504, in _shutdown_job\n await asyncio.gather(*shutdown_tasks)\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/livekit/agents/ipc/job_proc_lazy_main.py\", line 493, in _traced_shutdown_callback\n await callback(shutdown_info.reason)\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/livekit/agents/job.py\", line 637, in wrapper\n await callback() # type: ignore\n ^^^^^^^^^^^^^^^^\nTypeError: object NoneType can't be used in 'await' expression", "level": "ERROR", "name": "livekit.agents", "exc_info": "Traceback (most recent call last):\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/livekit/agents/ipc/job_proc_lazy_main.py\", line 504, in _shutdown_job\n await asyncio.gather(*shutdown_tasks)\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/livekit/agents/ipc/job_proc_lazy_main.py\", line 493, in _traced_shutdown_callback\n await callback(shutdown_info.reason)\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/livekit/agents/job.py\", line 637, in wrapper\n await callback() # type: ignore\n ^^^^^^^^^^^^^^^^\nTypeError: object NoneType can't be used in 'await' expression", "pid": 117123, "job_id": "AJ_kS9dDvnAMCtu", "room": "cg-voice-dlas9zmiox", "room_id": "RM_yzXp5MvjnLxV", "timestamp": "2026-10-29T12:14:03.649526+00:00"} +{"message": "livekit::rtc_engine::rtc_session:704:livekit::rtc_engine::rtc_session - publisher data channel '_reliable' closed unexpectedly", "level": "ERROR", "name": "livekit", "pid": 117119, "job_id": "AJ_5Uk4XbETMfVr", "room": "cg-voice-jq8q4zm9h0", "room_id": "RM_XARewyWHLk4R", "timestamp": "2026-10-29T12:15:12.157732+00:00"} +{"message": "livekit::rtc_engine::rtc_session:704:livekit::rtc_engine::rtc_session - publisher data channel '_lossy' closed unexpectedly", "level": "ERROR", "name": "livekit", "pid": 117119, "job_id": "AJ_5Uk4XbETMfVr", "room": "cg-voice-jq8q4zm9h0", "room_id": "RM_XARewyWHLk4R", "timestamp": "2026-10-29T12:15:12.158251+00:00"} +{"message": "livekit::rtc_engine::rtc_session:704:livekit::rtc_engine::rtc_session - publisher data channel '_data_track' closed unexpectedly", "level": "ERROR", "name": "livekit", "pid": 117119, "job_id": "AJ_5Uk4XbETMfVr", "room": "cg-voice-jq8q4zm9h0", "room_id": "RM_XARewyWHLk4R", "timestamp": "2026-10-29T12:15:12.158737+00:00"} +{"message": "process exiting", "level": "INFO", "name": "livekit.agents", "reason": "parent process shutdown", "pid": 117119, "job_id": "AJ_5Uk4XbETMfVr", "room": "cg-voice-jq8q4zm9h0", "room_id": "RM_XARewyWHLk4R", "timestamp": "2026-10-29T12:15:14.162493+00:00"} +{"message": "error while shutting down the job\nTraceback (most recent call last):\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/livekit/agents/ipc/job_proc_lazy_main.py\", line 504, in _shutdown_job\n await asyncio.gather(*shutdown_tasks)\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/livekit/agents/ipc/job_proc_lazy_main.py\", line 493, in _traced_shutdown_callback\n await callback(shutdown_info.reason)\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/livekit/agents/job.py\", line 637, in wrapper\n await callback() # type: ignore\n ^^^^^^^^^^^^^^^^\nTypeError: object NoneType can't be used in 'await' expression", "level": "ERROR", "name": "livekit.agents", "exc_info": "Traceback (most recent call last):\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/livekit/agents/ipc/job_proc_lazy_main.py\", line 504, in _shutdown_job\n await asyncio.gather(*shutdown_tasks)\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/livekit/agents/ipc/job_proc_lazy_main.py\", line 493, in _traced_shutdown_callback\n await callback(shutdown_info.reason)\n File \"/opt/voice-agent/agent/venv/lib/python3.12/site-packages/livekit/agents/job.py\", line 637, in wrapper\n await callback() # type: ignore\n ^^^^^^^^^^^^^^^^\nTypeError: object NoneType can't be used in 'await' expression", "pid": 117119, "job_id": "AJ_5Uk4XbETMfVr", "room": "cg-voice-jq8q4zm9h0", "room_id": "RM_XARewyWHLk4R", "timestamp": "2026-10-29T12:15:14.162511+00:00"} +{"message": "draining worker", "level": "INFO", "name": "livekit.agents", "id": "AW_EmnniB7z9YMD", "timeout": 3600, "pid": 117034, "timestamp": "2026-10-29T12:16:00.200546+00:00"} +{"message": "shutting down worker", "level": "INFO", "name": "livekit.agents", "id": "AW_EmnniB7z9YMD", "pid": 117034, "timestamp": "2026-10-29T12:16:00.200808+00:00"}