From dc7c91800eb5922cbd5678fbbae5270020bed035 Mon Sep 17 00:00:00 2001 From: vee Date: Tue, 4 Aug 2026 17:51:38 +0800 Subject: [PATCH] feat: integrate cabin CAN and verified dynamic seat modes --- .gitignore | 9 + README.md | 4 +- apps/web-console/app.js | 165 +- apps/web-console/index.html | 10 +- apps/web-console/service-worker.js | 6 +- apps/web-console/styles.css | 53 + .../hil/cabin_dual_channel_hil_20260804.json | 87 + ...adle_rev10_continuous_cruise_20260804.json | 63 + .../hil/dynamic_cradle_rev9_20260804.json | 88 + .../hil/rocking_horse_rev11_20260804.json | 343 + ...orse_rev12_cushion_amplitude_20260804.json | 343 + ...ev13_horizontal_compensation_20260804.json | 343 + ...seat_frontend_hil_20260801_final_rev6.json | 2214 +++ ...frontend_hil_20260801_final_rev6_safe.json | 1980 +++ .../hil/seat_frontend_hil_20260801_run1.json | 3352 ++++ .../hil/seat_frontend_hil_20260801_run2.json | 3124 ++++ ...seat_frontend_hil_20260801_run3_modes.json | 764 + ...at_frontend_hil_20260801_run4_m0_home.json | 240 + ...ontend_hil_20260801_run5_m0_home_rev5.json | 62 + ...ontend_hil_20260801_run6_m0_home_rev5.json | 240 + ..._20260801_run7_rev6_flash_thermal_off.json | 363 + ..._20260802_all_modes_after_timeout_fix.json | 1402 ++ ...d_hil_20260802_all_modes_post_cleanup.json | 250 + ...20260802_gpt56_position_sync_targeted.json | 364 + ..._hil_20260802_post_suite_zero_cleanup.json | 250 + ...l_20260802_preflight_firmware_restore.json | 363 + ...hil_20260802_timeout_fix_post_cleanup.json | 250 + ...0260802_timeout_fix_precondition_zero.json | 250 + ...tend_hil_20260802_user_requested_run3.json | 3888 ++++ ...rontend_hil_20260802_user_retest_run2.json | 3888 ++++ ...hil_20260802_zero_gravity_timeout_fix.json | 252 + artifacts/hil/seat_frontend_hil_cleanup.json | 250 + artifacts/hil/seat_frontend_hil_latest.json | 14719 ++++++++++++++++ .../hil/seat_relative_motion_regression.json | 1827 ++ .../hil/seat_zero_gravity_regression.json | 252 + .../environments/t2g_cabin_bench.example.yaml | 37 + .../environments/t2g_seat_bench.example.yaml | 2 +- .../vehicles/denza_n7/dynamic_cradle.yaml | 82 + .../vehicles/denza_n7/rocking_horse.yaml | 103 + config/native_can_capabilities/door.yaml | 21 + .../interior_light.yaml | 35 + config/native_can_capabilities/outlet.yaml | 27 + config/native_can_capabilities/window.yaml | 35 + contracts/schemas/command-plan.schema.json | 14 + docs/workflows/t2g-cabin-dual-channel-can.md | 53 + docs/workflows/t2g-seat-hardware-bench.md | 18 +- domains/climate/config/capabilities.yaml | 18 +- .../schemas/function-parameters.schema.json | 25 +- domains/roof/config/capabilities.yaml | 12 + .../schemas/function-parameters.schema.json | 11 + .../seat/can/seat-motion-hardware-matrix.yaml | 12 + domains/seat/can/signal-mapping.hardware.yaml | 22 +- domains/seat/config/capabilities.yaml | 42 +- .../schemas/function-parameters.schema.json | 29 +- domains/seat/src/seat_domain/compiler.py | 45 +- domains/seat/src/seat_domain/executor.py | 65 + domains/seat/src/seat_domain/generator.py | 69 + .../seat/src/seat_domain/hardware_compiler.py | 69 +- .../seat/src/seat_domain/hardware_executor.py | 101 +- domains/seat/src/seat_domain/validator.py | 15 + .../tests/integration/test_seat_service.py | 35 + domains/seat/tests/unit/test_t2g_hardware.py | 147 +- .../App/seat_dynamic_mode.c | 679 + .../App/seat_dynamic_mode.h | 49 + .../App/seat_motor_manager.c | 174 +- .../App/seat_motor_manager.h | 24 + .../App/seat_move_application.c | 195 +- .../Config/seat_dynamic_mode_config.h | 55 + .../Config/seat_move_config.h | 16 +- .../Docs/README_Seat_Controller_demo.md | 19 +- .../Docs/座椅控制器_CAN_测试规范.md | 40 +- .../Driver/motor_control.c | 125 +- .../IAR/Seat_Controller_demo.ewp | 6 + .../IAR/rev_d/Exe/Seat_Controller_demo.hex | 6916 ++++---- .../IAR/rev_d/Exe/Seat_Controller_demo.out | Bin 2273140 -> 2339808 bytes .../IAR/rev_d/Exe/Seat_Controller_demo.sim | Bin 56819 -> 60432 bytes .../Tests/manual_hil/07_dynamic_modes.py | 577 + .../Tests/manual_hil/README_CN.md | 20 + .../Tests/manual_hil/hil_common.py | 23 +- .../t2g_cabin_bench/calibration/body_can.yaml | 51 + .../can/dbc/vehicle-native.dbc | 88 + platforms/t2g_cabin_bench/manifest.yaml | 26 + .../t2g_seat_bench/calibration/seat.yaml | 16 + platforms/t2g_seat_bench/can/dbc/seat.dbc | 12 + .../application/capability_registry.py | 20 +- .../application/conversation_state.py | 29 + .../application/mode_profile.py | 209 +- .../application/model_plan_adapter.py | 122 +- .../application/native_can_intent.py | 348 + .../application/native_can_runtime.py | 864 + .../application/seat_service.py | 486 +- .../infrastructure/can/gateway.py | 220 +- .../infrastructure/can/hardware.py | 231 +- .../infrastructure/can/zlgcan_bridge.py | 289 +- .../infrastructure/firmware/t2g_seat.py | 107 +- tests/e2e/test_seat_web_api.py | 4 +- tests/integration/test_multidomain_service.py | 6 +- tests/unit/test_mode_profile.py | 100 + tests/unit/test_native_can_integration.py | 167 + 99 files changed, 51897 insertions(+), 3618 deletions(-) create mode 100644 artifacts/hil/cabin_dual_channel_hil_20260804.json create mode 100644 artifacts/hil/dynamic_cradle_rev10_continuous_cruise_20260804.json create mode 100644 artifacts/hil/dynamic_cradle_rev9_20260804.json create mode 100644 artifacts/hil/rocking_horse_rev11_20260804.json create mode 100644 artifacts/hil/rocking_horse_rev12_cushion_amplitude_20260804.json create mode 100644 artifacts/hil/rocking_horse_rev13_horizontal_compensation_20260804.json create mode 100644 artifacts/hil/seat_frontend_hil_20260801_final_rev6.json create mode 100644 artifacts/hil/seat_frontend_hil_20260801_final_rev6_safe.json create mode 100644 artifacts/hil/seat_frontend_hil_20260801_run1.json create mode 100644 artifacts/hil/seat_frontend_hil_20260801_run2.json create mode 100644 artifacts/hil/seat_frontend_hil_20260801_run3_modes.json create mode 100644 artifacts/hil/seat_frontend_hil_20260801_run4_m0_home.json create mode 100644 artifacts/hil/seat_frontend_hil_20260801_run5_m0_home_rev5.json create mode 100644 artifacts/hil/seat_frontend_hil_20260801_run6_m0_home_rev5.json create mode 100644 artifacts/hil/seat_frontend_hil_20260801_run7_rev6_flash_thermal_off.json create mode 100644 artifacts/hil/seat_frontend_hil_20260802_all_modes_after_timeout_fix.json create mode 100644 artifacts/hil/seat_frontend_hil_20260802_all_modes_post_cleanup.json create mode 100644 artifacts/hil/seat_frontend_hil_20260802_gpt56_position_sync_targeted.json create mode 100644 artifacts/hil/seat_frontend_hil_20260802_post_suite_zero_cleanup.json create mode 100644 artifacts/hil/seat_frontend_hil_20260802_preflight_firmware_restore.json create mode 100644 artifacts/hil/seat_frontend_hil_20260802_timeout_fix_post_cleanup.json create mode 100644 artifacts/hil/seat_frontend_hil_20260802_timeout_fix_precondition_zero.json create mode 100644 artifacts/hil/seat_frontend_hil_20260802_user_requested_run3.json create mode 100644 artifacts/hil/seat_frontend_hil_20260802_user_retest_run2.json create mode 100644 artifacts/hil/seat_frontend_hil_20260802_zero_gravity_timeout_fix.json create mode 100644 artifacts/hil/seat_frontend_hil_cleanup.json create mode 100644 artifacts/hil/seat_frontend_hil_latest.json create mode 100644 artifacts/hil/seat_relative_motion_regression.json create mode 100644 artifacts/hil/seat_zero_gravity_regression.json create mode 100644 config/environments/t2g_cabin_bench.example.yaml create mode 100644 config/modes/vehicles/denza_n7/dynamic_cradle.yaml create mode 100644 config/modes/vehicles/denza_n7/rocking_horse.yaml create mode 100644 config/native_can_capabilities/door.yaml create mode 100644 config/native_can_capabilities/interior_light.yaml create mode 100644 config/native_can_capabilities/outlet.yaml create mode 100644 config/native_can_capabilities/window.yaml create mode 100644 docs/workflows/t2g-cabin-dual-channel-can.md create mode 100644 firmware/t2g/Seat_Controller_demo/App/seat_dynamic_mode.c create mode 100644 firmware/t2g/Seat_Controller_demo/App/seat_dynamic_mode.h create mode 100644 firmware/t2g/Seat_Controller_demo/Config/seat_dynamic_mode_config.h create mode 100644 firmware/t2g/Seat_Controller_demo/Tests/manual_hil/07_dynamic_modes.py create mode 100644 platforms/t2g_cabin_bench/calibration/body_can.yaml create mode 100644 platforms/t2g_cabin_bench/can/dbc/vehicle-native.dbc create mode 100644 platforms/t2g_cabin_bench/manifest.yaml create mode 100644 src/cognitive_agent/application/native_can_intent.py create mode 100644 src/cognitive_agent/application/native_can_runtime.py create mode 100644 tests/unit/test_native_can_integration.py diff --git a/.gitignore b/.gitignore index de151f0..fdcb64e 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,13 @@ tmp/*.log .codex_tmp/ firmware/t2g/Seat_Controller_demo/Tests/manual_hil/logs/ firmware/t2g/Seat_Controller_demo/Tests/manual_hil/seat_function_runtime/ +artifacts/hil/*_server_*.log +firmware/t2g/Seat_Controller_demo/IAR/settings/ +firmware/t2g/Seat_Controller_demo/IAR/Seat_Controller_demo.eww +firmware/t2g/Seat_Controller_demo/IAR/rev_d/.Seat_Controller_demo_build_cache +firmware/t2g/Seat_Controller_demo/IAR/rev_d/.ninja_deps +firmware/t2g/Seat_Controller_demo/IAR/rev_d/.ninja_log +firmware/t2g/Seat_Controller_demo/IAR/rev_d/BrowseInfo/ +firmware/t2g/Seat_Controller_demo/IAR/rev_d/List/ +firmware/t2g/Seat_Controller_demo/IAR/rev_d/Obj/ firmware/t2g/tviibh8m/src/examples/crypto/ClientRunsOnCM7_0/RSA/key_data/private_key*.pem diff --git a/README.md b/README.md index 00759b3..b405840 100755 --- a/README.md +++ b/README.md @@ -77,6 +77,8 @@ artifacts/runs// ## 可执行领域 +座椅与空调等车身设备使用同一 ZLG CAN 盒双通道联动时,参见 [T2G 座椅与车身双通道 CAN 联动](docs/workflows/t2g-cabin-dual-channel-can.md)。 + 当前已接入四个相互隔离的可执行领域: - 座椅:所有热管理、位置移动和姿态预设能力仅面向副驾;未指定座位时默认副驾,显式主驾请求拒绝执行。 @@ -134,4 +136,4 @@ PYTHONPATH=src python -m cognitive_agent.auth generate-secret 完整能力边界、矩阵解释和验收用例见 [座椅阶段一交付](docs/workflows/seat-stage1-delivery.md)。 -已验证的 T2G 加热、通风和四电机能力已完整纳入 `firmware/t2g`,包括 IAR 工程及仓库内 `common/tviibh8m` 构建依赖。M0/M1/M2/M3 分别对应水平、坐盆、靠背和腿托;真实硬件请求先被动核对新版周期反馈与 480/374/917/647 Hall 量程,未检测到匹配固件时默认通过 IAR C-SPY 自动烧写并复验,再发送 CAN 并等待真实回读。当前前端、能力注册、编译、安全门禁和状态反馈只允许副驾 `passenger/front_right`;固件中的 `Driver_Seat_*` 仅是板端既有协议字段名。构建、ZLG bridge、接线、安全门禁、前端测试集和已知量程归零见 [T2G 座椅真实硬件台架接入](docs/workflows/t2g-seat-hardware-bench.md) 与 [前端能力测试集](docs/testing/t2g-seat-frontend-test-suite.md)。 +已验证的 T2G 加热、通风、四电机和原生动态模式能力已完整纳入 `firmware/t2g`,包括 IAR 工程及仓库内 `common/tviibh8m` 构建依赖。M0/M1/M2/M3 分别对应水平、坐盆、靠背和腿托;revision 13通过`0x306`反馈带斜向耦合补偿的木马模式与四轴全程联动动态摇篮的阶段/循环状态。木马模式围绕中间姿态在`[270,250,460,400]`和`[370,130,540,460]`之间连续俯仰往复:坐盆峰峰行程120 Hall、约18 mm垂直分量,水平峰峰行程100 Hall、90%巡航Duty,用额外水平行程抵消坐盆斜向运动约16.4 mm的反向水平分量;参数集中在`seat_dynamic_mode_config.h`并由N7长期库镜像。动态模式收到一次启动命令后由ECU连续循环,收到停止/全停命令或累计运行10分钟时停止;目标到位式阶段在底层堵转/无运动保护继续生效的前提下使用独立保护窗口。真实硬件请求先被动核对新版周期反馈与 480/374/917/647 Hall 量程,未检测到匹配固件时默认通过 IAR C-SPY 自动烧写并复验,再发送 CAN 并等待真实回读。当前前端、能力注册、编译、安全门禁和状态反馈只允许副驾 `passenger/front_right`;固件中的 `Driver_Seat_*` 仅是板端既有协议字段名。构建、ZLG bridge、接线、安全门禁、前端测试集和已知量程归零见 [T2G 座椅真实硬件台架接入](docs/workflows/t2g-seat-hardware-bench.md) 与 [前端能力测试集](docs/testing/t2g-seat-frontend-test-suite.md)。 diff --git a/apps/web-console/app.js b/apps/web-console/app.js index 5d62da1..01b8085 100755 --- a/apps/web-console/app.js +++ b/apps/web-console/app.js @@ -2641,7 +2641,7 @@ function updateSeatFeedbackModeLabel() { } function selectExecutionMode(mode) { - if (mode === "hardware" && !state.runtime?.hardware?.configured) return; + if (mode === "hardware" && !(state.runtime?.hardware?.configured && state.runtime?.vehicle_can?.configured)) return; if (mode === "simulated_hardware" && !state.runtime?.simulated_hardware?.enabled) return; state.executionMode = mode; $$('[data-execution-mode]').forEach((button) => { @@ -2663,7 +2663,7 @@ function selectExecutionMode(mode) { ? "真实台架安全门禁" : simulatedHardware ? "模拟台架隔离边界" : "虚拟执行边界"; $("#safetyText").textContent = hardware - ? "副驾座椅映射到统一实体执行器;绝对位置会实时检查板端标定,小幅相对移动可走受限定时/Hall 回读,异常会尝试 STOP_ALL。" + ? "同一 CAN 盒由单进程持有:通道 0 控制副驾座椅并校验板端反馈,通道 1 以 ISO CAN FD 500 kbit/s / 2 Mbit/s 控制空调等车身设备并校验状态帧。" : simulatedHardware ? "故障只注入执行报告;物理 CAN、ZLG 适配器和 IAR 固件路径保持关闭。" : "四域 CAN 均为 dry-run,真实发送被强制关闭。"; @@ -2807,6 +2807,11 @@ function modeChipLabel(mode) { : name; } +function modeSecondsLabel(durationMs) { + const seconds = Number(durationMs) / 1000; + return Number.isInteger(seconds) ? String(seconds) : seconds.toFixed(1); +} + function populateModeChips() { const group = $(".mode-chips"); if (!group) return; @@ -2825,7 +2830,41 @@ function populateModeChips() { } button.dataset.modeProfileId = mode.id; button.dataset.modeCommand = `进入${mode.name}`; - button.title = mode.description || mode.name; + const timeline = mode.timeline; + let cycleBadge = $(".mode-cycle-badge", button); + if (["infinite", "until_stopped_or_timeout"].includes(timeline?.repeat)) { + if (!cycleBadge) { + cycleBadge = document.createElement("small"); + cycleBadge.className = "mode-cycle-badge"; + button.append(cycleBadge); + } + const runtimeMinutes = Number(timeline.max_runtime_ms || 0) / 60000; + const runtimeLabel = Number.isInteger(runtimeMinutes) + ? String(runtimeMinutes) + : runtimeMinutes.toFixed(1); + const cycleDurationMs = Number(timeline.cycle_duration_ms || 0); + const cycleLabel = cycleDurationMs > 0 + ? `${modeSecondsLabel(cycleDurationMs)}s循环` + : "目标到位循环"; + cycleBadge.textContent = runtimeMinutes > 0 + ? `${cycleLabel} · 最长${runtimeLabel}min` + : cycleLabel; + button.dataset.modeBehavior = "cyclic"; + } else if (cycleBadge) { + cycleBadge.remove(); + } + const phaseSummary = Array.isArray(timeline?.phases) + ? timeline.phases.map((phase) => { + if (Number(phase.duration_ms || 0) > 0) { + return `${phase.name} ${modeSecondsLabel(phase.duration_ms)}s`; + } + const timeout = Number(phase.timeout_ms || 0); + return timeout > 0 + ? `${phase.name} 目标到位(保护上限${modeSecondsLabel(timeout)}s)` + : `${phase.name} 目标到位`; + }).join(" → ") + : ""; + button.title = [mode.description || mode.name, phaseSummary].filter(Boolean).join("\n"); }); refreshIcons(); } @@ -2864,6 +2903,8 @@ async function loadRuntime() { populateVehicleSelector(); populateModeChips(); const hardware = state.runtime.hardware || {}; + const vehicleCan = state.runtime.vehicle_can || {}; + const linkedHardwareReady = Boolean(hardware.configured && vehicleCan.configured); const badge = $("#modelBadge"); const gptButton = $('[data-provider="openai"]'); if (state.runtime.openai_available) { @@ -2882,7 +2923,7 @@ async function loadRuntime() { } $("#matrixCount").textContent = `${state.runtime.matrix.messages} / ${state.runtime.matrix.signals}`; const hardwareButton = $("#hardwareMode"); - hardwareButton.disabled = !hardware.configured; + hardwareButton.disabled = !linkedHardwareReady; const simulation = state.runtime.simulated_hardware || {}; $("#simulationMode").disabled = !simulation.enabled; $("#simulationMode").title = simulation.enabled @@ -2897,23 +2938,23 @@ async function loadRuntime() { const accessText = hardware.access_policy === "local_approval_idle_lease" ? ` · 本地审批 · 空闲 ${hardware.access_inactivity_timeout_seconds || 180} 秒自动停止` : ""; - $("#hardwareNote").textContent = hardware.configured - ? `${hardware.backend} · ${hardware.bitrate / 1000} kbit/s · ${profileText} · ${flashText} · ${approvalText}${accessText}${concurrencyText}` - : `真实执行已锁定:${profileText};请完成服务端启用、适配器、固件镜像${hardware.approval_required ? "和令牌" : ""}配置`; - $("#hardwareAliasNote").textContent = "副驾座椅 → t2g_primary_seat(统一电机、加热和通风执行器)"; + $("#hardwareNote").textContent = linkedHardwareReady + ? `${hardware.backend} · CH${hardware.channel} 座椅 ${hardware.bitrate / 1000} kbit/s · CH${vehicleCan.channel} 车身 CAN FD ${vehicleCan.arbitration.bitrate / 1000}k/${vehicleCan.data.bitrate / 1000000}M · ${profileText} · ${flashText} · ${approvalText}${accessText}${concurrencyText}` + : `联动真实执行已锁定:${profileText};请完成座椅固件、双通道 ZLG 适配器、车身 CAN FD${hardware.approval_required ? "和令牌" : ""}配置`; + $("#hardwareAliasNote").textContent = "CH0 → 副驾座椅控制器 · CH1 → 空调/车窗/门锁/灯光/遮阳帘(ISO CAN FD)"; $("#autoFlashNote").textContent = hardware.auto_flash_enabled ? "未检测到匹配固件时,将在发送座椅控制帧前通过 IAR C-SPY 自动烧录并重新验证。" : "仅接受周期反馈与四轴量程签名匹配的统一固件;需要自动烧录时请启用服务端开关。"; - $("#hardwareBadge").className = `status-badge ${hardware.configured ? "" : "danger"}`.trim(); - $("#hardwareBadge").innerHTML = hardware.configured - ? '硬件已配置' + $("#hardwareBadge").className = `status-badge ${linkedHardwareReady ? "" : "danger"}`.trim(); + $("#hardwareBadge").innerHTML = linkedHardwareReady + ? '双通道已配置' : '硬件锁定'; - $("#hardwareCoverage").textContent = hardware.configured - ? `可选 · ${approvalText}${accessText}${concurrencyText}` + $("#hardwareCoverage").textContent = linkedHardwareReady + ? `CH0 座椅 + CH${vehicleCan.channel} 车身 · ${approvalText}${accessText}${concurrencyText}` : "已阻断"; - $("#hardwareCoverage").className = hardware.configured ? "available" : "blocked"; + $("#hardwareCoverage").className = linkedHardwareReady ? "available" : "blocked"; const modeAvailable = state.executionMode === "hardware" - ? hardware.configured + ? linkedHardwareReady : state.executionMode === "simulated_hardware" ? simulation.enabled : true; @@ -3136,6 +3177,20 @@ function mergeSeatActuatorState(previousState, patchState) { mergedSeat.position = mergedPosition; return; } + if (feature === "dynamic_mode") { + const item = $(`.seat-card[data-seat="${seat}"] [data-dynamic-mode]`); + if (!item) return; + const running = value.state === "running"; + item.classList.toggle("running", running); + const runtimeMinutes = Number(value.max_runtime_ms || 600000) / 60000; + const runtimeLabel = Number.isInteger(runtimeMinutes) + ? String(runtimeMinutes) + : runtimeMinutes.toFixed(1); + $("b", item).textContent = running + ? `${value.name} · 循环中 · 最长${runtimeLabel}分钟` + : "未运行"; + return; + } mergedSeat[feature] = value && typeof value === "object" && !Array.isArray(value) ? { ...(previousSeat[feature] || {}), ...value } : value; @@ -3317,6 +3372,10 @@ const CONFIG_DOMAIN_META = { climate: { label: "空调", icon: "fan", className: "climate" }, ambient_light: { label: "氛围灯", icon: "lamp-ceiling", className: "ambient" }, roof: { label: "智能天幕", icon: "panels-top-left", className: "roof" }, + door: { label: "车门锁", icon: "door-open", className: "generic" }, + window: { label: "车窗", icon: "panels-top-left", className: "generic" }, + outlet: { label: "电动风口", icon: "wind", className: "climate" }, + interior_light: { label: "车内灯", icon: "lightbulb", className: "ambient" }, }; const CONFIG_CAPABILITY_LABELS = { @@ -3328,6 +3387,8 @@ const CONFIG_CAPABILITY_LABELS = { "seat.set_backrest_recline": "调节靠背角度", "seat.set_legrest_height": "调节腿托角度", "seat.set_legrest_extension": "调节腿托伸缩", + "seat.start_dynamic_mode": "启动动态座椅模式", + "seat.stop_dynamic_mode": "停止动态座椅模式", "climate.set_temperature": "设置空调温度", "climate.set_fan_level": "设置空调风量", "climate.set_power": "设置空调电源", @@ -3335,6 +3396,15 @@ const CONFIG_CAPABILITY_LABELS = { "climate.set_cycle_mode": "设置内外循环", "climate.set_outlet_mode": "设置出风模式", "climate.set_front_defrost": "设置前风挡除霜", + "climate.set_control_mode": "设置空调控制模式", + "door.set_rear_lock": "设置后排门锁", + "window.set_motion": "控制车窗动作", + "window.set_position": "设置车窗开度", + "outlet.set_position_percent": "设置电动风口位置", + "outlet.set_calibrated_position": "设置电动风口标定位置", + "interior_light.set_indoor_power": "设置室内灯", + "interior_light.set_wall_power": "设置壁灯", + "interior_light.set_reading_power": "设置阅读灯", "ambient_light.set_power": "设置氛围灯电源", "ambient_light.set_illumination": "设置氛围灯颜色与亮度", "ambient_light.set_color": "设置氛围灯颜色", @@ -3342,6 +3412,7 @@ const CONFIG_CAPABILITY_LABELS = { "ambient_light.set_mode": "设置氛围灯模式", "roof.set_transmittance": "设置天幕透光率", "roof.set_shade_position": "设置遮阳帘位置", + "roof.set_shade_motion": "控制遮阳帘动作", "roof.set_automatic_dimming": "设置自动调光", }; @@ -3361,6 +3432,7 @@ const CONFIG_PARAMETER_LABELS = { cycle_mode: "循环模式", outlet_mode: "出风模式", mode: "工作模式", + mode_id: "固件模式编号", }; function makeConfigElement(tagName, className, textValue) { @@ -3427,8 +3499,13 @@ function renderConfigCards(result) { const container = $("#configCards"); container.replaceChildren(); const entries = configEntries(result); - const operations = entries.flatMap(([domain, config]) => ( - (config?.spec?.operations || []).map((operation) => ({ domain, config, operation })) + const operations = entries.flatMap(([configKey, config]) => ( + (config?.spec?.operations || []).map((operation) => ({ + configKey, + domain: config?.spec?.domain || configKey, + config, + operation, + })) )); if (!operations.length) { const empty = makeConfigElement("div", "config-empty"); @@ -3457,7 +3534,7 @@ function renderConfigCards(result) { sceneSummary.append(sceneCopy, sceneStats); container.append(sceneSummary); - operations.forEach(({ domain, config, operation }, index) => { + operations.forEach(({ configKey, domain, config, operation }, index) => { const meta = CONFIG_DOMAIN_META[domain] || { label: domain, icon: "box", className: "generic" }; const card = makeConfigElement("article", `config-card config-${meta.className}`); const header = makeConfigElement("header", "config-card-header"); @@ -3499,7 +3576,7 @@ function renderConfigCards(result) { }); parametersBlock.append(parameterGrid); - const plan = planForDomain(result, domain); + const plan = planForDomain(result, configKey); const allCommands = plan?.spec?.commands || []; const matchedCommands = allCommands.filter((command) => !command.operation_ref || command.operation_ref === operation.id); const command = matchedCommands[0] || null; @@ -3528,10 +3605,16 @@ function renderConfigCards(result) { hardwareBlock.append(signalList); const footer = makeConfigElement("footer", "config-card-footer"); + const executionScope = config.metadata?.labels?.execution_scope; + const executionScopeLabel = result.execution_mode === "hardware" && domain === "seat" + ? "座椅 CAN · CH0" + : executionScope === "vehicle_can_channel_1" + ? "车身 CAN · CH1" + : executionScope === "virtual_only" ? "仅虚拟执行" : "已通过配置校验"; footer.append( makeConfigElement("span", "", `超时 ${operation.timeout_ms ?? "--"} ms`), makeConfigElement("span", "", operation.failure_policy === "continue" ? "失败后继续" : "失败即中止"), - makeConfigElement("span", "", config.metadata?.labels?.execution_scope === "virtual_only" ? "仅虚拟执行" : "已通过配置校验"), + makeConfigElement("span", "", executionScopeLabel), ); card.append(header, objectBlock, parametersBlock, hardwareBlock, footer); @@ -3605,7 +3688,8 @@ function renderExecution(result) { return; } const reportSucceeded = report.spec.status === "succeeded"; - summary.className = `execution-summary ${reportSucceeded ? "succeeded" : "failed"}`; + const partiallySucceeded = result.status === "partially_succeeded"; + summary.className = `execution-summary ${reportSucceeded ? "succeeded" : partiallySucceeded ? "partial" : "failed"}`; const presetSave = Boolean(result.preset_config); const modeSave = Boolean(result.mode_profile); const simulatedHil = report.metadata?.labels?.seat_feedback === "simulated_hardware"; @@ -3614,6 +3698,10 @@ function renderExecution(result) { const motionCount = report.spec.results.filter((item) => item.telemetry?.motion_axis).length; const firmwareResult = report.spec.results.find((item) => item.telemetry?.firmware_verified); const operationResults = report.spec.results.filter((item) => item.ref !== "seat-controller-firmware"); + const succeededOperations = operationResults.filter((item) => item.status === "succeeded"); + const failedOperations = operationResults.filter((item) => item.status === "failed"); + const succeededDomains = [...new Set(succeededOperations.map((item) => item.domain))]; + const failedDomains = [...new Set(failedOperations.map((item) => item.domain))]; let executionDetail = modeSave ? `长期模式 ${result.mode_profile.name} 已写入配置库,未生成 CAN 命令` : presetSave @@ -3623,13 +3711,16 @@ function renderExecution(result) { : physical ? `${executedDomains.join(" / ")} 已下发真实 CAN,并以 IAR 固件实际反馈确认 ${operationResults.filter((item) => item.status === "succeeded").length} 个步骤` : `${executedDomains.join(" / ")} 共 ${report.spec.results.length} 个操作已完成 CAN 编码与虚拟执行`; + if (partiallySucceeded) { + executionDetail = `部分执行完成:${succeededDomains.join(" / ")} 成功 ${succeededOperations.length} 项;${failedDomains.join(" / ")} 未完成 ${failedOperations.length} 项,失败设备未阻断其他设备`; + } if (motionCount) executionDetail += `,含 ${motionCount} 个座椅位置电机反馈`; if (firmwareResult?.telemetry?.programmed_this_request) executionDetail += ";本次已自动烧录并校验统一固件"; else if (firmwareResult) executionDetail += ";板上统一固件协议签名已校验"; - if (result.status === "partially_succeeded") { + if (result.deferred_requests?.length) { executionDetail += ";未接入域请求已保留为 deferred request"; } - if (!reportSucceeded) { + if (!reportSucceeded && !partiallySucceeded) { const failure = report.spec.results.find((item) => item.status === "failed"); const failureTelemetry = failure?.telemetry || {}; executionDetail = simulatedHil @@ -3655,13 +3746,18 @@ function renderExecution(result) { : presetSave ? "姿态预设已保存" : simulatedHil ? "模拟台架执行成功" : physical ? "真实台架执行成功" : "虚拟执行成功" - : simulatedHil ? "模拟故障已触发" : physical ? "真实台架执行失败" : "虚拟执行失败"; - summary.innerHTML = `
${executionTitle}${executionDetail}
`; + : partiallySucceeded ? (physical ? "真实台架部分执行成功" : "部分执行成功") + : simulatedHil ? "模拟故障已触发" : physical ? "真实台架执行失败" : "虚拟执行失败"; + const executionIcon = reportSucceeded + ? ((presetSave || modeSave) ? "bookmark-check" : "circle-check-big") + : partiallySucceeded ? "circle-alert" : "circle-x"; + summary.innerHTML = `
${executionTitle}${executionDetail}
`; $("#resultNavMeta").textContent = reportSucceeded ? `${report.spec.results.length} 项完成 · ${simulatedHil ? "SIM-HIL" : physical ? "HIL" : "DRY-RUN"}` - : "执行失败 · 查看回读"; - $("#resultPanelState").textContent = reportSucceeded ? "SUCCEEDED" : "FAILED"; - $("#resultPanelState").className = `workspace-panel-state ${reportSucceeded ? "succeeded" : "failed"}`; + : partiallySucceeded ? `${succeededOperations.length} 项成功 / ${failedOperations.length} 项失败 · 查看明细` + : "执行失败 · 查看回读"; + $("#resultPanelState").textContent = reportSucceeded ? "SUCCEEDED" : partiallySucceeded ? "PARTIAL" : "FAILED"; + $("#resultPanelState").className = `workspace-panel-state ${reportSucceeded ? "succeeded" : partiallySucceeded ? "partial" : "failed"}`; report.spec.results.forEach((item) => { const row = document.createElement("div"); row.className = "result-item"; @@ -3706,7 +3802,8 @@ function renderResult(result) { } else if (result.function_configs?.seat) { state.seatFeedbackSource = "simulated"; } - const executionSucceeded = ["succeeded", "partially_succeeded"].includes(result.status); + const partiallySucceeded = result.status === "partially_succeeded"; + const executionSucceeded = result.status === "succeeded" || partiallySucceeded; const domains = Object.keys(result.function_configs || {}); const domainLabels = { seat: "座椅", @@ -3714,7 +3811,9 @@ function renderResult(result) { roof: "天幕", ambient_light: "氛围灯", }; - $("#resultTitle").textContent = executionSucceeded + $("#resultTitle").textContent = partiallySucceeded + ? `${domains.length} 域场景部分完成` + : executionSucceeded ? result.mode_profile ? "长期模式配置已保存" : result.preset_config @@ -3727,7 +3826,7 @@ function renderResult(result) { $("#requestMeta").textContent = `${result.request_id} / context:${conversationLabel} / turn:${result.conversation_turn} / ${result.provider_used || result.provider_requested}`; $("#requestMeta").textContent += ` / ${result.execution_report?.spec?.mode || result.execution_mode || "dry_run"}`; setRunStatus( - executionSucceeded ? "succeeded" : "failed", + partiallySucceeded ? "partial" : executionSucceeded ? "succeeded" : "failed", result.status.toUpperCase(), ); renderPipeline(result.trace_events || []); @@ -3818,7 +3917,9 @@ async function submitRequest(event) { const completed = ["succeeded", "partially_succeeded"].includes(payload.status); const simulated = payload.execution_report?.metadata?.labels?.seat_feedback === "simulated_hardware"; showToast(completed - ? (simulated + ? (payload.status === "partially_succeeded" + ? "已执行可用设备;部分设备未完成,详见执行结果" + : simulated ? "模拟台架执行完成" : payload.execution_report?.spec?.mode === "hil" ? "真实台架执行与反馈确认已完成" diff --git a/apps/web-console/index.html b/apps/web-console/index.html index 894be1b..d7d45fd 100755 --- a/apps/web-console/index.html +++ b/apps/web-console/index.html @@ -9,13 +9,13 @@ 智舱随行 · 一句话与手势控制 - + - + @@ -155,6 +155,9 @@
示例请求 + @@ -378,6 +381,9 @@
副驾front_right
+
+ 动态模式未运行 +
通风 -- 加热 -- diff --git a/apps/web-console/service-worker.js b/apps/web-console/service-worker.js index 73bb291..8ea90f1 100644 --- a/apps/web-console/service-worker.js +++ b/apps/web-console/service-worker.js @@ -1,12 +1,12 @@ -const CACHE_VERSION = "cognitive-agent-pad-v9"; +const CACHE_VERSION = "cognitive-agent-pad-v13"; const SHELL_CACHE = `${CACHE_VERSION}-shell`; const RUNTIME_CACHE = `${CACHE_VERSION}-runtime`; const APP_SHELL = [ "/", "/index.html", - "/styles.css?v=android-pad-2", + "/styles.css?v=android-pad-3", "/network.js?v=android-pad-1", - "/app.js?v=seat-hil-9", + "/app.js?v=seat-hil-13", "/gesture-control.js?v=android-pad-1", "/pwa.js?v=android-pad-1", "/manifest.webmanifest", diff --git a/apps/web-console/styles.css b/apps/web-console/styles.css index 8b056dd..a8bbf52 100755 --- a/apps/web-console/styles.css +++ b/apps/web-console/styles.css @@ -1325,6 +1325,11 @@ textarea:focus { background: var(--teal-soft); } +.run-status.partial { + color: var(--amber); + background: var(--amber-soft); +} + .run-status.failed { color: var(--red); background: var(--red-soft); @@ -2733,6 +2738,11 @@ pre { border-left-color: var(--teal); } +.execution-summary.partial { + background: var(--amber-soft); + border-left-color: var(--amber); +} + .execution-summary.failed { background: var(--red-soft); border-left-color: var(--red); @@ -3892,6 +3902,11 @@ pre { background: var(--teal-soft); } +.workspace-panel-state.partial { + color: var(--amber); + background: var(--amber-soft); +} + .workspace-panel-state.failed { color: var(--red); background: var(--red-soft); @@ -4357,6 +4372,44 @@ pre { } } +.mode-cycle-badge { + margin-left: 2px; + padding: 2px 6px; + border-radius: 999px; + background: rgba(89, 214, 255, 0.12); + color: #8be3ff; + font-size: 10px; + letter-spacing: 0.02em; +} + +.dynamic-mode-state { + display: flex; + align-items: center; + gap: 8px; + margin: 10px 0; + padding: 9px 11px; + border: 1px solid rgba(126, 160, 194, 0.2); + border-radius: 10px; + color: #90a7bc; + background: rgba(13, 27, 41, 0.55); +} + +.dynamic-mode-state b { + margin-left: auto; + color: #b9cad8; + font-size: 12px; +} + +.dynamic-mode-state.running { + border-color: rgba(89, 214, 255, 0.48); + color: #8be3ff; + box-shadow: inset 0 0 20px rgba(89, 214, 255, 0.06); +} + +.dynamic-mode-state.running b { + color: #e0f8ff; +} + .hardware-access-field { padding: 12px; border: 1px solid rgba(38, 102, 159, 0.24); diff --git a/artifacts/hil/cabin_dual_channel_hil_20260804.json b/artifacts/hil/cabin_dual_channel_hil_20260804.json new file mode 100644 index 0000000..9a31fc5 --- /dev/null +++ b/artifacts/hil/cabin_dual_channel_hil_20260804.json @@ -0,0 +1,87 @@ +{ + "schema_version": "1.0.0", + "validated_at": "2026-08-04T09:55:52+08:00", + "platform": "t2g_cabin_bench", + "adapter": { + "model": "USBCANFD-200U", + "device_type": 41, + "device_index": 0, + "driver_self_test": { + "passed": true, + "pointer_bits": 32, + "missing_exports": [], + "classic_frame_size": 16, + "can_fd_frame_size": 72, + "can_fd_tx_size": 76, + "can_fd_rx_size": 80 + } + }, + "channels": { + "seat_can": { + "channel": 0, + "format": "classic_can_11_bit", + "bitrate": 500000, + "diagnostic_self_reception": { + "frame_id": "0x7AA", + "payload_hex": "43 48 30 53 45 41 54 30", + "passed": true + }, + "external_passive_observation_seconds": 6, + "external_frames_observed": 0, + "physical_feedback_verified": false + }, + "body_can": { + "channel": 1, + "format": "iso_can_fd_11_bit", + "arbitration_bitrate": 500000, + "data_bitrate": 2000000, + "bitrate_switch": true, + "diagnostic_self_reception": { + "frame_id": "0x7AA", + "payload_hex": "43 48 31 2D 42 4F 44 59 2D 43 41 4E 46 44 21 21", + "payload_size": 16, + "passed": true + }, + "external_passive_observation_seconds": 5, + "external_frames_observed": 0, + "physical_feedback_verified": false + } + }, + "linked_request": { + "utterance": "关闭副驾座椅通风,同时关闭空调", + "dry_run": { + "status": "succeeded", + "function_configs": ["seat", "native_climate"], + "command_plans": ["seat", "native_climate"] + }, + "hardware_attempts": [ + { + "request_id": "req-20260804015505-713de5", + "status": "execution_failed", + "body_can": "0x1DE transmit rejected; channel_error=0x00000004", + "seat_can": "passive firmware signature not observed within 1200 ms; no seat control frame sent" + }, + { + "request_id": "req-20260804015552-674fb4", + "status": "execution_failed", + "body_can": "0x1DE transmit rejected; channel_error=0x00000000", + "seat_can": "passive firmware signature not observed within 3500 ms; no seat control frame sent" + } + ] + }, + "verdict": { + "adapter_dual_channel_transport": "passed", + "classic_can_transport": "passed", + "iso_can_fd_brs_transport": "passed", + "one_sentence_compilation_and_routing": "passed", + "seat_ecu_closed_loop": "not_verified_no_external_frames", + "body_ecu_closed_loop": "not_verified_no_bus_ack_or_0x404_feedback", + "overall_hardware_requirement": "blocked_by_external_bus_connectivity_or_power" + }, + "safety_cleanup": { + "seat_control_acknowledged": false, + "body_control_acknowledged": false, + "actuator_state_changed_by_verified_command": false, + "zcanpro_restarted": true + } +} diff --git a/artifacts/hil/dynamic_cradle_rev10_continuous_cruise_20260804.json b/artifacts/hil/dynamic_cradle_rev10_continuous_cruise_20260804.json new file mode 100644 index 0000000..70ffdb8 --- /dev/null +++ b/artifacts/hil/dynamic_cradle_rev10_continuous_cruise_20260804.json @@ -0,0 +1,63 @@ +{ + "validated_at": "2026-08-04", + "firmware_revision": 10, + "firmware_image_sha256": "85f9d67ff1efb36c37f38bb7584dffdbb6ecbee33bfc70ab491bad0d57da63b2", + "change": "remove delayed M1 clearance/catch-up and keep all four axes moving from the phase start", + "max_hall": [499, 374, 917, 647], + "known_range_home": { + "hall_before": [379, 255, 417, 416], + "hall_after": [0, 0, 0, 0], + "all_complete_ok": true, + "all_position_valid": true + }, + "step_1_to_step_2": { + "start_hall": [391, 140, 406, 405], + "target_hall": [246, 281, 701, 494], + "observed_hall": [246, 281, 701, 494], + "four_axis_start_spread_s": 0.070, + "four_axis_arrival_spread_s": 0.342, + "cruise_checkpoint": { + "elapsed_s": 3.090, + "hall": [354, 202, 510, 468], + "normalized_progress": { + "longitudinal": 0.255, + "cushion_tilt": 0.440, + "backrest_recline": 0.353, + "legrest_height": 0.708 + } + }, + "result": "PASS" + }, + "step_2_to_step_3": { + "start_hall": [246, 281, 701, 494], + "target_hall": [391, 140, 405, 404], + "observed_hall": [391, 140, 405, 404], + "four_axis_start_spread_s": 0.050, + "four_axis_arrival_spread_s": 0.339, + "cruise_checkpoint": { + "elapsed_s": 2.591, + "hall": [283, 226, 616, 435], + "normalized_progress": { + "longitudinal": 0.255, + "cushion_tilt": 0.390, + "backrest_recline": 0.287, + "legrest_height": 0.656 + } + }, + "result": "PASS" + }, + "continuous_rollover": { + "next_cycle_all_four_axes_active": true, + "next_cycle_start_spread_s": 0.051, + "result": "PASS" + }, + "stop_verification": { + "ack": 1, + "reject": 0, + "final_0x306": "00 00 00 00 00 00 00 00", + "active_mask": 0, + "fault_mask": 0, + "result": "PASS" + }, + "result": "PASS" +} diff --git a/artifacts/hil/dynamic_cradle_rev9_20260804.json b/artifacts/hil/dynamic_cradle_rev9_20260804.json new file mode 100644 index 0000000..5c82c3c --- /dev/null +++ b/artifacts/hil/dynamic_cradle_rev9_20260804.json @@ -0,0 +1,88 @@ +{ + "validated_at": "2026-08-04", + "firmware_revision": 9, + "firmware_image_sha256": "216f3f6b2d7c441f2050e99c2b9d54153a69b46466235232dec1b7ab7644b7c4", + "mode": "dynamic_cradle", + "coordinate_precondition": { + "motor": 1, + "operation": "HOME_KNOWN_RANGE", + "ack": 1, + "reject": 0, + "hall_before": 169, + "hall_after": 0, + "max_hall_preserved": 374, + "near": true, + "position_valid": true, + "result": "PASS" + }, + "full_cycle": { + "entry_step_1": { + "target_hall": [391, 140, 405, 404], + "observed_hall": [392, 141, 405, 403] + }, + "step_1_to_step_2": { + "target_hall": [246, 281, 701, 494], + "observed_hall": [246, 281, 701, 494], + "duration_s": 17.329, + "four_axis_start_spread_s": 0.077, + "four_axis_arrival_spread_s": 0.338, + "result": "PASS" + }, + "step_2_to_step_3": { + "target_hall": [391, 140, 405, 404], + "observed_hall": [391, 140, 405, 405], + "duration_s": 15.155, + "four_axis_start_spread_s": 0.079, + "four_axis_arrival_spread_s": 0.495, + "result": "PASS" + }, + "cycle_index_after_return": 1, + "fault_mask": 0, + "result": "PASS" + }, + "continuous_rollover": { + "cycle_0_forward_start_spread_s": 0.052, + "cycle_0_return_start_spread_s": 0.053, + "cycle_1_forward_start_spread_s": 0.082, + "phase_transitions_s": [0.370, 17.888, 32.781], + "result": "PASS" + }, + "step_3_to_step_1_semantics": "Step 3 and Step 1 have identical Hall targets, so their boundary has zero physical displacement. The ECU rolls the cycle index atomically and synchronously launches the next Step 1-to-Step 2 leg.", + "stop_verification": { + "stop_dynamic_sent": true, + "final_0x306": "00 00 00 00 00 00 00 00", + "result": "PASS" + }, + "frontend_natural_language_hil": { + "start": { + "utterance": "开启动态摇篮模式", + "request_id": "req-20260804071706-45a1df", + "result": "SUCCEEDED", + "firmware_signature": "seat-controller-smv8-dynamic-modes-v9", + "command": "0x300 0E 10 06 00 02 00 00 00", + "ui_state": "动态摇篮模式 · 循环中 · 最长10分钟" + }, + "active_physical_can_observation": { + "source": "physical_can", + "complete": true, + "moving_axes": { + "longitudinal_pct": 59, + "backrest_recline_pct": 75 + }, + "all_axes_position_valid": true, + "faults": false + }, + "stop": { + "utterance": "关闭动态摇篮模式", + "request_id": "req-20260804072028-55179f", + "result": "SUCCEEDED", + "command": "0x300 0F 10 07 00 00 00 00 00", + "ui_state": "未运行", + "all_axes_stopped": true, + "all_axes_position_valid": true, + "faults": false + }, + "hardware_access_after_test": "automatically released by the 180-second local idle policy", + "result": "PASS" + } +} diff --git a/artifacts/hil/rocking_horse_rev11_20260804.json b/artifacts/hil/rocking_horse_rev11_20260804.json new file mode 100644 index 0000000..7b90430 --- /dev/null +++ b/artifacts/hil/rocking_horse_rev11_20260804.json @@ -0,0 +1,343 @@ +{ + "mode": "rocking_horse", + "firmware_revision": 11, + "max_hall": [ + 499, + 374, + 917, + 647 + ], + "homes": [ + { + "motor": 0, + "hall_before": 349, + "hall_after": 0, + "ack": { + "ack": 1, + "reject": 0, + "sequence": 21, + "opcode": 11, + "firmware_revision": 11 + }, + "terminal": { + "motor": 0, + "task": 6, + "result": 2, + "active": false, + "position_valid": true, + "sequence": 21, + "position_x100": 0 + } + }, + { + "motor": 1, + "hall_before": 163, + "hall_after": 0, + "ack": { + "ack": 1, + "reject": 0, + "sequence": 22, + "opcode": 11, + "firmware_revision": 11 + }, + "terminal": { + "motor": 1, + "task": 6, + "result": 2, + "active": false, + "position_valid": true, + "sequence": 22, + "position_x100": 0 + } + }, + { + "motor": 2, + "hall_before": 534, + "hall_after": 0, + "ack": { + "ack": 1, + "reject": 0, + "sequence": 23, + "opcode": 11, + "firmware_revision": 11 + }, + "terminal": { + "motor": 2, + "task": 6, + "result": 2, + "active": false, + "position_valid": true, + "sequence": 23, + "position_x100": 0 + } + }, + { + "motor": 3, + "hall_before": 456, + "hall_after": 0, + "ack": { + "ack": 1, + "reject": 0, + "sequence": 24, + "opcode": 11, + "firmware_revision": 11 + }, + "terminal": { + "motor": 3, + "task": 6, + "result": 2, + "active": false, + "position_valid": true, + "sequence": 24, + "position_x100": 0 + } + } + ], + "start_ack": { + "ack": 1, + "reject": 0, + "sequence": 37, + "opcode": 14, + "firmware_revision": 11 + }, + "segments": [ + { + "cycle_index": 0, + "phase": 2, + "phase_start": 262550.8121217, + "start_hall": [ + 320, + 191, + 500, + 431 + ], + "first_active": { + "2": 262550.8883221, + "3": 262550.9146271, + "0": 262550.9401055, + "1": 262550.9661217 + }, + "arrival": { + "3": 262552.7830827, + "1": 262552.8335206, + "2": 262553.0696745, + "0": 262553.1213695 + }, + "cruise_checkpoint": { + "elapsed_s": 0.6343701000441797, + "hall": [ + 312, + 201, + 481, + 417 + ], + "normalized_progress": [ + 0.26666666666666666, + 0.3448275862068966, + 0.475, + 0.45161290322580644 + ] + }, + "end_hall": [ + 290, + 219, + 460, + 400 + ], + "start_spread_s": 0.07779960002517328, + "arrival_spread_s": 0.3382868000189774, + "all_axes_started": true, + "all_axes_arrived": true, + "target": [ + 290, + 220, + 460, + 400 + ] + }, + { + "cycle_index": 0, + "phase": 3, + "phase_start": 262553.4043395, + "start_hall": [ + 290, + 219, + 460, + 400 + ], + "first_active": { + "2": 262553.4973208, + "3": 262553.5228996, + "0": 262553.5485228, + "1": 262553.5743734 + }, + "arrival": { + "3": 262557.0745088, + "1": 262557.1252219, + "2": 262557.2577929, + "0": 262557.3081852 + }, + "cruise_checkpoint": { + "elapsed_s": 1.079516199999489, + "hall": [ + 306, + 199, + 489, + 422 + ], + "normalized_progress": [ + 0.26666666666666666, + 0.3389830508474576, + 0.3625, + 0.36666666666666664 + ] + }, + "end_hall": [ + 350, + 160, + 540, + 460 + ], + "start_spread_s": 0.0770526000414975, + "arrival_spread_s": 0.23367639997741207, + "all_axes_started": true, + "all_axes_arrived": true, + "target": [ + 350, + 160, + 540, + 460 + ] + }, + { + "cycle_index": 1, + "phase": 2, + "phase_start": 262557.4375185, + "start_hall": [ + 350, + 160, + 540, + 460 + ], + "first_active": { + "3": 262557.4893286, + "0": 262557.5161744, + "1": 262557.5424914, + "2": 262557.5696487 + }, + "arrival": { + "3": 262561.8903825, + "1": 262561.9425291, + "2": 262562.0729115, + "0": 262562.1245799 + }, + "cruise_checkpoint": { + "elapsed_s": 1.337460899958387, + "hall": [ + 335, + 185, + 498, + 430 + ], + "normalized_progress": [ + 0.25, + 0.4166666666666667, + 0.525, + 0.5 + ] + }, + "end_hall": [ + 290, + 220, + 460, + 400 + ], + "start_spread_s": 0.08032010000897571, + "arrival_spread_s": 0.23419739998644218, + "all_axes_started": true, + "all_axes_arrived": true, + "target": [ + 290, + 220, + 460, + 400 + ] + }, + { + "cycle_index": 1, + "phase": 3, + "phase_start": 262562.35135919997, + "start_hall": [ + 290, + 220, + 460, + 400 + ], + "first_active": { + "3": 262562.3911222, + "0": 262562.4169718, + "1": 262562.4437546, + "2": 262562.4700679 + }, + "arrival": { + "3": 262566.0670384, + "1": 262566.1195433, + "2": 262566.1444, + "0": 262566.2991242 + }, + "cruise_checkpoint": { + "elapsed_s": 1.1310953000211157, + "hall": [ + 305, + 198, + 497, + 423 + ], + "normalized_progress": [ + 0.25, + 0.36666666666666664, + 0.4625, + 0.38333333333333336 + ] + }, + "end_hall": [ + 350, + 160, + 540, + 459 + ], + "start_spread_s": 0.07894570002099499, + "arrival_spread_s": 0.23208580003120005, + "all_axes_started": true, + "all_axes_arrived": true, + "target": [ + 350, + 160, + 540, + 460 + ] + } + ], + "repeat_first_active": { + "0": 262566.4901705, + "1": 262566.5153454, + "2": 262566.542698, + "3": 262566.5681911 + }, + "stop_ack": { + "ack": 1, + "reject": 0, + "sequence": 38, + "opcode": 15, + "firmware_revision": 11 + }, + "idle": { + "mode_id": 0, + "state": 0, + "phase": 0, + "active_mask": 0, + "fault_mask": 0, + "cycle_index": 0, + "phase_elapsed_ms": 0 + } +} diff --git a/artifacts/hil/rocking_horse_rev12_cushion_amplitude_20260804.json b/artifacts/hil/rocking_horse_rev12_cushion_amplitude_20260804.json new file mode 100644 index 0000000..bf9ec62 --- /dev/null +++ b/artifacts/hil/rocking_horse_rev12_cushion_amplitude_20260804.json @@ -0,0 +1,343 @@ +{ + "mode": "rocking_horse", + "firmware_revision": 12, + "max_hall": [ + 499, + 374, + 917, + 647 + ], + "homes": [ + { + "motor": 0, + "hall_before": 342, + "hall_after": 0, + "ack": { + "ack": 1, + "reject": 0, + "sequence": 1, + "opcode": 11, + "firmware_revision": 12 + }, + "terminal": { + "motor": 0, + "task": 6, + "result": 2, + "active": false, + "position_valid": true, + "sequence": 1, + "position_x100": 0 + } + }, + { + "motor": 1, + "hall_before": 166, + "hall_after": 0, + "ack": { + "ack": 1, + "reject": 0, + "sequence": 2, + "opcode": 11, + "firmware_revision": 12 + }, + "terminal": { + "motor": 1, + "task": 6, + "result": 2, + "active": false, + "position_valid": true, + "sequence": 2, + "position_x100": 0 + } + }, + { + "motor": 2, + "hall_before": 534, + "hall_after": 0, + "ack": { + "ack": 1, + "reject": 0, + "sequence": 3, + "opcode": 11, + "firmware_revision": 12 + }, + "terminal": { + "motor": 2, + "task": 6, + "result": 2, + "active": false, + "position_valid": true, + "sequence": 3, + "position_x100": 0 + } + }, + { + "motor": 3, + "hall_before": 454, + "hall_after": 0, + "ack": { + "ack": 1, + "reject": 0, + "sequence": 4, + "opcode": 11, + "firmware_revision": 12 + }, + "terminal": { + "motor": 3, + "task": 6, + "result": 2, + "active": false, + "position_valid": true, + "sequence": 4, + "position_x100": 0 + } + } + ], + "start_ack": { + "ack": 1, + "reject": 0, + "sequence": 17, + "opcode": 14, + "firmware_revision": 12 + }, + "segments": [ + { + "cycle_index": 0, + "phase": 2, + "phase_start": 264077.9579478, + "start_hall": [ + 320, + 191, + 500, + 430 + ], + "first_active": { + "0": 264078.038142, + "1": 264078.0663315, + "2": 264078.0774349, + "3": 264078.1169224 + }, + "arrival": { + "3": 264079.9439302, + "1": 264079.9959276, + "2": 264080.2325822, + "0": 264080.2840808 + }, + "cruise_checkpoint": { + "elapsed_s": 0.6441632999922149, + "hall": [ + 312, + 214, + 481, + 416 + ], + "normalized_progress": [ + 0.26666666666666666, + 0.3898305084745763, + 0.475, + 0.4666666666666667 + ] + }, + "end_hall": [ + 290, + 250, + 460, + 400 + ], + "start_spread_s": 0.07878040004288778, + "arrival_spread_s": 0.34015060000820085, + "all_axes_started": true, + "all_axes_arrived": true, + "target": [ + 290, + 250, + 460, + 400 + ] + }, + { + "cycle_index": 0, + "phase": 3, + "phase_start": 264080.62360189995, + "start_hall": [ + 290, + 250, + 460, + 400 + ], + "first_active": { + "0": 264080.6481176, + "1": 264080.6733371, + "2": 264080.7001602, + "3": 264080.7257557 + }, + "arrival": { + "1": 264084.2944588, + "3": 264084.344339, + "0": 264084.475855, + "2": 264084.5271018 + }, + "cruise_checkpoint": { + "elapsed_s": 1.0275715000461787, + "hall": [ + 305, + 206, + 492, + 421 + ], + "normalized_progress": [ + 0.25, + 0.36666666666666664, + 0.4, + 0.35 + ] + }, + "end_hall": [ + 350, + 132, + 540, + 460 + ], + "start_spread_s": 0.07763810001779348, + "arrival_spread_s": 0.2326430000248365, + "all_axes_started": true, + "all_axes_arrived": true, + "target": [ + 350, + 130, + 540, + 460 + ] + }, + { + "cycle_index": 1, + "phase": 2, + "phase_start": 264084.65867120004, + "start_hall": [ + 350, + 132, + 540, + 460 + ], + "first_active": { + "2": 264084.7388101, + "1": 264084.7410872, + "0": 264084.7599586, + "3": 264084.7926978 + }, + "arrival": { + "3": 264089.0549796, + "1": 264089.108405, + "0": 264089.3941196, + "2": 264089.4443601 + }, + "cruise_checkpoint": { + "elapsed_s": 1.391282099939417, + "hall": [ + 335, + 187, + 497, + 429 + ], + "normalized_progress": [ + 0.25, + 0.4661016949152542, + 0.5375, + 0.5166666666666667 + ] + }, + "end_hall": [ + 290, + 250, + 460, + 400 + ], + "start_spread_s": 0.05388769996352494, + "arrival_spread_s": 0.38938050001161173, + "all_axes_started": true, + "all_axes_arrived": true, + "target": [ + 290, + 250, + 460, + 400 + ] + }, + { + "cycle_index": 1, + "phase": 3, + "phase_start": 264089.7385309, + "start_hall": [ + 290, + 250, + 460, + 400 + ], + "first_active": { + "1": 264089.857611, + "2": 264089.8838599, + "3": 264089.910015, + "0": 264089.938548 + }, + "arrival": { + "1": 264093.3849972, + "3": 264093.4384044, + "2": 264093.5165479, + "0": 264093.5667763 + }, + "cruise_checkpoint": { + "elapsed_s": 1.011584700027015, + "hall": [ + 305, + 207, + 492, + 420 + ], + "normalized_progress": [ + 0.25, + 0.35833333333333334, + 0.4, + 0.3333333333333333 + ] + }, + "end_hall": [ + 350, + 132, + 540, + 460 + ], + "start_spread_s": 0.08093699999153614, + "arrival_spread_s": 0.1817791000357829, + "all_axes_started": true, + "all_axes_arrived": true, + "target": [ + 350, + 130, + 540, + 460 + ] + } + ], + "repeat_first_active": { + "0": 264093.8496089, + "2": 264093.8578157, + "3": 264093.8843526, + "1": 264093.9379308 + }, + "stop_ack": { + "ack": 1, + "reject": 0, + "sequence": 18, + "opcode": 15, + "firmware_revision": 12 + }, + "idle": { + "mode_id": 0, + "state": 0, + "phase": 0, + "active_mask": 0, + "fault_mask": 0, + "cycle_index": 0, + "phase_elapsed_ms": 0 + } +} diff --git a/artifacts/hil/rocking_horse_rev13_horizontal_compensation_20260804.json b/artifacts/hil/rocking_horse_rev13_horizontal_compensation_20260804.json new file mode 100644 index 0000000..96c7fe6 --- /dev/null +++ b/artifacts/hil/rocking_horse_rev13_horizontal_compensation_20260804.json @@ -0,0 +1,343 @@ +{ + "mode": "rocking_horse", + "firmware_revision": 13, + "max_hall": [ + 499, + 374, + 917, + 647 + ], + "homes": [ + { + "motor": 0, + "hall_before": 326, + "hall_after": 0, + "ack": { + "ack": 1, + "reject": 0, + "sequence": 1, + "opcode": 11, + "firmware_revision": 13 + }, + "terminal": { + "motor": 0, + "task": 6, + "result": 2, + "active": false, + "position_valid": true, + "sequence": 1, + "position_x100": 0 + } + }, + { + "motor": 1, + "hall_before": 138, + "hall_after": 0, + "ack": { + "ack": 1, + "reject": 0, + "sequence": 2, + "opcode": 11, + "firmware_revision": 13 + }, + "terminal": { + "motor": 1, + "task": 6, + "result": 2, + "active": false, + "position_valid": true, + "sequence": 2, + "position_x100": 0 + } + }, + { + "motor": 2, + "hall_before": 532, + "hall_after": 0, + "ack": { + "ack": 1, + "reject": 0, + "sequence": 3, + "opcode": 11, + "firmware_revision": 13 + }, + "terminal": { + "motor": 2, + "task": 6, + "result": 2, + "active": false, + "position_valid": true, + "sequence": 3, + "position_x100": 0 + } + }, + { + "motor": 3, + "hall_before": 451, + "hall_after": 0, + "ack": { + "ack": 1, + "reject": 0, + "sequence": 4, + "opcode": 11, + "firmware_revision": 13 + }, + "terminal": { + "motor": 3, + "task": 6, + "result": 2, + "active": false, + "position_valid": true, + "sequence": 4, + "position_x100": 0 + } + } + ], + "start_ack": { + "ack": 1, + "reject": 0, + "sequence": 17, + "opcode": 14, + "firmware_revision": 13 + }, + "segments": [ + { + "cycle_index": 0, + "phase": 2, + "phase_start": 265437.2473564, + "start_hall": [ + 320, + 190, + 500, + 430 + ], + "first_active": { + "2": 265437.2955111, + "3": 265437.3198522, + "0": 265437.346692, + "1": 265437.3733125 + }, + "arrival": { + "1": 265438.9329059, + "3": 265438.9846889, + "0": 265439.2201775, + "2": 265439.2731793 + }, + "cruise_checkpoint": { + "elapsed_s": 0.5042391999741085, + "hall": [ + 306, + 209, + 486, + 419 + ], + "normalized_progress": [ + 0.28, + 0.31666666666666665, + 0.35, + 0.36666666666666664 + ] + }, + "end_hall": [ + 270, + 250, + 460, + 400 + ], + "start_spread_s": 0.07780140003887936, + "arrival_spread_s": 0.34027340001193807, + "all_axes_started": true, + "all_axes_arrived": true, + "target": [ + 270, + 250, + 460, + 400 + ] + }, + { + "cycle_index": 0, + "phase": 3, + "phase_start": 265439.64164610003, + "start_hall": [ + 270, + 250, + 460, + 400 + ], + "first_active": { + "2": 265439.6948618, + "3": 265439.7208077, + "0": 265439.7458537, + "1": 265439.7726268 + }, + "arrival": { + "1": 265442.9056772, + "3": 265442.9558483, + "2": 265443.0339587, + "0": 265443.0861803 + }, + "cruise_checkpoint": { + "elapsed_s": 0.8318679999792948, + "hall": [ + 295, + 216, + 484, + 417 + ], + "normalized_progress": [ + 0.25, + 0.2833333333333333, + 0.3, + 0.2833333333333333 + ] + }, + "end_hall": [ + 370, + 130, + 540, + 460 + ], + "start_spread_s": 0.07776499999454245, + "arrival_spread_s": 0.18050309998216107, + "all_axes_started": true, + "all_axes_arrived": true, + "target": [ + 370, + 130, + 540, + 460 + ] + }, + { + "cycle_index": 1, + "phase": 2, + "phase_start": 265443.25305889995, + "start_hall": [ + 370, + 130, + 540, + 460 + ], + "first_active": { + "0": 265443.2954135, + "1": 265443.3206536, + "2": 265443.3348354, + "3": 265443.3728105 + }, + "arrival": { + "3": 265446.8221541, + "1": 265446.8749014, + "2": 265447.0045205, + "0": 265447.159461 + }, + "cruise_checkpoint": { + "elapsed_s": 1.084834800043609, + "hall": [ + 343, + 175, + 507, + 436 + ], + "normalized_progress": [ + 0.27, + 0.375, + 0.4125, + 0.4 + ] + }, + "end_hall": [ + 270, + 250, + 460, + 401 + ], + "start_spread_s": 0.07739699998637661, + "arrival_spread_s": 0.3373069000081159, + "all_axes_started": true, + "all_axes_arrived": true, + "target": [ + 270, + 250, + 460, + 400 + ] + }, + { + "cycle_index": 1, + "phase": 3, + "phase_start": 265447.3484032, + "start_hall": [ + 270, + 250, + 460, + 401 + ], + "first_active": { + "1": 265447.3961179, + "0": 265447.400082, + "2": 265447.4222059, + "3": 265447.4483388 + }, + "arrival": { + "1": 265450.6434356, + "3": 265450.693563, + "2": 265450.7765666, + "0": 265450.8258244 + }, + "cruise_checkpoint": { + "elapsed_s": 0.9676259999978356, + "hall": [ + 297, + 209, + 490, + 421 + ], + "normalized_progress": [ + 0.27, + 0.3416666666666667, + 0.375, + 0.3389830508474576 + ] + }, + "end_hall": [ + 370, + 130, + 540, + 460 + ], + "start_spread_s": 0.05222090001916513, + "arrival_spread_s": 0.18238880002172664, + "all_axes_started": true, + "all_axes_arrived": true, + "target": [ + 370, + 130, + 540, + 460 + ] + } + ], + "repeat_first_active": { + "3": 265450.9977942, + "0": 265451.025777, + "2": 265451.0380102, + "1": 265451.0497914 + }, + "stop_ack": { + "ack": 1, + "reject": 0, + "sequence": 18, + "opcode": 15, + "firmware_revision": 13 + }, + "idle": { + "mode_id": 0, + "state": 0, + "phase": 0, + "active_mask": 0, + "fault_mask": 0, + "cycle_index": 0, + "phase_elapsed_ms": 0 + } +} diff --git a/artifacts/hil/seat_frontend_hil_20260801_final_rev6.json b/artifacts/hil/seat_frontend_hil_20260801_final_rev6.json new file mode 100644 index 0000000..603b38d --- /dev/null +++ b/artifacts/hil/seat_frontend_hil_20260801_final_rev6.json @@ -0,0 +1,2214 @@ +{ + "suite": "t2g-seat-frontend-full-hil", + "started_at": "2026-08-01T15:47:02.726525Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801154702", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "THERM-H-1", + "group": "thermal", + "utterance": "副驾座椅加热开到1档", + "started_at": "2026-08-01T15:47:02.726567Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801154702-b96636", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 00 08 00 00 A7 1F 00", + "timestamp": 29658.320125 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 00 08 00 00 B5 24 00", + "timestamp": 29658.346019 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 00 00 00 00 FF FF 00", + "timestamp": 29658.371926 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 00 28 00 00 10 27 00", + "timestamp": 29658.39812 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "11 00 00 00 00 00 00 00", + "timestamp": 29658.408285 + } + }, + "heating": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "11 00 00 00 00 00 00 00", + "timestamp": 29658.408285 + } + }, + "captured_at": "2026-08-01T15:47:03.509191Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T15:47:03.587338Z", + "duration_ms": 861 + }, + { + "id": "THERM-H-2", + "group": "thermal", + "utterance": "副驾座椅加热开到2档", + "started_at": "2026-08-01T15:47:03.587403Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801154703-789441", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 00 08 00 00 B5 24 00", + "timestamp": 29659.225937 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 00 00 00 00 FF FF 00", + "timestamp": 29659.251814 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 00 28 00 00 10 27 00", + "timestamp": 29659.278082 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 00 08 00 00 A7 1F 00", + "timestamp": 29659.303945 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "19 00 00 00 00 00 00 00", + "timestamp": 29659.313002 + } + }, + "heating": { + "state": "on", + "level": 2, + "feedback_value": 3, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "19 00 00 00 00 00 00 00", + "timestamp": 29659.313002 + } + }, + "captured_at": "2026-08-01T15:47:04.413905Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T15:47:04.492888Z", + "duration_ms": 905 + }, + { + "id": "THERM-H-3", + "group": "thermal", + "utterance": "副驾座椅加热开到3档", + "started_at": "2026-08-01T15:47:04.492947Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801154704-702abe", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 00 00 00 00 FF FF 00", + "timestamp": 29660.164397 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 00 28 00 00 10 27 00", + "timestamp": 29660.189542 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 00 08 00 00 A7 1F 00", + "timestamp": 29660.216532 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 00 08 00 00 B5 24 00", + "timestamp": 29660.242415 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "21 00 00 00 00 00 00 00", + "timestamp": 29660.251422 + } + }, + "heating": { + "state": "on", + "level": 3, + "feedback_value": 4, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "21 00 00 00 00 00 00 00", + "timestamp": 29660.251422 + } + }, + "captured_at": "2026-08-01T15:47:05.352212Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T15:47:05.439988Z", + "duration_ms": 947 + }, + { + "id": "THERM-H-OFF", + "group": "thermal", + "utterance": "关闭副驾座椅加热", + "started_at": "2026-08-01T15:47:05.440049Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801154705-52492f", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 00 00 00 00 FF FF 00", + "timestamp": 29661.056209 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 00 28 00 00 10 27 00", + "timestamp": 29661.082436 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 00 08 00 00 A7 1F 00", + "timestamp": 29661.108174 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 00 08 00 00 B5 24 00", + "timestamp": 29661.134017 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 29661.144148 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 29661.144148 + } + }, + "captured_at": "2026-08-01T15:47:06.244903Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T15:47:06.323379Z", + "duration_ms": 883 + }, + { + "id": "THERM-V-1", + "group": "thermal", + "utterance": "副驾座椅通风开到1档", + "started_at": "2026-08-01T15:47:06.323429Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801154706-1720c2", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 00 00 00 00 FF FF 00", + "timestamp": 29661.937905 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 00 28 00 00 10 27 00", + "timestamp": 29661.963716 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 00 08 00 00 A7 1F 00", + "timestamp": 29661.98994 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 00 08 00 00 B5 24 00", + "timestamp": 29662.015735 + } + } + }, + "ventilation": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0A 00 00 00 00 00 00 00", + "timestamp": 29662.024794 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0A 00 00 00 00 00 00 00", + "timestamp": 29662.024794 + } + }, + "captured_at": "2026-08-01T15:47:07.125514Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T15:47:07.199776Z", + "duration_ms": 876 + }, + { + "id": "THERM-V-2", + "group": "thermal", + "utterance": "副驾座椅通风开到2档", + "started_at": "2026-08-01T15:47:07.199843Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801154707-98c578", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 00 00 00 00 FF FF 00", + "timestamp": 29662.813889 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 00 28 00 00 10 27 00", + "timestamp": 29662.839684 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 00 08 00 00 A7 1F 00", + "timestamp": 29662.8666 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 00 08 00 00 B5 24 00", + "timestamp": 29662.891751 + } + } + }, + "ventilation": { + "state": "on", + "level": 2, + "feedback_value": 3, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0B 00 00 00 00 00 00 00", + "timestamp": 29662.901896 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0B 00 00 00 00 00 00 00", + "timestamp": 29662.901896 + } + }, + "captured_at": "2026-08-01T15:47:08.002673Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T15:47:08.085406Z", + "duration_ms": 886 + }, + { + "id": "THERM-V-3", + "group": "thermal", + "utterance": "副驾座椅通风开到3档", + "started_at": "2026-08-01T15:47:08.085456Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801154708-91d627", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 00 00 00 00 FF FF 00", + "timestamp": 29663.694339 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 00 28 00 00 10 27 00", + "timestamp": 29663.720084 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 00 08 00 00 A7 1F 00", + "timestamp": 29663.745922 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 00 08 00 00 B5 24 00", + "timestamp": 29663.771793 + } + } + }, + "ventilation": { + "state": "on", + "level": 3, + "feedback_value": 4, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0C 00 00 00 00 00 00 00", + "timestamp": 29663.780042 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0C 00 00 00 00 00 00 00", + "timestamp": 29663.780042 + } + }, + "captured_at": "2026-08-01T15:47:08.880722Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T15:47:08.966857Z", + "duration_ms": 881 + }, + { + "id": "THERM-V-OFF", + "group": "thermal", + "utterance": "关闭副驾座椅通风", + "started_at": "2026-08-01T15:47:08.966914Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801154708-a827a7", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 00 00 00 00 FF FF 00", + "timestamp": 29664.524053 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 00 28 00 00 10 27 00", + "timestamp": 29664.549815 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 00 08 00 00 A7 1F 00", + "timestamp": 29664.576044 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 00 08 00 00 B5 24 00", + "timestamp": 29664.601832 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 29664.609703 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 29664.609703 + } + }, + "captured_at": "2026-08-01T15:47:09.710310Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T15:47:09.786556Z", + "duration_ms": 820 + }, + { + "id": "MOTION-M0-25", + "group": "motion", + "utterance": "把副驾座椅水平位置调到25%", + "status": "safety_blocked", + "started_at": "2026-08-01T15:47:09.786644Z", + "finished_at": "2026-08-01T15:47:09.786646Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 25, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MOTION-M0-75", + "group": "motion", + "utterance": "把副驾座椅水平位置调到75%", + "status": "safety_blocked", + "started_at": "2026-08-01T15:47:09.786668Z", + "finished_at": "2026-08-01T15:47:09.786669Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 75, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MOTION-M0-HOME", + "group": "motion", + "utterance": "把副驾座椅水平位置归零", + "status": "safety_blocked", + "started_at": "2026-08-01T15:47:09.786675Z", + "finished_at": "2026-08-01T15:47:09.786676Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 0, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MOTION-M1-20", + "group": "motion", + "utterance": "把副驾坐盆调到20%", + "status": "safety_blocked", + "started_at": "2026-08-01T15:47:09.786687Z", + "finished_at": "2026-08-01T15:47:09.786688Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "cushion_tilt", + "target_pct": 20, + "minimum_safe_target_pct": 100, + "reason": "M1 near-direction mechanical obstruction now also reproduces from the far endpoint; do not drive below the current 100% position until the mechanism is inspected.", + "evidence": { + "hall_count": 374, + "pulse_count": 0, + "peak_current_delta_raw": 1351, + "stall_threshold_raw": 500 + } + } + }, + { + "id": "MOTION-M1-60", + "group": "motion", + "utterance": "把副驾坐盆调到60%", + "status": "safety_blocked", + "started_at": "2026-08-01T15:47:09.786696Z", + "finished_at": "2026-08-01T15:47:09.786698Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "cushion_tilt", + "target_pct": 60, + "minimum_safe_target_pct": 100, + "reason": "M1 near-direction mechanical obstruction now also reproduces from the far endpoint; do not drive below the current 100% position until the mechanism is inspected.", + "evidence": { + "hall_count": 374, + "pulse_count": 0, + "peak_current_delta_raw": 1351, + "stall_threshold_raw": 500 + } + } + }, + { + "id": "MOTION-M2-25", + "group": "motion", + "utterance": "把副驾靠背调到25%", + "started_at": "2026-08-01T15:47:09.786704Z", + "status": "failed", + "errors": [ + "T2G motor 2 TIMEOUT: task_state=7, Hall=743->743" + ], + "http_status": 201, + "request_id": "req-20260801154709-83910b", + "failure_telemetry": { + "motor_selector": 2, + "motion_axis": "backrest_recline", + "task_state": 7, + "motor_result": 6, + "motor_result_name": "TIMEOUT", + "position_valid": true, + "hall_before": 743, + "hall_after": 743, + "hall_delta": 0, + "endpoint_recovery_max_near_hall": 138, + "command_frame": { + "frame_id": "0x300", + "payload_size": 8, + "data_hex": "01 12 02 00 C4 09 30 75", + "timestamp": null + }, + "ack_frame": { + "frame_id": "0x301", + "payload_size": 8, + "data_hex": "21 00 02 00 01 04 E0 6E", + "timestamp": 29665.003821 + }, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 67 08 02 00 A7 1F 00", + "timestamp": 29671.528551 + }, + "diagnostic_before_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "02 00 E7 02 95 03 00 50", + "timestamp": 29664.99191 + }, + "diagnostic_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "02 05 E7 02 95 03 00 50", + "timestamp": 29671.529697 + }, + "diagnostic_read_error": null, + "current_diagnostic": { + "sample_count": 64, + "valid_sample_count": 64, + "max_current_raw": 2252, + "max_current_delta_raw": 205, + "high_current_seen": false, + "low_hall_seen": true, + "stall_overlap_seen": false, + "peak": { + "current_raw": 2252, + "current_baseline_raw": 2047, + "current_delta_raw": 205, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": false, + "hall_activity_low": false, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "02 03 CC 08 FF 07 F4 01", + "timestamp": 29665.294733 + } + }, + "latest": { + "current_raw": 2178, + "current_baseline_raw": 2047, + "current_delta_raw": 131, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": false, + "hall_activity_low": true, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "02 0B 82 08 FF 07 F4 01", + "timestamp": 29671.440071 + } + } + }, + "error_type": "HardwareExecutionError", + "stop_all_attempted": true, + "simulated": false + }, + "finished_at": "2026-08-01T15:47:16.820114Z", + "duration_ms": 7033 + }, + { + "id": "MOTION-M2-60", + "group": "motion", + "utterance": "把副驾靠背调到60%", + "started_at": "2026-08-01T15:47:16.820162Z", + "status": "failed", + "errors": [ + "T2G motor 2 TIMEOUT: task_state=7, Hall=743->743" + ], + "http_status": 201, + "request_id": "req-20260801154716-4253ad", + "failure_telemetry": { + "motor_selector": 2, + "motion_axis": "backrest_recline", + "task_state": 7, + "motor_result": 6, + "motor_result_name": "TIMEOUT", + "position_valid": true, + "hall_before": 743, + "hall_after": 743, + "hall_delta": 0, + "endpoint_recovery_max_near_hall": 138, + "command_frame": { + "frame_id": "0x300", + "payload_size": 8, + "data_hex": "01 12 05 00 70 17 30 75", + "timestamp": null + }, + "ack_frame": { + "frame_id": "0x301", + "payload_size": 8, + "data_hex": "21 00 05 00 01 04 E0 67", + "timestamp": 29672.045387 + }, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 67 08 05 00 A7 1F 00", + "timestamp": 29678.579774 + }, + "diagnostic_before_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "02 05 E7 02 95 03 00 A0", + "timestamp": 29672.043424 + }, + "diagnostic_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "02 05 E7 02 95 03 00 B0", + "timestamp": 29678.580946 + }, + "diagnostic_read_error": null, + "current_diagnostic": { + "sample_count": 65, + "valid_sample_count": 65, + "max_current_raw": 2242, + "max_current_delta_raw": 190, + "high_current_seen": false, + "low_hall_seen": true, + "stall_overlap_seen": false, + "peak": { + "current_raw": 2242, + "current_baseline_raw": 2052, + "current_delta_raw": 190, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": false, + "hall_activity_low": false, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "02 03 C2 08 04 08 F4 01", + "timestamp": 29672.076592 + } + }, + "latest": { + "current_raw": 2163, + "current_baseline_raw": 2052, + "current_delta_raw": 111, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": false, + "hall_activity_low": true, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "02 0B 73 08 04 08 F4 01", + "timestamp": 29678.532301 + } + } + }, + "error_type": "HardwareExecutionError", + "stop_all_attempted": true, + "simulated": false + }, + "finished_at": "2026-08-01T15:47:23.850083Z", + "duration_ms": 7030 + }, + { + "id": "MOTION-M2-HOME", + "group": "motion", + "utterance": "把副驾靠背归零", + "started_at": "2026-08-01T15:47:23.850133Z", + "status": "failed", + "errors": [ + "T2G motor 2 CALIBRATION_FAILED: task_state=7, Hall=743->743" + ], + "http_status": 201, + "request_id": "req-20260801154723-c4c780", + "failure_telemetry": { + "motor_selector": 2, + "motion_axis": "backrest_recline", + "task_state": 7, + "motor_result": 11, + "motor_result_name": "CALIBRATION_FAILED", + "position_valid": false, + "hall_before": 743, + "hall_after": 743, + "hall_delta": 0, + "endpoint_recovery_max_near_hall": 138, + "command_frame": { + "frame_id": "0x300", + "payload_size": 8, + "data_hex": "0B 12 08 00 52 4B 78 00", + "timestamp": null + }, + "ack_frame": { + "frame_id": "0x301", + "payload_size": 8, + "data_hex": "51 00 08 00 0B 44 E0 60", + "timestamp": 29679.063366 + }, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 B7 00 08 00 FF FF 00", + "timestamp": 29682.286447 + }, + "diagnostic_before_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "02 05 E7 02 95 03 00 00", + "timestamp": 29679.06159 + }, + "diagnostic_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "02 88 E7 02 95 03 00 30", + "timestamp": 29682.289934 + }, + "diagnostic_read_error": null, + "current_diagnostic": { + "sample_count": 35, + "valid_sample_count": 35, + "max_current_raw": 2244, + "max_current_delta_raw": 185, + "high_current_seen": false, + "low_hall_seen": true, + "stall_overlap_seen": false, + "peak": { + "current_raw": 2244, + "current_baseline_raw": 2059, + "current_delta_raw": 185, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": false, + "hall_activity_low": false, + "current_calibrating": true, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "02 13 C4 08 0B 08 F4 01", + "timestamp": 29681.340332 + } + }, + "latest": { + "current_raw": 2171, + "current_baseline_raw": 2059, + "current_delta_raw": 112, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": false, + "hall_activity_low": true, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "02 0B 7B 08 0B 08 F4 01", + "timestamp": 29682.180355 + } + } + }, + "error_type": "HardwareExecutionError", + "stop_all_attempted": true, + "simulated": false + }, + "finished_at": "2026-08-01T15:47:27.569016Z", + "duration_ms": 3719 + }, + { + "id": "MOTION-M3-20", + "group": "motion", + "utterance": "把副驾腿托调到20%", + "started_at": "2026-08-01T15:47:27.569076Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801154727-e582aa", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 20, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 1978, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 0B 00 BA 07 00", + "timestamp": 29693.451199 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 00 0A 00 FF FF 00", + "timestamp": 29693.477217 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 0A 00 10 27 00", + "timestamp": 29693.502608 + } + }, + "backrest_recline": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 00 0A 00 FF FF 00", + "timestamp": 29693.528656 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 29693.540049 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 29693.540049 + } + }, + "captured_at": "2026-08-01T15:47:38.640167Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T15:47:38.717963Z", + "duration_ms": 11149 + }, + { + "id": "MOTION-M3-60", + "group": "motion", + "utterance": "把副驾腿托调到60%", + "started_at": "2026-08-01T15:47:38.718046Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801154738-a140a6", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 0C 00 10 27 00", + "timestamp": 29700.237153 + } + }, + "backrest_recline": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 00 0C 00 FF FF 00", + "timestamp": 29700.263244 + } + }, + "legrest_height": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5997, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 0D 00 6D 17 00", + "timestamp": 29700.28857 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 00 0C 00 FF FF 00", + "timestamp": 29700.314685 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 29700.324918 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 29700.324918 + } + }, + "captured_at": "2026-08-01T15:47:45.424988Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T15:47:45.509180Z", + "duration_ms": 6791 + }, + { + "id": "MOTION-M3-HOME", + "group": "motion", + "utterance": "把副驾腿托归零", + "started_at": "2026-08-01T15:47:45.509231Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801154745-8ead10", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 00 0E 00 FF FF 00", + "timestamp": 29710.693738 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 0E 00 10 27 00", + "timestamp": 29710.719463 + } + }, + "backrest_recline": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 00 0E 00 FF FF 00", + "timestamp": 29710.745227 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 0F 00 00 00 00", + "timestamp": 29710.77088 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 29710.778777 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 29710.778777 + } + }, + "captured_at": "2026-08-01T15:47:55.878618Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T15:47:55.952318Z", + "duration_ms": 10443 + }, + { + "id": "MOTION-ALL-ZERO", + "group": "motion", + "utterance": "把副驾水平、坐盆、靠背、腿托四轴归零", + "status": "safety_blocked", + "started_at": "2026-08-01T15:47:55.952386Z", + "finished_at": "2026-08-01T15:47:55.952389Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 0, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "COMBINED-ALL", + "group": "combined", + "utterance": "打开副驾加热1档、打开通风1档,座椅水平到30%,坐盆到40%,靠背到37%,腿托到42%", + "status": "safety_blocked", + "started_at": "2026-08-01T15:47:55.952398Z", + "finished_at": "2026-08-01T15:47:55.952399Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 30, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "COMBINED-OFF", + "group": "combined", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T15:47:55.952407Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801154755-964b37", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 0F 00 00 00 00", + "timestamp": 29711.524892 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 00 0E 00 FF FF 00", + "timestamp": 29711.551743 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 0E 00 10 27 00", + "timestamp": 29711.577468 + } + }, + "backrest_recline": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 00 0E 00 FF FF 00", + "timestamp": 29711.60355 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 29711.611447 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 29711.611447 + } + }, + "captured_at": "2026-08-01T15:47:56.711259Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T15:47:56.832519Z", + "duration_ms": 880 + }, + { + "id": "MODE-EASY-ENTRY", + "group": "mode", + "utterance": "副驾执行轻松进出模式", + "status": "safety_blocked", + "started_at": "2026-08-01T15:47:56.832581Z", + "finished_at": "2026-08-01T15:47:56.832583Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 100, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MODE-OFFICE", + "group": "mode", + "utterance": "副驾执行办公模式", + "status": "safety_blocked", + "started_at": "2026-08-01T15:47:56.832591Z", + "finished_at": "2026-08-01T15:47:56.832592Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 72, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MODE-QUEEN", + "group": "mode", + "utterance": "副驾执行女王副驾行驶模式", + "status": "safety_blocked", + "started_at": "2026-08-01T15:47:56.832598Z", + "finished_at": "2026-08-01T15:47:56.832599Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 72, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MODE-BABY-NAP", + "group": "mode", + "utterance": "副驾执行宝宝午睡模式", + "status": "safety_blocked", + "started_at": "2026-08-01T15:47:56.832605Z", + "finished_at": "2026-08-01T15:47:56.832607Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 81, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MODE-CRUISE-SOFA", + "group": "mode", + "utterance": "副驾执行巡航沙发模式", + "status": "safety_blocked", + "started_at": "2026-08-01T15:47:56.832615Z", + "finished_at": "2026-08-01T15:47:56.832616Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 51, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MODE-MEDITATION", + "group": "mode", + "utterance": "副驾执行冥想空间模式", + "status": "safety_blocked", + "started_at": "2026-08-01T15:47:56.832622Z", + "finished_at": "2026-08-01T15:47:56.832623Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 100, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MODE-LEISURE", + "group": "mode", + "utterance": "副驾执行休闲躺椅模式", + "status": "safety_blocked", + "started_at": "2026-08-01T15:47:56.832629Z", + "finished_at": "2026-08-01T15:47:56.832630Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 51, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MODE-CALF", + "group": "mode", + "utterance": "副驾执行小腿解压悬浮模式", + "status": "safety_blocked", + "started_at": "2026-08-01T15:47:56.832636Z", + "finished_at": "2026-08-01T15:47:56.832637Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 51, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MODE-BEACH", + "group": "mode", + "utterance": "副驾执行电感沙滩椅模式", + "status": "safety_blocked", + "started_at": "2026-08-01T15:47:56.832643Z", + "finished_at": "2026-08-01T15:47:56.832644Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 100, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MODE-NAP", + "group": "mode", + "utterance": "副驾执行小憩模式", + "status": "safety_blocked", + "started_at": "2026-08-01T15:47:56.832650Z", + "finished_at": "2026-08-01T15:47:56.832651Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 100, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MODE-ZERO-GRAVITY", + "group": "mode", + "utterance": "副驾执行零重力模式", + "status": "safety_blocked", + "started_at": "2026-08-01T15:47:56.832656Z", + "finished_at": "2026-08-01T15:47:56.832657Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 100, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + } + ], + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T15:47:56.832664Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801154756-1946bc", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 00 0E 00 FF FF 00", + "timestamp": 29712.411281 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 0F 00 00 00 00", + "timestamp": 29712.437028 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 00 0E 00 FF FF 00", + "timestamp": 29712.463792 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 0E 00 10 27 00", + "timestamp": 29712.491067 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 29712.49673 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 29712.49673 + } + }, + "captured_at": "2026-08-01T15:47:57.596426Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T15:47:57.681445Z", + "duration_ms": 849 + }, + "finished_at": "2026-08-01T15:47:57.681482Z", + "summary": { + "total": 33, + "passed": 12, + "failed": 3, + "safety_blocked": 18, + "executed": 15, + "final_state_passed": true + } +} \ No newline at end of file diff --git a/artifacts/hil/seat_frontend_hil_20260801_final_rev6_safe.json b/artifacts/hil/seat_frontend_hil_20260801_final_rev6_safe.json new file mode 100644 index 0000000..06f6e18 --- /dev/null +++ b/artifacts/hil/seat_frontend_hil_20260801_final_rev6_safe.json @@ -0,0 +1,1980 @@ +{ + "suite": "t2g-seat-frontend-full-hil", + "started_at": "2026-08-01T16:09:08.813120Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801160908", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "THERM-H-1", + "group": "thermal", + "utterance": "副驾座椅加热开到1档", + "started_at": "2026-08-01T16:09:08.813160Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801160908-7f9d90", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 00 00 00 FF FF 00", + "timestamp": 30984.474752 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 00 00 00 00 00", + "timestamp": 30984.501669 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 00 00 00 FF FF 00", + "timestamp": 30984.526762 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 00 00 10 27 00", + "timestamp": 30984.55371 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "11 00 00 00 00 00 00 00", + "timestamp": 30984.560513 + } + }, + "heating": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "11 00 00 00 00 00 00 00", + "timestamp": 30984.560513 + } + }, + "captured_at": "2026-08-01T16:09:09.634508Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:09:09.716278Z", + "duration_ms": 903 + }, + { + "id": "THERM-H-2", + "group": "thermal", + "utterance": "副驾座椅加热开到2档", + "started_at": "2026-08-01T16:09:09.716339Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801160909-455685", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 00 00 00 00 00", + "timestamp": 30985.34714 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 00 00 00 FF FF 00", + "timestamp": 30985.372972 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 00 00 10 27 00", + "timestamp": 30985.398777 + } + }, + "backrest_recline": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 00 00 00 FF FF 00", + "timestamp": 30985.424943 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "19 00 00 00 00 00 00 00", + "timestamp": 30985.432856 + } + }, + "heating": { + "state": "on", + "level": 2, + "feedback_value": 3, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "19 00 00 00 00 00 00 00", + "timestamp": 30985.432856 + } + }, + "captured_at": "2026-08-01T16:09:10.506903Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:09:10.590135Z", + "duration_ms": 874 + }, + { + "id": "THERM-H-3", + "group": "thermal", + "utterance": "副驾座椅加热开到3档", + "started_at": "2026-08-01T16:09:10.590213Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801160910-df1c57", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 00 00 00 FF FF 00", + "timestamp": 30986.235429 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 00 00 10 27 00", + "timestamp": 30986.261221 + } + }, + "backrest_recline": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 00 00 00 FF FF 00", + "timestamp": 30986.287114 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 00 00 00 00 00", + "timestamp": 30986.312876 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "21 00 00 00 00 00 00 00", + "timestamp": 30986.32195 + } + }, + "heating": { + "state": "on", + "level": 3, + "feedback_value": 4, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "21 00 00 00 00 00 00 00", + "timestamp": 30986.32195 + } + }, + "captured_at": "2026-08-01T16:09:11.395940Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:09:11.475284Z", + "duration_ms": 885 + }, + { + "id": "THERM-H-OFF", + "group": "thermal", + "utterance": "关闭副驾座椅加热", + "started_at": "2026-08-01T16:09:11.475339Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801160911-0d5d6f", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 00 00 00 FF FF 00", + "timestamp": 30987.097703 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 00 00 10 27 00", + "timestamp": 30987.124907 + } + }, + "backrest_recline": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 00 00 00 FF FF 00", + "timestamp": 30987.151756 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 00 00 00 00 00", + "timestamp": 30987.177554 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 30987.183158 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 30987.183158 + } + }, + "captured_at": "2026-08-01T16:09:12.257059Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:09:12.363608Z", + "duration_ms": 888 + }, + { + "id": "THERM-V-1", + "group": "thermal", + "utterance": "副驾座椅通风开到1档", + "started_at": "2026-08-01T16:09:12.363667Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801160912-b17d84", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 00 00 00 FF FF 00", + "timestamp": 30988.007004 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 00 00 10 27 00", + "timestamp": 30988.033125 + } + }, + "backrest_recline": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 00 00 00 FF FF 00", + "timestamp": 30988.058917 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 00 00 00 00 00", + "timestamp": 30988.085756 + } + } + }, + "ventilation": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0A 00 00 00 00 00 00 00", + "timestamp": 30988.093653 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0A 00 00 00 00 00 00 00", + "timestamp": 30988.093653 + } + }, + "captured_at": "2026-08-01T16:09:13.167532Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:09:13.240092Z", + "duration_ms": 876 + }, + { + "id": "THERM-V-2", + "group": "thermal", + "utterance": "副驾座椅通风开到2档", + "started_at": "2026-08-01T16:09:13.240147Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801160913-c6e722", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 00 00 00 FF FF 00", + "timestamp": 30988.853532 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 00 00 10 27 00", + "timestamp": 30988.879326 + } + }, + "backrest_recline": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 00 00 00 FF FF 00", + "timestamp": 30988.905003 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 00 00 00 00 00", + "timestamp": 30988.931185 + } + } + }, + "ventilation": { + "state": "on", + "level": 2, + "feedback_value": 3, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0B 00 00 00 00 00 00 00", + "timestamp": 30988.93908 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0B 00 00 00 00 00 00 00", + "timestamp": 30988.93908 + } + }, + "captured_at": "2026-08-01T16:09:14.012902Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:09:14.088758Z", + "duration_ms": 849 + }, + { + "id": "THERM-V-3", + "group": "thermal", + "utterance": "副驾座椅通风开到3档", + "started_at": "2026-08-01T16:09:14.088811Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801160914-2c3a66", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 00 00 00 FF FF 00", + "timestamp": 30989.699961 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 00 00 10 27 00", + "timestamp": 30989.724961 + } + }, + "backrest_recline": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 00 00 00 FF FF 00", + "timestamp": 30989.751846 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 00 00 00 00 00", + "timestamp": 30989.77764 + } + } + }, + "ventilation": { + "state": "on", + "level": 3, + "feedback_value": 4, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0C 00 00 00 00 00 00 00", + "timestamp": 30989.785475 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0C 00 00 00 00 00 00 00", + "timestamp": 30989.785475 + } + }, + "captured_at": "2026-08-01T16:09:14.859342Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:09:14.945067Z", + "duration_ms": 856 + }, + { + "id": "THERM-V-OFF", + "group": "thermal", + "utterance": "关闭副驾座椅通风", + "started_at": "2026-08-01T16:09:14.945127Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801160914-a049e3", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 00 00 00 FF FF 00", + "timestamp": 30990.561013 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 00 00 10 27 00", + "timestamp": 30990.58789 + } + }, + "backrest_recline": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 00 00 00 FF FF 00", + "timestamp": 30990.613596 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 00 00 00 00 00", + "timestamp": 30990.639735 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 30990.646482 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 30990.646482 + } + }, + "captured_at": "2026-08-01T16:09:15.720363Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:09:15.800542Z", + "duration_ms": 855 + }, + { + "id": "MOTION-M0-25", + "group": "motion", + "utterance": "把副驾座椅水平位置调到25%", + "status": "safety_blocked", + "started_at": "2026-08-01T16:09:15.800605Z", + "finished_at": "2026-08-01T16:09:15.800608Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 25, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MOTION-M0-75", + "group": "motion", + "utterance": "把副驾座椅水平位置调到75%", + "status": "safety_blocked", + "started_at": "2026-08-01T16:09:15.800619Z", + "finished_at": "2026-08-01T16:09:15.800620Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 75, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MOTION-M0-HOME", + "group": "motion", + "utterance": "把副驾座椅水平位置归零", + "status": "safety_blocked", + "started_at": "2026-08-01T16:09:15.800627Z", + "finished_at": "2026-08-01T16:09:15.800629Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 0, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MOTION-M1-20", + "group": "motion", + "utterance": "把副驾坐盆调到20%", + "status": "safety_blocked", + "started_at": "2026-08-01T16:09:15.800639Z", + "finished_at": "2026-08-01T16:09:15.800641Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "cushion_tilt", + "target_pct": 20, + "minimum_safe_target_pct": 100, + "reason": "M1 near-direction mechanical obstruction now also reproduces from the far endpoint; do not drive below the current 100% position until the mechanism is inspected.", + "evidence": { + "hall_count": 374, + "pulse_count": 0, + "peak_current_delta_raw": 1351, + "stall_threshold_raw": 500 + } + } + }, + { + "id": "MOTION-M1-60", + "group": "motion", + "utterance": "把副驾坐盆调到60%", + "status": "safety_blocked", + "started_at": "2026-08-01T16:09:15.800649Z", + "finished_at": "2026-08-01T16:09:15.800650Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "cushion_tilt", + "target_pct": 60, + "minimum_safe_target_pct": 100, + "reason": "M1 near-direction mechanical obstruction now also reproduces from the far endpoint; do not drive below the current 100% position until the mechanism is inspected.", + "evidence": { + "hall_count": 374, + "pulse_count": 0, + "peak_current_delta_raw": 1351, + "stall_threshold_raw": 500 + } + } + }, + { + "id": "MOTION-M2-25", + "group": "motion", + "utterance": "把副驾靠背调到25%", + "status": "safety_blocked", + "started_at": "2026-08-01T16:09:15.800657Z", + "finished_at": "2026-08-01T16:09:15.800659Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "backrest_recline", + "target_pct": 25, + "block_all_targets": true, + "reason": "M2 produced zero Hall pulses in both directions. Near-direction absolute and homing commands and a bounded far-direction 500 ms/90% timed probe all failed at Hall 743 with low current, indicating an unloaded/open output path; inspect the bridge channel, connector, motor wiring and Hall path before more motion.", + "evidence": { + "hall_count": 743, + "pulse_count": 0, + "near_direction_max_current_delta_raw": 205, + "far_direction_max_current_delta_raw": 198, + "far_probe_duration_ms": 500, + "far_probe_duty_pct": 90, + "position_valid": false + } + } + }, + { + "id": "MOTION-M2-60", + "group": "motion", + "utterance": "把副驾靠背调到60%", + "status": "safety_blocked", + "started_at": "2026-08-01T16:09:15.800665Z", + "finished_at": "2026-08-01T16:09:15.800666Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "backrest_recline", + "target_pct": 60, + "block_all_targets": true, + "reason": "M2 produced zero Hall pulses in both directions. Near-direction absolute and homing commands and a bounded far-direction 500 ms/90% timed probe all failed at Hall 743 with low current, indicating an unloaded/open output path; inspect the bridge channel, connector, motor wiring and Hall path before more motion.", + "evidence": { + "hall_count": 743, + "pulse_count": 0, + "near_direction_max_current_delta_raw": 205, + "far_direction_max_current_delta_raw": 198, + "far_probe_duration_ms": 500, + "far_probe_duty_pct": 90, + "position_valid": false + } + } + }, + { + "id": "MOTION-M2-HOME", + "group": "motion", + "utterance": "把副驾靠背归零", + "status": "safety_blocked", + "started_at": "2026-08-01T16:09:15.800672Z", + "finished_at": "2026-08-01T16:09:15.800673Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "backrest_recline", + "target_pct": 0, + "block_all_targets": true, + "reason": "M2 produced zero Hall pulses in both directions. Near-direction absolute and homing commands and a bounded far-direction 500 ms/90% timed probe all failed at Hall 743 with low current, indicating an unloaded/open output path; inspect the bridge channel, connector, motor wiring and Hall path before more motion.", + "evidence": { + "hall_count": 743, + "pulse_count": 0, + "near_direction_max_current_delta_raw": 205, + "far_direction_max_current_delta_raw": 198, + "far_probe_duration_ms": 500, + "far_probe_duty_pct": 90, + "position_valid": false + } + } + }, + { + "id": "MOTION-M3-20", + "group": "motion", + "utterance": "把副驾腿托调到20%", + "started_at": "2026-08-01T16:09:15.800679Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801160915-aef10a", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 20, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 2009, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 02 00 D9 07 00", + "timestamp": 30994.433753 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 00 01 00 FF FF 00", + "timestamp": 30994.459856 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 01 00 10 27 00", + "timestamp": 30994.486003 + } + }, + "backrest_recline": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 00 01 00 FF FF 00", + "timestamp": 30994.512075 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 30994.520044 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 30994.520044 + } + }, + "captured_at": "2026-08-01T16:09:19.593843Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:09:19.664419Z", + "duration_ms": 3864 + }, + { + "id": "MOTION-M3-60", + "group": "motion", + "utterance": "把副驾腿托调到60%", + "started_at": "2026-08-01T16:09:19.664479Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801160919-42d45b", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 00 03 00 FF FF 00", + "timestamp": 31001.234083 + } + }, + "legrest_height": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5997, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 04 00 6D 17 00", + "timestamp": 31001.260199 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 00 03 00 FF FF 00", + "timestamp": 31001.285196 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 03 00 10 27 00", + "timestamp": 31001.311303 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 31001.321594 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 31001.321594 + } + }, + "captured_at": "2026-08-01T16:09:26.395325Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:09:26.458684Z", + "duration_ms": 6794 + }, + { + "id": "MOTION-M3-HOME", + "group": "motion", + "utterance": "把副驾腿托归零", + "started_at": "2026-08-01T16:09:26.458742Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801160926-d345a6", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 05 00 10 27 00", + "timestamp": 31011.405943 + } + }, + "backrest_recline": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 00 05 00 FF FF 00", + "timestamp": 31011.432132 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 06 00 00 00 00", + "timestamp": 31011.457808 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 00 05 00 FF FF 00", + "timestamp": 31011.483575 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 31011.492588 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 31011.492588 + } + }, + "captured_at": "2026-08-01T16:09:36.565955Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:09:36.646801Z", + "duration_ms": 10188 + }, + { + "id": "MOTION-ALL-ZERO", + "group": "motion", + "utterance": "把副驾水平、坐盆、靠背、腿托四轴归零", + "status": "safety_blocked", + "started_at": "2026-08-01T16:09:36.646865Z", + "finished_at": "2026-08-01T16:09:36.646867Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 0, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "COMBINED-ALL", + "group": "combined", + "utterance": "打开副驾加热1档、打开通风1档,座椅水平到30%,坐盆到40%,靠背到37%,腿托到42%", + "status": "safety_blocked", + "started_at": "2026-08-01T16:09:36.646875Z", + "finished_at": "2026-08-01T16:09:36.646876Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 30, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "COMBINED-OFF", + "group": "combined", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T16:09:36.646882Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801160936-b6ccd7", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 00 05 00 FF FF 00", + "timestamp": 31012.243721 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 05 00 10 27 00", + "timestamp": 31012.269407 + } + }, + "backrest_recline": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 00 05 00 FF FF 00", + "timestamp": 31012.296292 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 06 00 00 00 00", + "timestamp": 31012.322045 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 31012.330757 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 31012.330757 + } + }, + "captured_at": "2026-08-01T16:09:37.404046Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:09:37.485026Z", + "duration_ms": 838 + }, + { + "id": "MODE-EASY-ENTRY", + "group": "mode", + "utterance": "副驾执行轻松进出模式", + "status": "safety_blocked", + "started_at": "2026-08-01T16:09:37.485095Z", + "finished_at": "2026-08-01T16:09:37.485097Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 100, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MODE-OFFICE", + "group": "mode", + "utterance": "副驾执行办公模式", + "status": "safety_blocked", + "started_at": "2026-08-01T16:09:37.485107Z", + "finished_at": "2026-08-01T16:09:37.485109Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 72, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MODE-QUEEN", + "group": "mode", + "utterance": "副驾执行女王副驾行驶模式", + "status": "safety_blocked", + "started_at": "2026-08-01T16:09:37.485115Z", + "finished_at": "2026-08-01T16:09:37.485117Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 72, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MODE-BABY-NAP", + "group": "mode", + "utterance": "副驾执行宝宝午睡模式", + "status": "safety_blocked", + "started_at": "2026-08-01T16:09:37.485124Z", + "finished_at": "2026-08-01T16:09:37.485125Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 81, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MODE-CRUISE-SOFA", + "group": "mode", + "utterance": "副驾执行巡航沙发模式", + "status": "safety_blocked", + "started_at": "2026-08-01T16:09:37.485132Z", + "finished_at": "2026-08-01T16:09:37.485133Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 51, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MODE-MEDITATION", + "group": "mode", + "utterance": "副驾执行冥想空间模式", + "status": "safety_blocked", + "started_at": "2026-08-01T16:09:37.485140Z", + "finished_at": "2026-08-01T16:09:37.485141Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 100, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MODE-LEISURE", + "group": "mode", + "utterance": "副驾执行休闲躺椅模式", + "status": "safety_blocked", + "started_at": "2026-08-01T16:09:37.485148Z", + "finished_at": "2026-08-01T16:09:37.485149Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 51, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MODE-CALF", + "group": "mode", + "utterance": "副驾执行小腿解压悬浮模式", + "status": "safety_blocked", + "started_at": "2026-08-01T16:09:37.485156Z", + "finished_at": "2026-08-01T16:09:37.485157Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 51, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MODE-BEACH", + "group": "mode", + "utterance": "副驾执行电感沙滩椅模式", + "status": "safety_blocked", + "started_at": "2026-08-01T16:09:37.485163Z", + "finished_at": "2026-08-01T16:09:37.485164Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 100, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MODE-NAP", + "group": "mode", + "utterance": "副驾执行小憩模式", + "status": "safety_blocked", + "started_at": "2026-08-01T16:09:37.485171Z", + "finished_at": "2026-08-01T16:09:37.485172Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 100, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + }, + { + "id": "MODE-ZERO-GRAVITY", + "group": "mode", + "utterance": "副驾执行零重力模式", + "status": "safety_blocked", + "started_at": "2026-08-01T16:09:37.485177Z", + "finished_at": "2026-08-01T16:09:37.485178Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "longitudinal", + "target_pct": 100, + "block_all_targets": true, + "reason": "M0 is position-invalid at the far endpoint and produced zero Hall pulses for near-direction absolute and homing commands at both 90% and 95% duty; inspect the mechanism, supply, bridge wiring and Hall path before more motion.", + "evidence": { + "hall_count": 499, + "pulse_count": 0, + "current_delta_raw_at_90_pct": 220, + "current_delta_raw_at_95_pct": 233, + "position_valid": false + } + } + } + ], + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T16:09:37.485184Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801160937-a34c01", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 06 00 00 00 00", + "timestamp": 31013.066507 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 00 05 00 FF FF 00", + "timestamp": 31013.092274 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 05 00 10 27 00", + "timestamp": 31013.117968 + } + }, + "backrest_recline": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 00 05 00 FF FF 00", + "timestamp": 31013.144143 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 31013.15201 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 31013.15201 + } + }, + "captured_at": "2026-08-01T16:09:38.225339Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:09:38.306618Z", + "duration_ms": 821 + }, + "finished_at": "2026-08-01T16:09:38.306667Z", + "summary": { + "total": 33, + "passed": 12, + "failed": 0, + "safety_blocked": 21, + "executed": 12, + "final_state_passed": true + } +} \ No newline at end of file diff --git a/artifacts/hil/seat_frontend_hil_20260801_run1.json b/artifacts/hil/seat_frontend_hil_20260801_run1.json new file mode 100644 index 0000000..e9f1fa8 --- /dev/null +++ b/artifacts/hil/seat_frontend_hil_20260801_run1.json @@ -0,0 +1,3352 @@ +{ + "suite": "t2g-seat-frontend-full-hil", + "started_at": "2026-08-01T14:14:47.917400Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801141447", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "THERM-H-1", + "group": "thermal", + "utterance": "副驾座椅加热开到1档", + "started_at": "2026-08-01T14:14:47.917460Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801141447-6d94bf", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 31, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 3, + "value_x100": 3060, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 00 08 00 00 F4 0B 00", + "timestamp": 24123.411518 + } + }, + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 0, + "value_x100": 7229, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 00 08 00 00 3D 1C 00", + "timestamp": 24123.437299 + } + }, + "cushion_tilt": { + "position_pct": 37, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 1, + "value_x100": 3743, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 00 08 00 00 9F 0E 00", + "timestamp": 24123.463555 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 2, + "value_x100": 4427, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 00 08 00 00 4B 11 00", + "timestamp": 24123.489414 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "11 00 00 00 00 00 00 00", + "timestamp": 24123.497273 + } + }, + "heating": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "11 00 00 00 00 00 00 00", + "timestamp": 24123.497273 + } + }, + "captured_at": "2026-08-01T14:14:48.722550Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:14:48.802959Z", + "duration_ms": 886 + }, + { + "id": "THERM-H-2", + "group": "thermal", + "utterance": "副驾座椅加热开到2档", + "started_at": "2026-08-01T14:14:48.803012Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801141448-b14ec4", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 0, + "value_x100": 7229, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 00 08 00 00 3D 1C 00", + "timestamp": 24124.299453 + } + }, + "cushion_tilt": { + "position_pct": 37, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 1, + "value_x100": 3743, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 00 08 00 00 9F 0E 00", + "timestamp": 24124.325272 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 2, + "value_x100": 4427, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 00 08 00 00 4B 11 00", + "timestamp": 24124.351111 + } + }, + "legrest_height": { + "position_pct": 31, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 3, + "value_x100": 3060, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 00 08 00 00 F4 0B 00", + "timestamp": 24124.377319 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "19 00 00 00 00 00 00 00", + "timestamp": 24124.38524 + } + }, + "heating": { + "state": "on", + "level": 2, + "feedback_value": 3, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "19 00 00 00 00 00 00 00", + "timestamp": 24124.38524 + } + }, + "captured_at": "2026-08-01T14:14:49.610360Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:14:49.690777Z", + "duration_ms": 888 + }, + { + "id": "THERM-H-3", + "group": "thermal", + "utterance": "副驾座椅加热开到3档", + "started_at": "2026-08-01T14:14:49.690829Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801141449-1da566", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 37, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 1, + "value_x100": 3743, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 00 08 00 00 9F 0E 00", + "timestamp": 24125.203986 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 2, + "value_x100": 4427, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 00 08 00 00 4B 11 00", + "timestamp": 24125.229849 + } + }, + "legrest_height": { + "position_pct": 31, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 3, + "value_x100": 3060, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 00 08 00 00 F4 0B 00", + "timestamp": 24125.255657 + } + }, + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 0, + "value_x100": 7229, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 00 08 00 00 3D 1C 00", + "timestamp": 24125.281928 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "21 00 00 00 00 00 00 00", + "timestamp": 24125.289845 + } + }, + "heating": { + "state": "on", + "level": 3, + "feedback_value": 4, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "21 00 00 00 00 00 00 00", + "timestamp": 24125.289845 + } + }, + "captured_at": "2026-08-01T14:14:50.514950Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:14:50.598949Z", + "duration_ms": 908 + }, + { + "id": "THERM-H-OFF", + "group": "thermal", + "utterance": "关闭副驾座椅加热", + "started_at": "2026-08-01T14:14:50.599004Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801141450-c3228f", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 37, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 1, + "value_x100": 3743, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 00 08 00 00 9F 0E 00", + "timestamp": 24126.048902 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 2, + "value_x100": 4427, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 00 08 00 00 4B 11 00", + "timestamp": 24126.075073 + } + }, + "legrest_height": { + "position_pct": 31, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 3, + "value_x100": 3060, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 00 08 00 00 F4 0B 00", + "timestamp": 24126.101963 + } + }, + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 0, + "value_x100": 7229, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 00 08 00 00 3D 1C 00", + "timestamp": 24126.127704 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24126.135601 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24126.135601 + } + }, + "captured_at": "2026-08-01T14:14:51.360844Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:14:51.445633Z", + "duration_ms": 847 + }, + { + "id": "THERM-V-1", + "group": "thermal", + "utterance": "副驾座椅通风开到1档", + "started_at": "2026-08-01T14:14:51.445709Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801141451-b0593e", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 37, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 1, + "value_x100": 3743, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 00 08 00 00 9F 0E 00", + "timestamp": 24126.929876 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 2, + "value_x100": 4427, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 00 08 00 00 4B 11 00", + "timestamp": 24126.955577 + } + }, + "legrest_height": { + "position_pct": 31, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 3, + "value_x100": 3060, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 00 08 00 00 F4 0B 00", + "timestamp": 24126.981777 + } + }, + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 0, + "value_x100": 7229, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 00 08 00 00 3D 1C 00", + "timestamp": 24127.007498 + } + } + }, + "ventilation": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0A 00 00 00 00 00 00 00", + "timestamp": 24127.015439 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0A 00 00 00 00 00 00 00", + "timestamp": 24127.015439 + } + }, + "captured_at": "2026-08-01T14:14:52.240452Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:14:52.313460Z", + "duration_ms": 868 + }, + { + "id": "THERM-V-2", + "group": "thermal", + "utterance": "副驾座椅通风开到2档", + "started_at": "2026-08-01T14:14:52.313513Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801141452-9c0117", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 37, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 1, + "value_x100": 3743, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 00 08 00 00 9F 0E 00", + "timestamp": 24127.807124 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 2, + "value_x100": 4427, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 00 08 00 00 4B 11 00", + "timestamp": 24127.834033 + } + }, + "legrest_height": { + "position_pct": 31, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 3, + "value_x100": 3060, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 00 08 00 00 F4 0B 00", + "timestamp": 24127.859853 + } + }, + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 0, + "value_x100": 7229, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 00 08 00 00 3D 1C 00", + "timestamp": 24127.885972 + } + } + }, + "ventilation": { + "state": "on", + "level": 2, + "feedback_value": 3, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0B 00 00 00 00 00 00 00", + "timestamp": 24127.892765 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0B 00 00 00 00 00 00 00", + "timestamp": 24127.892765 + } + }, + "captured_at": "2026-08-01T14:14:53.117893Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:14:53.196231Z", + "duration_ms": 883 + }, + { + "id": "THERM-V-3", + "group": "thermal", + "utterance": "副驾座椅通风开到3档", + "started_at": "2026-08-01T14:14:53.196282Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801141453-731eeb", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 37, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 1, + "value_x100": 3743, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 00 08 00 00 9F 0E 00", + "timestamp": 24128.637499 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 2, + "value_x100": 4427, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 00 08 00 00 4B 11 00", + "timestamp": 24128.663729 + } + }, + "legrest_height": { + "position_pct": 31, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 3, + "value_x100": 3060, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 00 08 00 00 F4 0B 00", + "timestamp": 24128.689508 + } + }, + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 0, + "value_x100": 7229, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 00 08 00 00 3D 1C 00", + "timestamp": 24128.715271 + } + } + }, + "ventilation": { + "state": "on", + "level": 3, + "feedback_value": 4, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0C 00 00 00 00 00 00 00", + "timestamp": 24128.725394 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0C 00 00 00 00 00 00 00", + "timestamp": 24128.725394 + } + }, + "captured_at": "2026-08-01T14:14:53.950551Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:14:54.033330Z", + "duration_ms": 837 + }, + { + "id": "THERM-V-OFF", + "group": "thermal", + "utterance": "关闭副驾座椅通风", + "started_at": "2026-08-01T14:14:54.033396Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801141454-49641e", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 37, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 1, + "value_x100": 3743, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 00 08 00 00 9F 0E 00", + "timestamp": 24129.503147 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 2, + "value_x100": 4427, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 00 08 00 00 4B 11 00", + "timestamp": 24129.530063 + } + }, + "legrest_height": { + "position_pct": 31, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 3, + "value_x100": 3060, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 00 08 00 00 F4 0B 00", + "timestamp": 24129.55577 + } + }, + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 0, + "value_x100": 7229, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 00 08 00 00 3D 1C 00", + "timestamp": 24129.581974 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24129.58987 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24129.58987 + } + }, + "captured_at": "2026-08-01T14:14:54.814846Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:14:54.898071Z", + "duration_ms": 865 + }, + { + "id": "MOTION-M0-25", + "group": "motion", + "utterance": "把副驾座椅水平位置调到25%", + "started_at": "2026-08-01T14:14:54.898127Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801141454-dbc16e", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 25, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 2500, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 02 00 C4 09 00", + "timestamp": 24141.694235 + } + }, + "cushion_tilt": { + "position_pct": 37, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 3743, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 01 00 9F 0E 00", + "timestamp": 24141.720266 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 4427, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 08 01 00 4B 11 00", + "timestamp": 24141.746297 + } + }, + "legrest_height": { + "position_pct": 31, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 3060, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 08 01 00 F4 0B 00", + "timestamp": 24141.771625 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24141.780738 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24141.780738 + } + }, + "captured_at": "2026-08-01T14:15:07.005696Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:15:07.088819Z", + "duration_ms": 12191 + }, + { + "id": "MOTION-M0-75", + "group": "motion", + "utterance": "把副驾座椅水平位置调到75%", + "started_at": "2026-08-01T14:15:07.088874Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801141507-d92525", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 31, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 3060, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 08 03 00 F4 0B 00", + "timestamp": 24149.95811 + } + }, + "longitudinal": { + "position_pct": 75, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 7521, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 04 00 61 1D 00", + "timestamp": 24149.984592 + } + }, + "cushion_tilt": { + "position_pct": 37, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 3743, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 03 00 9F 0E 00", + "timestamp": 24150.009475 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 4427, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 08 03 00 4B 11 00", + "timestamp": 24150.035554 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24150.045799 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24150.045799 + } + }, + "captured_at": "2026-08-01T14:15:15.270556Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:15:15.347868Z", + "duration_ms": 8259 + }, + { + "id": "MOTION-M1-20", + "group": "motion", + "utterance": "把副驾坐盆调到20%", + "started_at": "2026-08-01T14:15:15.347936Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801141515-725041", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 20, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2005, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 06 00 D5 07 00", + "timestamp": 24152.34201 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 4427, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 08 05 00 4B 11 00", + "timestamp": 24152.368492 + } + }, + "legrest_height": { + "position_pct": 31, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 3060, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 08 05 00 F4 0B 00", + "timestamp": 24152.394569 + } + }, + "longitudinal": { + "position_pct": 75, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 7521, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 08 05 00 61 1D 00", + "timestamp": 24152.4206 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24152.429711 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24152.429711 + } + }, + "captured_at": "2026-08-01T14:15:17.654358Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:15:17.738126Z", + "duration_ms": 2390 + }, + { + "id": "MOTION-M1-60", + "group": "motion", + "utterance": "把副驾坐盆调到60%", + "started_at": "2026-08-01T14:15:17.738191Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801141517-936748", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 08 00 65 17 00", + "timestamp": 24156.567977 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 4427, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 08 07 00 4B 11 00", + "timestamp": 24156.594054 + } + }, + "legrest_height": { + "position_pct": 31, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 3060, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 08 07 00 F4 0B 00", + "timestamp": 24156.620108 + } + }, + "longitudinal": { + "position_pct": 75, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 7521, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 08 07 00 61 1D 00", + "timestamp": 24156.646171 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24156.653 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24156.653 + } + }, + "captured_at": "2026-08-01T14:15:21.877523Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:15:21.956939Z", + "duration_ms": 4219 + }, + { + "id": "MOTION-M2-25", + "group": "motion", + "utterance": "把副驾靠背调到25%", + "started_at": "2026-08-01T14:15:21.957019Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801141521-e4b6fa", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 09 00 65 17 00", + "timestamp": 24161.718216 + } + }, + "backrest_recline": { + "position_pct": 25, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 2486, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 0A 00 B6 09 00", + "timestamp": 24161.744267 + } + }, + "legrest_height": { + "position_pct": 31, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 3060, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 08 09 00 F4 0B 00", + "timestamp": 24161.770723 + } + }, + "longitudinal": { + "position_pct": 75, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 7521, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 08 09 00 61 1D 00", + "timestamp": 24161.796778 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24161.805891 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24161.805891 + } + }, + "captured_at": "2026-08-01T14:15:27.030248Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:15:27.117762Z", + "duration_ms": 5161 + }, + { + "id": "MOTION-M2-60", + "group": "motion", + "utterance": "把副驾靠背调到60%", + "started_at": "2026-08-01T14:15:27.117827Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801141527-e7c6f8", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 31, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 3060, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 08 0B 00 F4 0B 00", + "timestamp": 24171.276607 + } + }, + "longitudinal": { + "position_pct": 75, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 7521, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 08 0B 00 61 1D 00", + "timestamp": 24171.302616 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 0B 00 65 17 00", + "timestamp": 24171.328736 + } + }, + "backrest_recline": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 6009, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 0C 00 79 17 00", + "timestamp": 24171.354781 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24171.362738 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24171.362738 + } + }, + "captured_at": "2026-08-01T14:15:36.586905Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:15:36.658970Z", + "duration_ms": 9541 + }, + { + "id": "MOTION-M3-20", + "group": "motion", + "utterance": "把副驾腿托调到20%", + "started_at": "2026-08-01T14:15:36.659041Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801141536-c450d3", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 6009, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 08 0D 00 79 17 00", + "timestamp": 24173.68069 + } + }, + "legrest_height": { + "position_pct": 20, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 1978, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 0E 00 BA 07 00", + "timestamp": 24173.706743 + } + }, + "longitudinal": { + "position_pct": 75, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 7521, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 08 0D 00 61 1D 00", + "timestamp": 24173.732784 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 0D 00 65 17 00", + "timestamp": 24173.758876 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24173.768427 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24173.768427 + } + }, + "captured_at": "2026-08-01T14:15:38.992583Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:15:39.064026Z", + "duration_ms": 2405 + }, + { + "id": "MOTION-M3-60", + "group": "motion", + "utterance": "把副驾腿托调到60%", + "started_at": "2026-08-01T14:15:39.064084Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801141539-a9fe4a", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 0F 00 65 17 00", + "timestamp": 24180.47683 + } + }, + "backrest_recline": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 6009, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 08 0F 00 79 17 00", + "timestamp": 24180.502847 + } + }, + "legrest_height": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5997, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 10 00 6D 17 00", + "timestamp": 24180.528991 + } + }, + "longitudinal": { + "position_pct": 75, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 7521, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 08 0F 00 61 1D 00", + "timestamp": 24180.555066 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24180.563025 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24180.563025 + } + }, + "captured_at": "2026-08-01T14:15:45.786997Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:15:45.863213Z", + "duration_ms": 6799 + }, + { + "id": "MOTION-ALL-ZERO", + "group": "motion", + "utterance": "把副驾水平、坐盆、靠背、腿托四轴归零", + "started_at": "2026-08-01T14:15:45.863269Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801141545-f60574", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 16 00 00 00 00", + "timestamp": 24235.453923 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 17 00 00 00 00", + "timestamp": 24235.479979 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 12 00 00 00 00", + "timestamp": 24235.505706 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 15 00 00 00 00", + "timestamp": 24235.532537 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24235.539318 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24235.539318 + } + }, + "captured_at": "2026-08-01T14:16:40.761936Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:16:40.850651Z", + "duration_ms": 54987 + }, + { + "id": "COMBINED-ALL", + "group": "combined", + "utterance": "副驾加热1档、通风1档,座椅水平到30%,坐盆到25%,靠背到120度,腿托到125度", + "started_at": "2026-08-01T14:16:40.850721Z", + "status": "failed", + "errors": [ + "request failed" + ], + "http_status": 201, + "request_id": "req-20260801141640-49e911", + "finished_at": "2026-08-01T14:16:40.871779Z", + "duration_ms": 21 + }, + { + "id": "COMBINED-OFF", + "group": "combined", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T14:16:40.871816Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801141640-363924", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 15 00 00 00 00", + "timestamp": 24236.31008 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 16 00 00 00 00", + "timestamp": 24236.335863 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 17 00 00 00 00", + "timestamp": 24236.361559 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 12 00 00 00 00", + "timestamp": 24236.38765 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24236.396631 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24236.396631 + } + }, + "captured_at": "2026-08-01T14:16:41.619394Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:16:41.694263Z", + "duration_ms": 822 + }, + { + "id": "MODE-EASY-ENTRY", + "group": "mode", + "utterance": "副驾执行轻松进出模式", + "started_at": "2026-08-01T14:16:41.694321Z", + "status": "failed", + "errors": [ + "T2G motor 0 STALL: task_state=7, Hall=0->383" + ], + "http_status": 201, + "request_id": "req-20260801141641-09e041", + "failure_telemetry": { + "motor_selector": 0, + "motion_axis": "longitudinal", + "task_state": 7, + "motor_result": 5, + "motor_result_name": "STALL", + "position_valid": true, + "hall_before": 0, + "hall_after": 383, + "hall_delta": 383, + "endpoint_recovery_max_near_hall": 72, + "command_frame": { + "frame_id": "0x300", + "payload_size": 8, + "data_hex": "01 10 19 00 10 27 30 75", + "timestamp": null + }, + "ack_frame": { + "frame_id": "0x301", + "payload_size": 8, + "data_hex": "21 00 19 00 01 01 F0 3F", + "timestamp": 24236.782792 + }, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 57 48 19 00 2B 1F 00", + "timestamp": 24255.522487 + }, + "diagnostic_before_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "00 00 00 00 E0 01 00 F0", + "timestamp": 24236.780998 + }, + "diagnostic_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "00 14 7F 01 E0 01 00 71", + "timestamp": 24255.524798 + }, + "diagnostic_read_error": null, + "current_diagnostic": { + "sample_count": 184, + "valid_sample_count": 184, + "max_current_raw": 824, + "max_current_delta_raw": 822, + "high_current_seen": true, + "low_hall_seen": true, + "stall_overlap_seen": true, + "peak": { + "current_raw": 824, + "current_baseline_raw": 2, + "current_delta_raw": 822, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": true, + "hall_activity_low": true, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "00 0F 38 03 02 00 F4 01", + "timestamp": 24251.756916 + } + }, + "latest": { + "current_raw": 779, + "current_baseline_raw": 4, + "current_delta_raw": 775, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": true, + "hall_activity_low": true, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "00 0F 0B 03 04 00 F4 01", + "timestamp": 24255.503046 + } + } + }, + "error_type": "HardwareExecutionError", + "stop_all_attempted": true, + "simulated": false + }, + "finished_at": "2026-08-01T14:17:00.843956Z", + "duration_ms": 19150 + }, + { + "id": "MODE-OFFICE", + "group": "mode", + "utterance": "副驾执行办公模式", + "started_at": "2026-08-01T14:17:00.844003Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801141700-81b370", + "matched_modes": [ + "office" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 21, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 2102, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 1F 00 36 08 00", + "timestamp": 24275.546517 + } + }, + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 7208, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 1C 00 28 1C 00", + "timestamp": 24275.574062 + } + }, + "cushion_tilt": { + "position_pct": 22, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2193, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 1D 00 91 08 00", + "timestamp": 24275.599004 + } + }, + "backrest_recline": { + "position_pct": 22, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 2203, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 1E 00 9B 08 00", + "timestamp": 24275.625093 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24275.634162 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24275.634162 + } + }, + "captured_at": "2026-08-01T14:17:20.855960Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:17:20.947339Z", + "duration_ms": 20103 + }, + { + "id": "MODE-QUEEN", + "group": "mode", + "utterance": "副驾执行女王副驾行驶模式", + "started_at": "2026-08-01T14:17:20.947416Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801141720-c5ea05", + "matched_modes": [ + "queen_passenger_driving" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 31, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 3122, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 24 00 32 0C 00", + "timestamp": 24292.875064 + } + }, + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 7208, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 21 00 28 1C 00", + "timestamp": 24292.901064 + } + }, + "cushion_tilt": { + "position_pct": 38, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 3797, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 22 00 D5 0E 00", + "timestamp": 24292.927157 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4406, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 23 00 36 11 00", + "timestamp": 24292.953161 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24292.963404 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24292.963404 + } + }, + "captured_at": "2026-08-01T14:17:38.184818Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:17:38.266338Z", + "duration_ms": 17319 + }, + { + "id": "MODE-BABY-NAP", + "group": "mode", + "utterance": "副驾执行宝宝午睡模式", + "started_at": "2026-08-01T14:17:38.266432Z", + "status": "failed", + "errors": [ + "T2G motor 1 STALL: task_state=7, Hall=142->123" + ], + "http_status": 201, + "request_id": "req-20260801141738-191223", + "failure_telemetry": { + "motor_selector": 1, + "motion_axis": "cushion_tilt", + "task_state": 7, + "motor_result": 5, + "motor_result_name": "STALL", + "position_valid": true, + "hall_before": 142, + "hall_after": 123, + "hall_delta": 19, + "endpoint_recovery_max_near_hall": 56, + "command_frame": { + "frame_id": "0x300", + "payload_size": 8, + "data_hex": "01 11 27 00 B8 0B 30 75", + "timestamp": null + }, + "ack_frame": { + "frame_id": "0x301", + "payload_size": 8, + "data_hex": "21 00 27 00 01 02 F0 3A", + "timestamp": 24296.662852 + }, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 57 48 27 00 D9 0C 00", + "timestamp": 24305.923277 + }, + "diagnostic_before_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "01 00 8E 00 76 01 00 00", + "timestamp": 24294.693346 + }, + "diagnostic_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "01 14 7B 00 76 01 00 F1", + "timestamp": 24305.924445 + }, + "diagnostic_read_error": null, + "current_diagnostic": { + "sample_count": 111, + "valid_sample_count": 111, + "max_current_raw": 1365, + "max_current_delta_raw": 1363, + "high_current_seen": true, + "low_hall_seen": true, + "stall_overlap_seen": true, + "peak": { + "current_raw": 1365, + "current_baseline_raw": 2, + "current_delta_raw": 1363, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": true, + "hall_activity_low": false, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "01 07 55 05 02 00 F4 01", + "timestamp": 24304.696515 + } + }, + "latest": { + "current_raw": 1297, + "current_baseline_raw": 2, + "current_delta_raw": 1295, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": true, + "hall_activity_low": true, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "01 0F 11 05 02 00 F4 01", + "timestamp": 24305.841614 + } + } + }, + "error_type": "HardwareExecutionError", + "stop_all_attempted": true, + "simulated": false + }, + "finished_at": "2026-08-01T14:17:51.354874Z", + "duration_ms": 13088 + }, + { + "id": "MODE-CRUISE-SOFA", + "group": "mode", + "utterance": "副驾执行巡航沙发模式", + "started_at": "2026-08-01T14:17:51.354933Z", + "status": "failed", + "errors": [ + "T2G motor 1 STALL: task_state=7, Hall=123->123" + ], + "http_status": 201, + "request_id": "req-20260801141751-d704a2", + "failure_telemetry": { + "motor_selector": 1, + "motion_axis": "cushion_tilt", + "task_state": 7, + "motor_result": 5, + "motor_result_name": "STALL", + "position_valid": true, + "hall_before": 123, + "hall_after": 123, + "hall_delta": 0, + "endpoint_recovery_max_near_hall": 56, + "command_frame": { + "frame_id": "0x300", + "payload_size": 8, + "data_hex": "01 11 2B 00 B8 0B 30 75", + "timestamp": null + }, + "ack_frame": { + "frame_id": "0x301", + "payload_size": 8, + "data_hex": "21 00 2B 00 01 02 F0 39", + "timestamp": 24313.372947 + }, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 57 48 2B 00 D9 0C 00", + "timestamp": 24318.775514 + }, + "diagnostic_before_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "01 04 7B 00 76 01 00 50", + "timestamp": 24311.475176 + }, + "diagnostic_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "01 14 7B 00 76 01 00 F1", + "timestamp": 24318.776702 + }, + "diagnostic_read_error": null, + "current_diagnostic": { + "sample_count": 74, + "valid_sample_count": 74, + "max_current_raw": 1312, + "max_current_delta_raw": 1312, + "high_current_seen": true, + "low_hall_seen": true, + "stall_overlap_seen": true, + "peak": { + "current_raw": 1312, + "current_baseline_raw": 0, + "current_delta_raw": 1312, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": true, + "hall_activity_low": false, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "01 07 20 05 00 00 F4 01", + "timestamp": 24313.559687 + } + }, + "latest": { + "current_raw": 1251, + "current_baseline_raw": 1, + "current_delta_raw": 1250, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": true, + "hall_activity_low": true, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "01 0F E3 04 01 00 F4 01", + "timestamp": 24318.766784 + } + } + }, + "error_type": "HardwareExecutionError", + "stop_all_attempted": true, + "simulated": false + }, + "finished_at": "2026-08-01T14:18:04.188710Z", + "duration_ms": 12834 + }, + { + "id": "MODE-MEDITATION", + "group": "mode", + "utterance": "副驾执行冥想空间模式", + "started_at": "2026-08-01T14:18:04.188762Z", + "status": "failed", + "errors": [ + "T2G motor 0 STALL: task_state=7, Hall=245->403" + ], + "http_status": 201, + "request_id": "req-20260801141804-a5f1c3", + "failure_telemetry": { + "motor_selector": 0, + "motion_axis": "longitudinal", + "task_state": 7, + "motor_result": 5, + "motor_result_name": "STALL", + "position_valid": true, + "hall_before": 245, + "hall_after": 403, + "hall_delta": 158, + "endpoint_recovery_max_near_hall": 72, + "command_frame": { + "frame_id": "0x300", + "payload_size": 8, + "data_hex": "01 10 2E 00 10 27 30 75", + "timestamp": null + }, + "ack_frame": { + "frame_id": "0x301", + "payload_size": 8, + "data_hex": "21 00 2E 00 01 01 F0 39", + "timestamp": 24319.304308 + }, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 57 48 2E 00 CC 20 00", + "timestamp": 24328.676049 + }, + "diagnostic_before_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "00 00 F5 00 E0 01 00 C0", + "timestamp": 24319.302359 + }, + "diagnostic_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "00 14 93 01 E0 01 00 A1", + "timestamp": 24328.677195 + }, + "diagnostic_read_error": null, + "current_diagnostic": { + "sample_count": 94, + "valid_sample_count": 94, + "max_current_raw": 901, + "max_current_delta_raw": 897, + "high_current_seen": true, + "low_hall_seen": true, + "stall_overlap_seen": true, + "peak": { + "current_raw": 901, + "current_baseline_raw": 4, + "current_delta_raw": 897, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": true, + "hall_activity_low": false, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "00 07 85 03 04 00 F4 01", + "timestamp": 24327.070476 + } + }, + "latest": { + "current_raw": 776, + "current_baseline_raw": 4, + "current_delta_raw": 772, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": true, + "hall_activity_low": true, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "00 0F 08 03 04 00 F4 01", + "timestamp": 24328.63209 + } + } + }, + "error_type": "HardwareExecutionError", + "stop_all_attempted": true, + "simulated": false + }, + "finished_at": "2026-08-01T14:18:14.093374Z", + "duration_ms": 9905 + }, + { + "id": "MODE-LEISURE", + "group": "mode", + "utterance": "副驾执行休闲躺椅模式", + "started_at": "2026-08-01T14:18:14.093456Z", + "status": "failed", + "errors": [ + "T2G motor 1 STALL: task_state=7, Hall=123->123" + ], + "http_status": 201, + "request_id": "req-20260801141814-c17545", + "failure_telemetry": { + "motor_selector": 1, + "motion_axis": "cushion_tilt", + "task_state": 7, + "motor_result": 5, + "motor_result_name": "STALL", + "position_valid": true, + "hall_before": 123, + "hall_after": 123, + "hall_delta": 0, + "endpoint_recovery_max_near_hall": 56, + "command_frame": { + "frame_id": "0x300", + "payload_size": 8, + "data_hex": "01 11 32 00 B8 0B 30 75", + "timestamp": null + }, + "ack_frame": { + "frame_id": "0x301", + "payload_size": 8, + "data_hex": "21 00 32 00 01 02 F0 31", + "timestamp": 24337.068067 + }, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 57 48 32 00 D9 0C 00", + "timestamp": 24342.475585 + }, + "diagnostic_before_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "01 04 7B 00 76 01 00 D0", + "timestamp": 24335.192888 + }, + "diagnostic_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "01 14 7B 00 76 01 00 61", + "timestamp": 24342.477926 + }, + "diagnostic_read_error": null, + "current_diagnostic": { + "sample_count": 73, + "valid_sample_count": 73, + "max_current_raw": 1337, + "max_current_delta_raw": 1337, + "high_current_seen": true, + "low_hall_seen": true, + "stall_overlap_seen": true, + "peak": { + "current_raw": 1337, + "current_baseline_raw": 0, + "current_delta_raw": 1337, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": true, + "hall_activity_low": false, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "01 07 39 05 00 00 F4 01", + "timestamp": 24337.378712 + } + }, + "latest": { + "current_raw": 1061, + "current_baseline_raw": 2, + "current_delta_raw": 1059, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": true, + "hall_activity_low": true, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "01 0F 25 04 02 00 F4 01", + "timestamp": 24342.379171 + } + } + }, + "error_type": "HardwareExecutionError", + "stop_all_attempted": true, + "simulated": false + }, + "finished_at": "2026-08-01T14:18:27.856678Z", + "duration_ms": 13763 + }, + { + "id": "MODE-CALF", + "group": "mode", + "utterance": "副驾执行小腿解压悬浮模式", + "started_at": "2026-08-01T14:18:27.856734Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801141827-927076", + "matched_modes": [ + "calf_decompression_float" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 5104, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 35 00 F0 13 00", + "timestamp": 24380.870049 + } + }, + "cushion_tilt": { + "position_pct": 75, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 7513, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 36 00 59 1D 00", + "timestamp": 24380.895299 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 37 00 00 00 00", + "timestamp": 24380.921326 + } + }, + "legrest_height": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": true, + "task_state": 7, + "motor_result": 6, + "motor_selector": 3, + "value_x100": 9954, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 67 08 38 00 E2 26 00", + "timestamp": 24380.947374 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24380.956429 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24380.956429 + } + }, + "captured_at": "2026-08-01T14:19:06.175744Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:19:06.248103Z", + "duration_ms": 38391 + }, + { + "id": "MODE-BEACH", + "group": "mode", + "utterance": "副驾执行电感沙滩椅模式", + "started_at": "2026-08-01T14:19:06.248167Z", + "status": "failed", + "errors": [ + "T2G motor 0 STALL: task_state=7, Hall=245->403" + ], + "http_status": 201, + "request_id": "req-20260801141906-e7f9a9", + "failure_telemetry": { + "motor_selector": 0, + "motion_axis": "longitudinal", + "task_state": 7, + "motor_result": 5, + "motor_result_name": "STALL", + "position_valid": true, + "hall_before": 245, + "hall_after": 403, + "hall_delta": 158, + "endpoint_recovery_max_near_hall": 72, + "command_frame": { + "frame_id": "0x300", + "payload_size": 8, + "data_hex": "01 10 3A 00 10 27 30 75", + "timestamp": null + }, + "ack_frame": { + "frame_id": "0x301", + "payload_size": 8, + "data_hex": "21 00 3A 00 01 01 F0 38", + "timestamp": 24381.322731 + }, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 57 48 3A 00 CC 20 00", + "timestamp": 24390.577474 + }, + "diagnostic_before_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "00 00 F5 00 E0 01 00 30", + "timestamp": 24381.32081 + }, + "diagnostic_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "00 14 93 01 E0 01 00 01", + "timestamp": 24390.57976 + }, + "diagnostic_read_error": null, + "current_diagnostic": { + "sample_count": 93, + "valid_sample_count": 93, + "max_current_raw": 889, + "max_current_delta_raw": 888, + "high_current_seen": true, + "low_hall_seen": true, + "stall_overlap_seen": true, + "peak": { + "current_raw": 889, + "current_baseline_raw": 1, + "current_delta_raw": 888, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": true, + "hall_activity_low": true, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "00 0F 79 03 01 00 F4 01", + "timestamp": 24386.84949 + } + }, + "latest": { + "current_raw": 870, + "current_baseline_raw": 4, + "current_delta_raw": 866, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": true, + "hall_activity_low": true, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "00 0F 66 03 04 00 F4 01", + "timestamp": 24390.498443 + } + } + }, + "error_type": "HardwareExecutionError", + "stop_all_attempted": true, + "simulated": false + }, + "finished_at": "2026-08-01T14:19:15.984934Z", + "duration_ms": 9737 + }, + { + "id": "MODE-NAP", + "group": "mode", + "utterance": "副驾执行小憩模式", + "started_at": "2026-08-01T14:19:15.984987Z", + "status": "failed", + "errors": [ + "T2G motor 0 STALL: task_state=7, Hall=403->403" + ], + "http_status": 201, + "request_id": "req-20260801141915-38651e", + "failure_telemetry": { + "motor_selector": 0, + "motion_axis": "longitudinal", + "task_state": 7, + "motor_result": 5, + "motor_result_name": "STALL", + "position_valid": true, + "hall_before": 403, + "hall_after": 403, + "hall_delta": 0, + "endpoint_recovery_max_near_hall": 72, + "command_frame": { + "frame_id": "0x300", + "payload_size": 8, + "data_hex": "01 10 3D 00 10 27 30 75", + "timestamp": null + }, + "ack_frame": { + "frame_id": "0x301", + "payload_size": 8, + "data_hex": "21 00 3D 00 01 01 F0 3E", + "timestamp": 24391.074151 + }, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 57 48 3D 00 CC 20 00", + "timestamp": 24396.477417 + }, + "diagnostic_before_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "00 04 93 01 E0 01 00 50", + "timestamp": 24391.072176 + }, + "diagnostic_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "00 14 93 01 E0 01 00 D1", + "timestamp": 24396.478605 + }, + "diagnostic_read_error": null, + "current_diagnostic": { + "sample_count": 56, + "valid_sample_count": 56, + "max_current_raw": 883, + "max_current_delta_raw": 879, + "high_current_seen": true, + "low_hall_seen": true, + "stall_overlap_seen": true, + "peak": { + "current_raw": 883, + "current_baseline_raw": 4, + "current_delta_raw": 879, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": true, + "hall_activity_low": false, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "00 07 73 03 04 00 F4 01", + "timestamp": 24394.992622 + } + }, + "latest": { + "current_raw": 869, + "current_baseline_raw": 4, + "current_delta_raw": 865, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": true, + "hall_activity_low": true, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "00 0F 65 03 04 00 F4 01", + "timestamp": 24396.448417 + } + } + }, + "error_type": "HardwareExecutionError", + "stop_all_attempted": true, + "simulated": false + }, + "finished_at": "2026-08-01T14:19:21.864717Z", + "duration_ms": 5880 + }, + { + "id": "MODE-ZERO-GRAVITY", + "group": "mode", + "utterance": "副驾执行零重力模式", + "started_at": "2026-08-01T14:19:21.864769Z", + "status": "failed", + "errors": [ + "T2G motor 0 STALL: task_state=7, Hall=403->403" + ], + "http_status": 201, + "request_id": "req-20260801141921-02f30a", + "failure_telemetry": { + "motor_selector": 0, + "motion_axis": "longitudinal", + "task_state": 7, + "motor_result": 5, + "motor_result_name": "STALL", + "position_valid": true, + "hall_before": 403, + "hall_after": 403, + "hall_delta": 0, + "endpoint_recovery_max_near_hall": 72, + "command_frame": { + "frame_id": "0x300", + "payload_size": 8, + "data_hex": "01 10 40 00 10 27 30 75", + "timestamp": null + }, + "ack_frame": { + "frame_id": "0x301", + "payload_size": 8, + "data_hex": "21 00 40 00 01 01 F0 3E", + "timestamp": 24396.931321 + }, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 57 48 40 00 CC 20 00", + "timestamp": 24402.377888 + }, + "diagnostic_before_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "00 04 93 01 E0 01 00 10", + "timestamp": 24396.929403 + }, + "diagnostic_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "00 14 93 01 E0 01 00 91", + "timestamp": 24402.380189 + }, + "diagnostic_read_error": null, + "current_diagnostic": { + "sample_count": 56, + "valid_sample_count": 56, + "max_current_raw": 1010, + "max_current_delta_raw": 1005, + "high_current_seen": true, + "low_hall_seen": true, + "stall_overlap_seen": true, + "peak": { + "current_raw": 1010, + "current_baseline_raw": 5, + "current_delta_raw": 1005, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": true, + "hall_activity_low": false, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "00 07 F2 03 05 00 F4 01", + "timestamp": 24397.174325 + } + }, + "latest": { + "current_raw": 723, + "current_baseline_raw": 4, + "current_delta_raw": 719, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": true, + "hall_activity_low": true, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "00 0F D3 02 04 00 F4 01", + "timestamp": 24402.278384 + } + } + }, + "error_type": "HardwareExecutionError", + "stop_all_attempted": true, + "simulated": false + }, + "finished_at": "2026-08-01T14:19:27.698586Z", + "duration_ms": 5834 + } + ], + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T14:19:27.698630Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801141927-c5b3af", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 41 00 00 00 00", + "timestamp": 24403.207866 + } + }, + "legrest_height": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 9954, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 08 41 00 E2 26 00", + "timestamp": 24403.233854 + } + }, + "longitudinal": { + "position_pct": 84, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 8396, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 08 41 00 CC 20 00", + "timestamp": 24403.259871 + } + }, + "cushion_tilt": { + "position_pct": 75, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 7513, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 41 00 59 1D 00", + "timestamp": 24403.286271 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24403.295364 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 24403.295364 + } + }, + "captured_at": "2026-08-01T14:19:28.514121Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:19:28.593969Z", + "duration_ms": 895 + }, + "finished_at": "2026-08-01T14:19:28.594006Z", + "summary": { + "total": 30, + "passed": 21, + "failed": 9, + "final_state_passed": true + } +} \ No newline at end of file diff --git a/artifacts/hil/seat_frontend_hil_20260801_run2.json b/artifacts/hil/seat_frontend_hil_20260801_run2.json new file mode 100644 index 0000000..00e27fd --- /dev/null +++ b/artifacts/hil/seat_frontend_hil_20260801_run2.json @@ -0,0 +1,3124 @@ +{ + "suite": "t2g-seat-frontend-full-hil", + "started_at": "2026-08-01T14:47:53.934816Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801144753", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "THERM-H-1", + "group": "thermal", + "utterance": "副驾座椅加热开到1档", + "started_at": "2026-08-01T14:47:53.934859Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801144753-988889", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 03 00 10 27 00", + "timestamp": 26109.485787 + } + }, + "cushion_tilt": { + "position_pct": 33, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 3262, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 03 00 BE 0C 00", + "timestamp": 26109.511466 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 03 00 00 00 00", + "timestamp": 26109.537484 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 03 00 00 00 00", + "timestamp": 26109.564307 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "11 00 00 00 00 00 00 00", + "timestamp": 26109.571052 + } + }, + "heating": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "11 00 00 00 00 00 00 00", + "timestamp": 26109.571052 + } + }, + "captured_at": "2026-08-01T14:47:54.749907Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:47:54.824802Z", + "duration_ms": 890 + }, + { + "id": "THERM-H-2", + "group": "thermal", + "utterance": "副驾座椅加热开到2档", + "started_at": "2026-08-01T14:47:54.824891Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801144754-33c056", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 33, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 3262, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 03 00 BE 0C 00", + "timestamp": 26110.355515 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 03 00 00 00 00", + "timestamp": 26110.382347 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 03 00 00 00 00", + "timestamp": 26110.408024 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 03 00 10 27 00", + "timestamp": 26110.434084 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "19 00 00 00 00 00 00 00", + "timestamp": 26110.441959 + } + }, + "heating": { + "state": "on", + "level": 2, + "feedback_value": 3, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "19 00 00 00 00 00 00 00", + "timestamp": 26110.441959 + } + }, + "captured_at": "2026-08-01T14:47:55.620824Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:47:55.695170Z", + "duration_ms": 870 + }, + { + "id": "THERM-H-3", + "group": "thermal", + "utterance": "副驾座椅加热开到3档", + "started_at": "2026-08-01T14:47:55.695219Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801144755-ae87a8", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 03 00 00 00 00", + "timestamp": 26111.259381 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 03 00 00 00 00", + "timestamp": 26111.286198 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 03 00 10 27 00", + "timestamp": 26111.311936 + } + }, + "cushion_tilt": { + "position_pct": 33, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 3262, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 03 00 BE 0C 00", + "timestamp": 26111.337967 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "21 00 00 00 00 00 00 00", + "timestamp": 26111.344752 + } + }, + "heating": { + "state": "on", + "level": 3, + "feedback_value": 4, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "21 00 00 00 00 00 00 00", + "timestamp": 26111.344752 + } + }, + "captured_at": "2026-08-01T14:47:56.523671Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:47:56.613352Z", + "duration_ms": 918 + }, + { + "id": "THERM-H-OFF", + "group": "thermal", + "utterance": "关闭副驾座椅加热", + "started_at": "2026-08-01T14:47:56.613439Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801144756-eecfde", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 03 00 00 00 00", + "timestamp": 26112.104499 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 03 00 00 00 00", + "timestamp": 26112.13051 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 03 00 10 27 00", + "timestamp": 26112.156092 + } + }, + "cushion_tilt": { + "position_pct": 33, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 3262, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 03 00 BE 0C 00", + "timestamp": 26112.181763 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26112.189636 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26112.189636 + } + }, + "captured_at": "2026-08-01T14:47:57.368443Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:47:57.450915Z", + "duration_ms": 837 + }, + { + "id": "THERM-V-1", + "group": "thermal", + "utterance": "副驾座椅通风开到1档", + "started_at": "2026-08-01T14:47:57.450971Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801144757-7e47fa", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 03 00 00 00 00", + "timestamp": 26112.965674 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 03 00 00 00 00", + "timestamp": 26112.992452 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 03 00 10 27 00", + "timestamp": 26113.018037 + } + }, + "cushion_tilt": { + "position_pct": 33, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 3262, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 03 00 BE 0C 00", + "timestamp": 26113.044065 + } + } + }, + "ventilation": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0A 00 00 00 00 00 00 00", + "timestamp": 26113.05083 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0A 00 00 00 00 00 00 00", + "timestamp": 26113.05083 + } + }, + "captured_at": "2026-08-01T14:47:58.229707Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:47:58.316936Z", + "duration_ms": 866 + }, + { + "id": "THERM-V-2", + "group": "thermal", + "utterance": "副驾座椅通风开到2档", + "started_at": "2026-08-01T14:47:58.316996Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801144758-f760ab", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 03 00 00 00 00", + "timestamp": 26113.844422 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 03 00 10 27 00", + "timestamp": 26113.870033 + } + }, + "cushion_tilt": { + "position_pct": 33, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 3262, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 03 00 BE 0C 00", + "timestamp": 26113.895676 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 03 00 00 00 00", + "timestamp": 26113.92246 + } + } + }, + "ventilation": { + "state": "on", + "level": 2, + "feedback_value": 3, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0B 00 00 00 00 00 00 00", + "timestamp": 26113.929523 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0B 00 00 00 00 00 00 00", + "timestamp": 26113.929523 + } + }, + "captured_at": "2026-08-01T14:47:59.108221Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:47:59.185254Z", + "duration_ms": 868 + }, + { + "id": "THERM-V-3", + "group": "thermal", + "utterance": "副驾座椅通风开到3档", + "started_at": "2026-08-01T14:47:59.185309Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801144759-72c9f8", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 03 00 00 00 00", + "timestamp": 26114.721784 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 03 00 10 27 00", + "timestamp": 26114.747721 + } + }, + "cushion_tilt": { + "position_pct": 33, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 3262, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 03 00 BE 0C 00", + "timestamp": 26114.774501 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 03 00 00 00 00", + "timestamp": 26114.800136 + } + } + }, + "ventilation": { + "state": "on", + "level": 3, + "feedback_value": 4, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0C 00 00 00 00 00 00 00", + "timestamp": 26114.806853 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0C 00 00 00 00 00 00 00", + "timestamp": 26114.806853 + } + }, + "captured_at": "2026-08-01T14:47:59.985653Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:48:00.059998Z", + "duration_ms": 875 + }, + { + "id": "THERM-V-OFF", + "group": "thermal", + "utterance": "关闭副驾座椅通风", + "started_at": "2026-08-01T14:48:00.060097Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801144800-78c161", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 03 00 00 00 00", + "timestamp": 26115.566389 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 03 00 10 27 00", + "timestamp": 26115.592042 + } + }, + "cushion_tilt": { + "position_pct": 33, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 3262, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 03 00 BE 0C 00", + "timestamp": 26115.61763 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 03 00 00 00 00", + "timestamp": 26115.643641 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26115.650392 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26115.650392 + } + }, + "captured_at": "2026-08-01T14:48:00.829027Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:48:00.907732Z", + "duration_ms": 848 + }, + { + "id": "MOTION-M0-25", + "group": "motion", + "utterance": "把副驾座椅水平位置调到25%", + "started_at": "2026-08-01T14:48:00.907808Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801144800-dcbba9", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 25, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 2505, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 02 00 C9 09 00", + "timestamp": 26129.168333 + } + }, + "cushion_tilt": { + "position_pct": 33, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 3262, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 01 00 BE 0C 00", + "timestamp": 26129.194219 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 01 00 00 00 00", + "timestamp": 26129.22013 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 01 00 00 00 00", + "timestamp": 26129.246414 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26129.255429 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26129.255429 + } + }, + "captured_at": "2026-08-01T14:48:14.433982Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:48:14.519285Z", + "duration_ms": 13611 + }, + { + "id": "MOTION-M0-75", + "group": "motion", + "utterance": "把副驾座椅水平位置调到75%", + "started_at": "2026-08-01T14:48:14.519361Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801144814-f53e4f", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 03 00 00 00 00", + "timestamp": 26137.808075 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 03 00 00 00 00", + "timestamp": 26137.834319 + } + }, + "longitudinal": { + "position_pct": 75, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 7515, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 04 00 5B 1D 00", + "timestamp": 26137.860226 + } + }, + "cushion_tilt": { + "position_pct": 33, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 3262, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 03 00 BE 0C 00", + "timestamp": 26137.886198 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26137.895214 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26137.895214 + } + }, + "captured_at": "2026-08-01T14:48:23.073478Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:48:23.148880Z", + "duration_ms": 8630 + }, + { + "id": "MOTION-M0-HOME", + "group": "motion", + "utterance": "把副驾座椅水平位置归零", + "started_at": "2026-08-01T14:48:23.148938Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801144823-ceed48", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 05 00 00 00 00", + "timestamp": 26152.661095 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 06 00 00 00 00", + "timestamp": 26152.686683 + } + }, + "cushion_tilt": { + "position_pct": 33, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 3262, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 05 00 BE 0C 00", + "timestamp": 26152.7133 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 05 00 00 00 00", + "timestamp": 26152.739212 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26152.745961 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26152.745961 + } + }, + "captured_at": "2026-08-01T14:48:37.923828Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:48:37.999330Z", + "duration_ms": 14850 + }, + { + "id": "MOTION-M1-20", + "group": "motion", + "utterance": "把副驾坐盆调到20%", + "status": "safety_blocked", + "started_at": "2026-08-01T14:48:37.999413Z", + "finished_at": "2026-08-01T14:48:37.999416Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "cushion_tilt", + "target_pct": 20, + "minimum_safe_target_pct": 35, + "reason": "M1 near-direction mechanical obstruction: repeated Hall stop at 122/123 with zero pulses and high current; do not drive toward the near endpoint until the mechanism is inspected.", + "evidence": { + "hall_count": 122, + "pulse_count": 0, + "peak_current_delta_raw": 1205, + "stall_threshold_raw": 500 + } + } + }, + { + "id": "MOTION-M1-60", + "group": "motion", + "utterance": "把副驾坐盆调到60%", + "started_at": "2026-08-01T14:48:37.999426Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801144838-bf48e6", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 07 00 00 00 00", + "timestamp": 26155.728861 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 08 00 65 17 00", + "timestamp": 26155.754981 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 07 00 00 00 00", + "timestamp": 26155.78086 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 07 00 00 00 00", + "timestamp": 26155.806675 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26155.815708 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26155.815708 + } + }, + "captured_at": "2026-08-01T14:48:40.993469Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:48:41.076130Z", + "duration_ms": 3077 + }, + { + "id": "MOTION-M2-25", + "group": "motion", + "utterance": "把副驾靠背调到25%", + "started_at": "2026-08-01T14:48:41.076205Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801144841-5ecd0e", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 09 00 00 00 00", + "timestamp": 26163.365098 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 09 00 00 00 00", + "timestamp": 26163.391032 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 09 00 65 17 00", + "timestamp": 26163.416891 + } + }, + "backrest_recline": { + "position_pct": 25, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 2497, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 0A 00 C1 09 00", + "timestamp": 26163.443177 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26163.452244 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26163.452244 + } + }, + "captured_at": "2026-08-01T14:48:48.629917Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:48:48.714157Z", + "duration_ms": 7638 + }, + { + "id": "MOTION-M2-60", + "group": "motion", + "utterance": "把副驾靠背调到60%", + "started_at": "2026-08-01T14:48:48.714243Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801144848-c30cb7", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 6009, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 0C 00 79 17 00", + "timestamp": 26173.582967 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 0B 00 00 00 00", + "timestamp": 26173.609993 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 0B 00 00 00 00", + "timestamp": 26173.637376 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 0B 00 65 17 00", + "timestamp": 26173.663288 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26173.670129 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26173.670129 + } + }, + "captured_at": "2026-08-01T14:48:58.847583Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:48:58.933047Z", + "duration_ms": 10219 + }, + { + "id": "MOTION-M2-HOME", + "group": "motion", + "utterance": "把副驾靠背归零", + "started_at": "2026-08-01T14:48:58.933114Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801144858-3922e7", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 0D 00 65 17 00", + "timestamp": 26193.099722 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 0E 00 00 00 00", + "timestamp": 26193.126386 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 0D 00 00 00 00", + "timestamp": 26193.152327 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 0D 00 00 00 00", + "timestamp": 26193.177827 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26193.184603 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26193.184603 + } + }, + "captured_at": "2026-08-01T14:49:18.361677Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:49:18.449538Z", + "duration_ms": 19516 + }, + { + "id": "MOTION-M3-20", + "group": "motion", + "utterance": "把副驾腿托调到20%", + "started_at": "2026-08-01T14:49:18.449600Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801144918-951f7c", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 20, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 2009, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 10 00 D9 07 00", + "timestamp": 26196.941121 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 0F 00 00 00 00", + "timestamp": 26196.965915 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 0F 00 65 17 00", + "timestamp": 26196.991822 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 0F 00 00 00 00", + "timestamp": 26197.017723 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26197.026776 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26197.026776 + } + }, + "captured_at": "2026-08-01T14:49:22.203767Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:49:22.277844Z", + "duration_ms": 3828 + }, + { + "id": "MOTION-M3-60", + "group": "motion", + "utterance": "把副驾腿托调到60%", + "started_at": "2026-08-01T14:49:22.277908Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801144922-1b57d6", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 11 00 00 00 00", + "timestamp": 26203.64114 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 11 00 65 17 00", + "timestamp": 26203.665936 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 11 00 00 00 00", + "timestamp": 26203.691853 + } + }, + "legrest_height": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5997, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 12 00 6D 17 00", + "timestamp": 26203.717778 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26203.726853 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26203.726853 + } + }, + "captured_at": "2026-08-01T14:49:28.903539Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:49:28.974791Z", + "duration_ms": 6697 + }, + { + "id": "MOTION-M3-HOME", + "group": "motion", + "utterance": "把副驾腿托归零", + "started_at": "2026-08-01T14:49:28.974852Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801144928-eb6dd3", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 14 00 00 00 00", + "timestamp": 26214.161987 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 13 00 00 00 00", + "timestamp": 26214.188619 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 13 00 65 17 00", + "timestamp": 26214.214158 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 13 00 00 00 00", + "timestamp": 26214.240817 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26214.246755 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26214.246755 + } + }, + "captured_at": "2026-08-01T14:49:39.423263Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:49:39.500644Z", + "duration_ms": 10526 + }, + { + "id": "MOTION-ALL-ZERO", + "group": "motion", + "utterance": "把副驾水平、坐盆、靠背、腿托四轴归零", + "status": "safety_blocked", + "started_at": "2026-08-01T14:49:39.500708Z", + "finished_at": "2026-08-01T14:49:39.500710Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "cushion_tilt", + "target_pct": 0, + "minimum_safe_target_pct": 35, + "reason": "M1 near-direction mechanical obstruction: repeated Hall stop at 122/123 with zero pulses and high current; do not drive toward the near endpoint until the mechanism is inspected.", + "evidence": { + "hall_count": 122, + "pulse_count": 0, + "peak_current_delta_raw": 1205, + "stall_threshold_raw": 500 + } + } + }, + { + "id": "COMBINED-ALL", + "group": "combined", + "utterance": "打开副驾加热1档、打开通风1档,座椅水平到30%,坐盆到40%,靠背到37%,腿托到42%", + "started_at": "2026-08-01T14:49:39.500720Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801144939-36cbec", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 37, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 3708, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 18 00 7C 0E 00", + "timestamp": 26247.946715 + } + }, + "legrest_height": { + "position_pct": 42, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 4204, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 19 00 6C 10 00", + "timestamp": 26247.972824 + } + }, + "longitudinal": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 3026, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 16 00 D2 0B 00", + "timestamp": 26247.998934 + } + }, + "cushion_tilt": { + "position_pct": 40, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 4011, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 17 00 AB 0F 00", + "timestamp": 26248.025073 + } + } + }, + "ventilation": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "12 00 00 00 00 00 00 00", + "timestamp": 26248.031936 + } + }, + "heating": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "12 00 00 00 00 00 00 00", + "timestamp": 26248.031936 + } + }, + "captured_at": "2026-08-01T14:50:13.207616Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:50:13.288554Z", + "duration_ms": 33788 + }, + { + "id": "COMBINED-OFF", + "group": "combined", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T14:50:13.288653Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801145013-7339f7", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 40, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 4011, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 17 00 AB 0F 00", + "timestamp": 26248.798682 + } + }, + "backrest_recline": { + "position_pct": 37, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 3708, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 18 00 7C 0E 00", + "timestamp": 26248.824729 + } + }, + "legrest_height": { + "position_pct": 42, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 4204, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 19 00 6C 10 00", + "timestamp": 26248.851193 + } + }, + "longitudinal": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 3026, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 16 00 D2 0B 00", + "timestamp": 26248.877212 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26248.886329 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26248.886329 + } + }, + "captured_at": "2026-08-01T14:50:14.062054Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:50:14.142370Z", + "duration_ms": 854 + }, + { + "id": "MODE-EASY-ENTRY", + "group": "mode", + "utterance": "副驾执行轻松进出模式", + "status": "safety_blocked", + "started_at": "2026-08-01T14:50:14.142478Z", + "finished_at": "2026-08-01T14:50:14.142483Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "cushion_tilt", + "target_pct": 0, + "minimum_safe_target_pct": 35, + "reason": "M1 near-direction mechanical obstruction: repeated Hall stop at 122/123 with zero pulses and high current; do not drive toward the near endpoint until the mechanism is inspected.", + "evidence": { + "hall_count": 122, + "pulse_count": 0, + "peak_current_delta_raw": 1205, + "stall_threshold_raw": 500 + } + } + }, + { + "id": "MODE-OFFICE", + "group": "mode", + "utterance": "副驾执行办公模式", + "status": "safety_blocked", + "started_at": "2026-08-01T14:50:14.142499Z", + "finished_at": "2026-08-01T14:50:14.142502Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "cushion_tilt", + "target_pct": 22, + "minimum_safe_target_pct": 35, + "reason": "M1 near-direction mechanical obstruction: repeated Hall stop at 122/123 with zero pulses and high current; do not drive toward the near endpoint until the mechanism is inspected.", + "evidence": { + "hall_count": 122, + "pulse_count": 0, + "peak_current_delta_raw": 1205, + "stall_threshold_raw": 500 + } + } + }, + { + "id": "MODE-QUEEN", + "group": "mode", + "utterance": "副驾执行女王副驾行驶模式", + "started_at": "2026-08-01T14:50:14.142517Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801145014-70664a", + "matched_modes": [ + "queen_passenger_driving" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 31, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 3091, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 1E 00 13 0C 00", + "timestamp": 26265.676052 + } + }, + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 7214, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 1B 00 2E 1C 00", + "timestamp": 26265.702155 + } + }, + "cushion_tilt": { + "position_pct": 38, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 3797, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 1C 00 D5 0E 00", + "timestamp": 26265.728141 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4406, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 1D 00 36 11 00", + "timestamp": 26265.75347 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26265.762581 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26265.762581 + } + }, + "captured_at": "2026-08-01T14:50:30.937958Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:50:31.019740Z", + "duration_ms": 16877 + }, + { + "id": "MODE-BABY-NAP", + "group": "mode", + "utterance": "副驾执行宝宝午睡模式", + "status": "safety_blocked", + "started_at": "2026-08-01T14:50:31.019838Z", + "finished_at": "2026-08-01T14:50:31.019840Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "cushion_tilt", + "target_pct": 30, + "minimum_safe_target_pct": 35, + "reason": "M1 near-direction mechanical obstruction: repeated Hall stop at 122/123 with zero pulses and high current; do not drive toward the near endpoint until the mechanism is inspected.", + "evidence": { + "hall_count": 122, + "pulse_count": 0, + "peak_current_delta_raw": 1205, + "stall_threshold_raw": 500 + } + } + }, + { + "id": "MODE-CRUISE-SOFA", + "group": "mode", + "utterance": "副驾执行巡航沙发模式", + "status": "safety_blocked", + "started_at": "2026-08-01T14:50:31.019849Z", + "finished_at": "2026-08-01T14:50:31.019851Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "cushion_tilt", + "target_pct": 30, + "minimum_safe_target_pct": 35, + "reason": "M1 near-direction mechanical obstruction: repeated Hall stop at 122/123 with zero pulses and high current; do not drive toward the near endpoint until the mechanism is inspected.", + "evidence": { + "hall_count": 122, + "pulse_count": 0, + "peak_current_delta_raw": 1205, + "stall_threshold_raw": 500 + } + } + }, + { + "id": "MODE-MEDITATION", + "group": "mode", + "utterance": "副驾执行冥想空间模式", + "started_at": "2026-08-01T14:50:31.019858Z", + "status": "failed", + "errors": [ + "T2G motor 0 STALL: task_state=7, Hall=360->403" + ], + "http_status": 201, + "request_id": "req-20260801145031-38266e", + "failure_telemetry": { + "motor_selector": 0, + "motion_axis": "longitudinal", + "task_state": 7, + "motor_result": 5, + "motor_result_name": "STALL", + "position_valid": true, + "hall_before": 360, + "hall_after": 403, + "hall_delta": 43, + "endpoint_recovery_max_near_hall": 72, + "command_frame": { + "frame_id": "0x300", + "payload_size": 8, + "data_hex": "01 10 20 00 10 27 30 75", + "timestamp": null + }, + "ack_frame": { + "frame_id": "0x301", + "payload_size": 8, + "data_hex": "21 00 20 00 01 01 F0 44", + "timestamp": 26266.161915 + }, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 57 48 20 00 8C 1F 00", + "timestamp": 26276.392137 + }, + "diagnostic_before_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "00 00 68 01 F3 01 00 D0", + "timestamp": 26266.159916 + }, + "diagnostic_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "00 14 93 01 F3 01 00 31", + "timestamp": 26276.393289 + }, + "diagnostic_read_error": null, + "current_diagnostic": { + "sample_count": 102, + "valid_sample_count": 102, + "max_current_raw": 786, + "max_current_delta_raw": 786, + "high_current_seen": true, + "low_hall_seen": true, + "stall_overlap_seen": true, + "peak": { + "current_raw": 786, + "current_baseline_raw": 0, + "current_delta_raw": 786, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": true, + "hall_activity_low": true, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "00 0F 12 03 00 00 F4 01", + "timestamp": 26272.600559 + } + }, + "latest": { + "current_raw": 761, + "current_baseline_raw": 4, + "current_delta_raw": 757, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": true, + "hall_activity_low": true, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "00 0F F9 02 04 00 F4 01", + "timestamp": 26276.348574 + } + } + }, + "error_type": "HardwareExecutionError", + "stop_all_attempted": true, + "simulated": false + }, + "finished_at": "2026-08-01T14:50:41.708093Z", + "duration_ms": 10688 + }, + { + "id": "MODE-LEISURE", + "group": "mode", + "utterance": "副驾执行休闲躺椅模式", + "status": "safety_blocked", + "started_at": "2026-08-01T14:50:41.708148Z", + "finished_at": "2026-08-01T14:50:41.708150Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "cushion_tilt", + "target_pct": 30, + "minimum_safe_target_pct": 35, + "reason": "M1 near-direction mechanical obstruction: repeated Hall stop at 122/123 with zero pulses and high current; do not drive toward the near endpoint until the mechanism is inspected.", + "evidence": { + "hall_count": 122, + "pulse_count": 0, + "peak_current_delta_raw": 1205, + "stall_threshold_raw": 500 + } + } + }, + { + "id": "MODE-CALF", + "group": "mode", + "utterance": "副驾执行小腿解压悬浮模式", + "started_at": "2026-08-01T14:50:41.708159Z", + "status": "failed", + "errors": [ + "T2G motor 0 TIMEOUT: task_state=7, Hall=403->403" + ], + "http_status": 201, + "request_id": "req-20260801145041-9ad1e3", + "failure_telemetry": { + "motor_selector": 0, + "motion_axis": "longitudinal", + "task_state": 7, + "motor_result": 6, + "motor_result_name": "TIMEOUT", + "position_valid": true, + "hall_before": 403, + "hall_after": 403, + "hall_delta": 0, + "endpoint_recovery_max_near_hall": 72, + "command_frame": { + "frame_id": "0x300", + "payload_size": 8, + "data_hex": "01 10 23 00 EC 13 30 75", + "timestamp": null + }, + "ack_frame": { + "frame_id": "0x301", + "payload_size": 8, + "data_hex": "21 00 23 00 01 01 F0 44", + "timestamp": 26276.844086 + }, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 67 08 23 00 8C 1F 00", + "timestamp": 26283.391631 + }, + "diagnostic_before_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "00 04 93 01 F3 01 00 70", + "timestamp": 26276.842135 + }, + "diagnostic_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "00 05 93 01 F3 01 00 80", + "timestamp": 26283.392777 + }, + "diagnostic_read_error": null, + "current_diagnostic": { + "sample_count": 65, + "valid_sample_count": 65, + "max_current_raw": 261, + "max_current_delta_raw": 257, + "high_current_seen": false, + "low_hall_seen": true, + "stall_overlap_seen": false, + "peak": { + "current_raw": 261, + "current_baseline_raw": 4, + "current_delta_raw": 257, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": false, + "hall_activity_low": false, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "00 03 05 01 04 00 F4 01", + "timestamp": 26276.878946 + } + }, + "latest": { + "current_raw": 209, + "current_baseline_raw": 4, + "current_delta_raw": 205, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": false, + "hall_activity_low": true, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "00 0B D1 00 04 00 F4 01", + "timestamp": 26283.333981 + } + } + }, + "error_type": "HardwareExecutionError", + "stop_all_attempted": true, + "simulated": false + }, + "finished_at": "2026-08-01T14:50:48.717928Z", + "duration_ms": 7010 + }, + { + "id": "MODE-BEACH", + "group": "mode", + "utterance": "副驾执行电感沙滩椅模式", + "status": "safety_blocked", + "started_at": "2026-08-01T14:50:48.717980Z", + "finished_at": "2026-08-01T14:50:48.717982Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "cushion_tilt", + "target_pct": 0, + "minimum_safe_target_pct": 35, + "reason": "M1 near-direction mechanical obstruction: repeated Hall stop at 122/123 with zero pulses and high current; do not drive toward the near endpoint until the mechanism is inspected.", + "evidence": { + "hall_count": 122, + "pulse_count": 0, + "peak_current_delta_raw": 1205, + "stall_threshold_raw": 500 + } + } + }, + { + "id": "MODE-NAP", + "group": "mode", + "utterance": "副驾执行小憩模式", + "started_at": "2026-08-01T14:50:48.717991Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801145048-75799d", + "matched_modes": [ + "nap" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 29 00 B5 24 00", + "timestamp": 26322.562423 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 26 00 10 27 00", + "timestamp": 26322.588512 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 27 00 10 27 00", + "timestamp": 26322.614652 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 28 00 A7 1F 00", + "timestamp": 26322.640737 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26322.651384 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26322.651384 + } + }, + "captured_at": "2026-08-01T14:51:27.825471Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:51:27.901781Z", + "duration_ms": 39184 + }, + { + "id": "MODE-ZERO-GRAVITY", + "group": "mode", + "utterance": "副驾执行零重力模式", + "started_at": "2026-08-01T14:51:27.901869Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801145127-214380", + "matched_modes": [ + "zero_gravity" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 2E 00 B5 24 00", + "timestamp": 26329.365561 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 2B 00 10 27 00", + "timestamp": 26329.391612 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 2C 00 10 27 00", + "timestamp": 26329.417696 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 2D 00 A7 1F 00", + "timestamp": 26329.442725 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26329.45217 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26329.45217 + } + }, + "captured_at": "2026-08-01T14:51:34.625915Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:51:34.701037Z", + "duration_ms": 6799 + } + ], + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T14:51:34.701100Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801145134-275e25", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 2D 00 A7 1F 00", + "timestamp": 26330.235576 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 2E 00 B5 24 00", + "timestamp": 26330.260914 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 2B 00 10 27 00", + "timestamp": 26330.286997 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 2C 00 10 27 00", + "timestamp": 26330.313124 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26330.323377 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26330.323377 + } + }, + "captured_at": "2026-08-01T14:51:35.497204Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:51:35.579514Z", + "duration_ms": 878 + }, + "finished_at": "2026-08-01T14:51:35.579548Z", + "summary": { + "total": 33, + "passed": 23, + "failed": 2, + "safety_blocked": 8, + "executed": 25, + "final_state_passed": true + } +} \ No newline at end of file diff --git a/artifacts/hil/seat_frontend_hil_20260801_run3_modes.json b/artifacts/hil/seat_frontend_hil_20260801_run3_modes.json new file mode 100644 index 0000000..796c696 --- /dev/null +++ b/artifacts/hil/seat_frontend_hil_20260801_run3_modes.json @@ -0,0 +1,764 @@ +{ + "suite": "t2g-seat-frontend-full-hil", + "started_at": "2026-08-01T14:53:29.226676Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801145329", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "MODE-QUEEN", + "group": "mode", + "utterance": "副驾执行女王副驾行驶模式", + "started_at": "2026-08-01T14:53:29.226724Z", + "status": "failed", + "errors": [ + "T2G motor 0 TIMEOUT: task_state=7, Hall=499->499" + ], + "http_status": 201, + "request_id": "req-20260801145329-c441d5", + "failure_telemetry": { + "motor_selector": 0, + "motion_axis": "longitudinal", + "task_state": 7, + "motor_result": 6, + "motor_result_name": "TIMEOUT", + "position_valid": true, + "hall_before": 499, + "hall_after": 499, + "hall_delta": 0, + "endpoint_recovery_max_near_hall": 72, + "command_frame": { + "frame_id": "0x300", + "payload_size": 8, + "data_hex": "01 10 30 00 20 1C 30 75", + "timestamp": null + }, + "ack_frame": { + "frame_id": "0x301", + "payload_size": 8, + "data_hex": "21 00 30 00 01 01 F0 4B", + "timestamp": 26444.37267 + }, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 67 28 30 00 10 27 00", + "timestamp": 26450.902006 + }, + "diagnostic_before_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "00 00 F3 01 F3 01 00 90", + "timestamp": 26444.360963 + }, + "diagnostic_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "00 05 F3 01 F3 01 00 A0", + "timestamp": 26450.903153 + }, + "diagnostic_read_error": null, + "current_diagnostic": { + "sample_count": 65, + "valid_sample_count": 65, + "max_current_raw": 214, + "max_current_delta_raw": 213, + "high_current_seen": false, + "low_hall_seen": true, + "stall_overlap_seen": false, + "peak": { + "current_raw": 214, + "current_baseline_raw": 1, + "current_delta_raw": 213, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": false, + "hall_activity_low": true, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "00 0B D6 00 01 00 F4 01", + "timestamp": 26449.53215 + } + }, + "latest": { + "current_raw": 212, + "current_baseline_raw": 1, + "current_delta_raw": 211, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": false, + "hall_activity_low": true, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "00 0B D4 00 01 00 F4 01", + "timestamp": 26450.886864 + } + } + }, + "error_type": "HardwareExecutionError", + "stop_all_attempted": true, + "simulated": false + }, + "finished_at": "2026-08-01T14:53:36.269029Z", + "duration_ms": 7042 + }, + { + "id": "MODE-BABY-NAP", + "group": "mode", + "utterance": "副驾执行宝宝午睡模式", + "status": "safety_blocked", + "started_at": "2026-08-01T14:53:36.269096Z", + "finished_at": "2026-08-01T14:53:36.269098Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "cushion_tilt", + "target_pct": 30, + "minimum_safe_target_pct": 35, + "reason": "M1 near-direction mechanical obstruction: repeated Hall stop at 122/123 with zero pulses and high current; do not drive toward the near endpoint until the mechanism is inspected.", + "evidence": { + "hall_count": 122, + "pulse_count": 0, + "peak_current_delta_raw": 1205, + "stall_threshold_raw": 500 + } + } + }, + { + "id": "MODE-CRUISE-SOFA", + "group": "mode", + "utterance": "副驾执行巡航沙发模式", + "status": "safety_blocked", + "started_at": "2026-08-01T14:53:36.269107Z", + "finished_at": "2026-08-01T14:53:36.269108Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "cushion_tilt", + "target_pct": 30, + "minimum_safe_target_pct": 35, + "reason": "M1 near-direction mechanical obstruction: repeated Hall stop at 122/123 with zero pulses and high current; do not drive toward the near endpoint until the mechanism is inspected.", + "evidence": { + "hall_count": 122, + "pulse_count": 0, + "peak_current_delta_raw": 1205, + "stall_threshold_raw": 500 + } + } + }, + { + "id": "MODE-MEDITATION", + "group": "mode", + "utterance": "副驾执行冥想空间模式", + "started_at": "2026-08-01T14:53:36.269121Z", + "status": "failed", + "errors": [ + "T2G motor 1 STALL: task_state=7, Hall=374->374" + ], + "http_status": 201, + "request_id": "req-20260801145336-cea6e3", + "failure_telemetry": { + "motor_selector": 1, + "motion_axis": "cushion_tilt", + "task_state": 7, + "motor_result": 5, + "motor_result_name": "STALL", + "position_valid": true, + "hall_before": 374, + "hall_after": 374, + "hall_delta": 0, + "endpoint_recovery_max_near_hall": 56, + "command_frame": { + "frame_id": "0x300", + "payload_size": 8, + "data_hex": "01 11 34 00 30 11 30 75", + "timestamp": null + }, + "ack_frame": { + "frame_id": "0x301", + "payload_size": 8, + "data_hex": "21 00 34 00 01 02 F0 49", + "timestamp": 26453.41257 + }, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 57 68 34 00 10 27 00", + "timestamp": 26462.801669 + }, + "diagnostic_before_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "01 00 76 01 76 01 00 B0", + "timestamp": 26451.441787 + }, + "diagnostic_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "01 14 76 01 76 01 00 C1", + "timestamp": 26462.802815 + }, + "diagnostic_read_error": null, + "current_diagnostic": { + "sample_count": 113, + "valid_sample_count": 113, + "max_current_raw": 1353, + "max_current_delta_raw": 1351, + "high_current_seen": true, + "low_hall_seen": true, + "stall_overlap_seen": true, + "peak": { + "current_raw": 1353, + "current_baseline_raw": 2, + "current_delta_raw": 1351, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": true, + "hall_activity_low": false, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "01 07 49 05 02 00 F4 01", + "timestamp": 26461.7585 + } + }, + "latest": { + "current_raw": 1199, + "current_baseline_raw": 2, + "current_delta_raw": 1197, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": true, + "hall_activity_low": true, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "01 0F AF 04 02 00 F4 01", + "timestamp": 26462.798972 + } + } + }, + "error_type": "HardwareExecutionError", + "stop_all_attempted": true, + "simulated": false + }, + "finished_at": "2026-08-01T14:53:48.119388Z", + "duration_ms": 11850 + }, + { + "id": "MODE-LEISURE", + "group": "mode", + "utterance": "副驾执行休闲躺椅模式", + "status": "safety_blocked", + "started_at": "2026-08-01T14:53:48.119450Z", + "finished_at": "2026-08-01T14:53:48.119452Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "cushion_tilt", + "target_pct": 30, + "minimum_safe_target_pct": 35, + "reason": "M1 near-direction mechanical obstruction: repeated Hall stop at 122/123 with zero pulses and high current; do not drive toward the near endpoint until the mechanism is inspected.", + "evidence": { + "hall_count": 122, + "pulse_count": 0, + "peak_current_delta_raw": 1205, + "stall_threshold_raw": 500 + } + } + }, + { + "id": "MODE-CALF", + "group": "mode", + "utterance": "副驾执行小腿解压悬浮模式", + "started_at": "2026-08-01T14:53:48.119461Z", + "status": "failed", + "errors": [ + "T2G motor 0 TIMEOUT: task_state=7, Hall=499->499" + ], + "http_status": 201, + "request_id": "req-20260801145348-bae676", + "failure_telemetry": { + "motor_selector": 0, + "motion_axis": "longitudinal", + "task_state": 7, + "motor_result": 6, + "motor_result_name": "TIMEOUT", + "position_valid": true, + "hall_before": 499, + "hall_after": 499, + "hall_delta": 0, + "endpoint_recovery_max_near_hall": 72, + "command_frame": { + "frame_id": "0x300", + "payload_size": 8, + "data_hex": "01 10 37 00 EC 13 30 75", + "timestamp": null + }, + "ack_frame": { + "frame_id": "0x301", + "payload_size": 8, + "data_hex": "21 00 37 00 01 01 F0 41", + "timestamp": 26463.239675 + }, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 67 28 37 00 10 27 00", + "timestamp": 26469.752618 + }, + "diagnostic_before_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "00 00 F3 01 F3 01 00 10", + "timestamp": 26463.237716 + }, + "diagnostic_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "00 05 F3 01 F3 01 00 20", + "timestamp": 26469.754985 + }, + "diagnostic_read_error": null, + "current_diagnostic": { + "sample_count": 65, + "valid_sample_count": 65, + "max_current_raw": 253, + "max_current_delta_raw": 250, + "high_current_seen": false, + "low_hall_seen": true, + "stall_overlap_seen": false, + "peak": { + "current_raw": 253, + "current_baseline_raw": 3, + "current_delta_raw": 250, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": false, + "hall_activity_low": false, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "00 03 FD 00 03 00 F4 01", + "timestamp": 26463.272395 + } + }, + "latest": { + "current_raw": 207, + "current_baseline_raw": 3, + "current_delta_raw": 204, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": false, + "hall_activity_low": true, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "00 0B CF 00 03 00 F4 01", + "timestamp": 26469.728393 + } + } + }, + "error_type": "HardwareExecutionError", + "stop_all_attempted": true, + "simulated": false + }, + "finished_at": "2026-08-01T14:53:55.135955Z", + "duration_ms": 7017 + }, + { + "id": "MODE-BEACH", + "group": "mode", + "utterance": "副驾执行电感沙滩椅模式", + "status": "safety_blocked", + "started_at": "2026-08-01T14:53:55.136004Z", + "finished_at": "2026-08-01T14:53:55.136006Z", + "duration_ms": 0, + "errors": [], + "safety_block": { + "axis": "cushion_tilt", + "target_pct": 0, + "minimum_safe_target_pct": 35, + "reason": "M1 near-direction mechanical obstruction: repeated Hall stop at 122/123 with zero pulses and high current; do not drive toward the near endpoint until the mechanism is inspected.", + "evidence": { + "hall_count": 122, + "pulse_count": 0, + "peak_current_delta_raw": 1205, + "stall_threshold_raw": 500 + } + } + }, + { + "id": "MODE-NAP", + "group": "mode", + "utterance": "副驾执行小憩模式", + "started_at": "2026-08-01T14:53:55.136014Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801145355-391520", + "matched_modes": [ + "nap" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 3A 00 10 27 00", + "timestamp": 26476.732654 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 3B 00 10 27 00", + "timestamp": 26476.759174 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 3C 00 A7 1F 00", + "timestamp": 26476.785245 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 3D 00 B5 24 00", + "timestamp": 26476.810211 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26476.820464 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26476.820464 + } + }, + "captured_at": "2026-08-01T14:54:01.990826Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:54:02.155719Z", + "duration_ms": 7020 + }, + { + "id": "MODE-ZERO-GRAVITY", + "group": "mode", + "utterance": "副驾执行零重力模式", + "started_at": "2026-08-01T14:54:02.155796Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801145402-f6ff8b", + "matched_modes": [ + "zero_gravity" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 3F 00 10 27 00", + "timestamp": 26483.63127 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 40 00 10 27 00", + "timestamp": 26483.657826 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 41 00 A7 1F 00", + "timestamp": 26483.682735 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 42 00 B5 24 00", + "timestamp": 26483.708846 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26483.717983 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26483.717983 + } + }, + "captured_at": "2026-08-01T14:54:08.888287Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:54:08.963843Z", + "duration_ms": 6808 + } + ], + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T14:54:08.963900Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801145408-c833b5", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 42 00 B5 24 00", + "timestamp": 26484.485071 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 3F 00 10 27 00", + "timestamp": 26484.511148 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 40 00 10 27 00", + "timestamp": 26484.537248 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 41 00 A7 1F 00", + "timestamp": 26484.562609 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26484.572862 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26484.572862 + } + }, + "captured_at": "2026-08-01T14:54:09.742991Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:54:09.821001Z", + "duration_ms": 857 + }, + "finished_at": "2026-08-01T14:54:09.821038Z", + "summary": { + "total": 9, + "passed": 2, + "failed": 3, + "safety_blocked": 4, + "executed": 5, + "final_state_passed": true + } +} \ No newline at end of file diff --git a/artifacts/hil/seat_frontend_hil_20260801_run4_m0_home.json b/artifacts/hil/seat_frontend_hil_20260801_run4_m0_home.json new file mode 100644 index 0000000..5606bab --- /dev/null +++ b/artifacts/hil/seat_frontend_hil_20260801_run4_m0_home.json @@ -0,0 +1,240 @@ +{ + "suite": "t2g-seat-frontend-full-hil", + "started_at": "2026-08-01T14:55:16.839705Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801145516", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "MOTION-M0-HOME", + "group": "motion", + "utterance": "把副驾座椅水平位置归零", + "started_at": "2026-08-01T14:55:16.839746Z", + "status": "failed", + "errors": [ + "T2G motor 0 CALIBRATION_FAILED: task_state=7, Hall=499->499" + ], + "http_status": 201, + "request_id": "req-20260801145516-496358", + "failure_telemetry": { + "motor_selector": 0, + "motion_axis": "longitudinal", + "task_state": 7, + "motor_result": 11, + "motor_result_name": "CALIBRATION_FAILED", + "position_valid": false, + "hall_before": 499, + "hall_after": 499, + "hall_delta": 0, + "endpoint_recovery_max_near_hall": 72, + "command_frame": { + "frame_id": "0x300", + "payload_size": 8, + "data_hex": "0B 10 44 00 52 4B 78 00", + "timestamp": null + }, + "ack_frame": { + "frame_id": "0x301", + "payload_size": 8, + "data_hex": "51 00 44 00 0B 41 F0 4F", + "timestamp": 26552.027376 + }, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 B7 00 44 00 FF FF 00", + "timestamp": 26555.266451 + }, + "diagnostic_before_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "00 00 F3 01 F3 01 00 C0", + "timestamp": 26552.016761 + }, + "diagnostic_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "00 88 F3 01 F3 01 00 00", + "timestamp": 26555.267587 + }, + "diagnostic_read_error": null, + "current_diagnostic": { + "sample_count": 36, + "valid_sample_count": 36, + "max_current_raw": 223, + "max_current_delta_raw": 220, + "high_current_seen": false, + "low_hall_seen": true, + "stall_overlap_seen": false, + "peak": { + "current_raw": 223, + "current_baseline_raw": 3, + "current_delta_raw": 220, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": false, + "hall_activity_low": false, + "current_calibrating": true, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "00 13 DF 00 03 00 F4 01", + "timestamp": 26552.116307 + } + }, + "latest": { + "current_raw": 10, + "current_baseline_raw": 23, + "current_delta_raw": 0, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": false, + "hall_activity_low": true, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "00 0B 0A 00 17 00 F4 01", + "timestamp": 26555.246382 + } + } + }, + "error_type": "HardwareExecutionError", + "stop_all_attempted": true, + "simulated": false + }, + "finished_at": "2026-08-01T14:55:20.627987Z", + "duration_ms": 3788 + } + ], + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T14:55:20.628029Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801145520-65fe81", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 08 45 00 A7 1F 00", + "timestamp": 26556.1968 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 08 45 00 B5 24 00", + "timestamp": 26556.222629 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 00 45 00 FF FF 00", + "timestamp": 26556.248442 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 45 00 10 27 00", + "timestamp": 26556.274646 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26556.283681 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 26556.283681 + } + }, + "captured_at": "2026-08-01T14:55:21.452124Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T14:55:21.531805Z", + "duration_ms": 904 + }, + "finished_at": "2026-08-01T14:55:21.531835Z", + "summary": { + "total": 1, + "passed": 0, + "failed": 1, + "safety_blocked": 0, + "executed": 1, + "final_state_passed": true + } +} \ No newline at end of file diff --git a/artifacts/hil/seat_frontend_hil_20260801_run5_m0_home_rev5.json b/artifacts/hil/seat_frontend_hil_20260801_run5_m0_home_rev5.json new file mode 100644 index 0000000..1671baf --- /dev/null +++ b/artifacts/hil/seat_frontend_hil_20260801_run5_m0_home_rev5.json @@ -0,0 +1,62 @@ +{ + "suite": "t2g-seat-frontend-full-hil", + "started_at": "2026-08-01T15:32:33.035150Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801153233", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "MOTION-M0-HOME", + "group": "motion", + "utterance": "把副驾座椅水平位置归零", + "started_at": "2026-08-01T15:32:33.035187Z", + "status": "failed", + "errors": [ + "ZCAN_SetValue(canfd_abit_baud_rate) failed" + ], + "http_status": 201, + "request_id": "req-20260801153233-4d8760", + "failure_telemetry": { + "error_type": "CanGatewayError", + "stop_all_attempted": false, + "simulated": false + }, + "finished_at": "2026-08-01T15:32:33.233128Z", + "duration_ms": 198 + } + ], + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T15:32:33.233166Z", + "status": "failed", + "errors": [ + "ZCAN_SetValue(canfd_abit_baud_rate) failed" + ], + "http_status": 201, + "request_id": "req-20260801153233-dc02d8", + "failure_telemetry": { + "error_type": "CanGatewayError", + "stop_all_attempted": false, + "simulated": false + }, + "finished_at": "2026-08-01T15:32:33.390312Z", + "duration_ms": 157 + }, + "finished_at": "2026-08-01T15:32:33.390330Z", + "summary": { + "total": 1, + "passed": 0, + "failed": 1, + "safety_blocked": 0, + "executed": 1, + "final_state_passed": false + } +} \ No newline at end of file diff --git a/artifacts/hil/seat_frontend_hil_20260801_run6_m0_home_rev5.json b/artifacts/hil/seat_frontend_hil_20260801_run6_m0_home_rev5.json new file mode 100644 index 0000000..c231624 --- /dev/null +++ b/artifacts/hil/seat_frontend_hil_20260801_run6_m0_home_rev5.json @@ -0,0 +1,240 @@ +{ + "suite": "t2g-seat-frontend-full-hil", + "started_at": "2026-08-01T15:38:36.967401Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801153836", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "MOTION-M0-HOME", + "group": "motion", + "utterance": "把副驾座椅水平位置归零", + "started_at": "2026-08-01T15:38:36.967442Z", + "status": "failed", + "errors": [ + "T2G motor 0 CALIBRATION_FAILED: task_state=7, Hall=499->499" + ], + "http_status": 201, + "request_id": "req-20260801153836-3cd030", + "failure_telemetry": { + "motor_selector": 0, + "motion_axis": "longitudinal", + "task_state": 7, + "motor_result": 11, + "motor_result_name": "CALIBRATION_FAILED", + "position_valid": false, + "hall_before": 499, + "hall_after": 499, + "hall_delta": 0, + "endpoint_recovery_max_near_hall": 72, + "command_frame": { + "frame_id": "0x300", + "payload_size": 8, + "data_hex": "0B 10 02 00 52 4B 78 00", + "timestamp": null + }, + "ack_frame": { + "frame_id": "0x301", + "payload_size": 8, + "data_hex": "51 00 02 00 0B 41 E0 55", + "timestamp": 29165.165292 + }, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 B7 00 02 00 FF FF 00", + "timestamp": 29168.401573 + }, + "diagnostic_before_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "00 00 F3 01 F3 01 00 20", + "timestamp": 29165.154003 + }, + "diagnostic_frame": { + "frame_id": "0x303", + "payload_size": 8, + "data_hex": "00 88 F3 01 F3 01 00 60", + "timestamp": 29168.402701 + }, + "diagnostic_read_error": null, + "current_diagnostic": { + "sample_count": 36, + "valid_sample_count": 36, + "max_current_raw": 238, + "max_current_delta_raw": 233, + "high_current_seen": false, + "low_hall_seen": true, + "stall_overlap_seen": false, + "peak": { + "current_raw": 236, + "current_baseline_raw": 3, + "current_delta_raw": 233, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": false, + "hall_activity_low": false, + "current_calibrating": true, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "00 13 EC 00 03 00 F4 01", + "timestamp": 29165.251397 + } + }, + "latest": { + "current_raw": 12, + "current_baseline_raw": 36, + "current_delta_raw": 0, + "stall_current_delta_threshold_raw": 500, + "current_sample_valid": true, + "current_baseline_valid": true, + "high_current": false, + "hall_activity_low": true, + "current_calibrating": false, + "frame": { + "frame_id": "0x304", + "payload_size": 8, + "data_hex": "00 0B 0C 00 24 00 F4 01", + "timestamp": 29168.379476 + } + } + }, + "error_type": "HardwareExecutionError", + "stop_all_attempted": true, + "simulated": false + }, + "finished_at": "2026-08-01T15:38:53.697878Z", + "duration_ms": 16730 + } + ], + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T15:38:53.697934Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801153853-1d639f", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 03 00 10 27 00", + "timestamp": 29169.295418 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 08 03 00 A7 1F 00", + "timestamp": 29169.322276 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 08 03 00 B5 24 00", + "timestamp": 29169.347323 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 00 03 00 FF FF 00", + "timestamp": 29169.374233 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 29169.380975 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 29169.380975 + } + }, + "captured_at": "2026-08-01T15:38:54.491848Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T15:38:54.576238Z", + "duration_ms": 878 + }, + "finished_at": "2026-08-01T15:38:54.576286Z", + "summary": { + "total": 1, + "passed": 0, + "failed": 1, + "safety_blocked": 0, + "executed": 1, + "final_state_passed": true + } +} \ No newline at end of file diff --git a/artifacts/hil/seat_frontend_hil_20260801_run7_rev6_flash_thermal_off.json b/artifacts/hil/seat_frontend_hil_20260801_run7_rev6_flash_thermal_off.json new file mode 100644 index 0000000..b462cfa --- /dev/null +++ b/artifacts/hil/seat_frontend_hil_20260801_run7_rev6_flash_thermal_off.json @@ -0,0 +1,363 @@ +{ + "suite": "t2g-seat-frontend-full-hil", + "started_at": "2026-08-01T15:43:36.160681Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801154336", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "THERM-H-OFF", + "group": "thermal", + "utterance": "关闭副驾座椅加热", + "started_at": "2026-08-01T15:43:36.160725Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801154336-0eefe8", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 00 08 00 00 A7 1F 00", + "timestamp": 29463.233038 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 00 08 00 00 B5 24 00", + "timestamp": 29463.259912 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 00 00 00 00 FF FF 00", + "timestamp": 29463.284973 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 00 28 00 00 10 27 00", + "timestamp": 29463.311881 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 29463.319822 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 29463.319822 + } + }, + "captured_at": "2026-08-01T15:43:48.424601Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T15:43:48.512170Z", + "duration_ms": 12351 + }, + { + "id": "THERM-V-OFF", + "group": "thermal", + "utterance": "关闭副驾座椅通风", + "started_at": "2026-08-01T15:43:48.512241Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801154348-d8018c", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 00 08 00 00 A7 1F 00", + "timestamp": 29464.079538 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 00 08 00 00 B5 24 00", + "timestamp": 29464.105253 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 00 00 00 00 FF FF 00", + "timestamp": 29464.131102 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 00 28 00 00 10 27 00", + "timestamp": 29464.157968 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 29464.165819 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 29464.165819 + } + }, + "captured_at": "2026-08-01T15:43:49.270734Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T15:43:49.336080Z", + "duration_ms": 824 + } + ], + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T15:43:49.336131Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801154349-f42e7f", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 00 28 00 00 10 27 00", + "timestamp": 29464.904964 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 00 08 00 00 A7 1F 00", + "timestamp": 29464.931901 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 00 08 00 00 B5 24 00", + "timestamp": 29464.95768 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": false, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 0, + "value_x100": 65535, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 00 00 00 00 FF FF 00", + "timestamp": 29464.98386 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 29464.990659 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 29464.990659 + } + }, + "captured_at": "2026-08-01T15:43:50.095435Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T15:43:50.176751Z", + "duration_ms": 841 + }, + "finished_at": "2026-08-01T15:43:50.176781Z", + "summary": { + "total": 2, + "passed": 2, + "failed": 0, + "safety_blocked": 0, + "executed": 2, + "final_state_passed": true + } +} \ No newline at end of file diff --git a/artifacts/hil/seat_frontend_hil_20260802_all_modes_after_timeout_fix.json b/artifacts/hil/seat_frontend_hil_20260802_all_modes_after_timeout_fix.json new file mode 100644 index 0000000..48c3fd8 --- /dev/null +++ b/artifacts/hil/seat_frontend_hil_20260802_all_modes_after_timeout_fix.json @@ -0,0 +1,1402 @@ +{ + "suite": "t2g-seat-frontend-full-hil", + "started_at": "2026-08-01T17:34:24.688076Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801173424", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "MODE-EASY-ENTRY", + "group": "mode", + "utterance": "副驾执行轻松进出模式", + "started_at": "2026-08-01T17:34:24.688111Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801173424-29d516", + "matched_modes": [ + "easy_entry_exit" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 37 01 00 00 00", + "timestamp": 36132.806804 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 38 01 00 00 00", + "timestamp": 36132.832713 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 35 01 10 27 00", + "timestamp": 36132.858315 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 36 01 00 00 00", + "timestamp": 36132.884898 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36132.890537 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36132.890537 + } + }, + "captured_at": "2026-08-01T17:34:57.861807Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:34:57.947099Z", + "duration_ms": 33259 + }, + { + "id": "MODE-OFFICE", + "group": "mode", + "utterance": "副驾执行办公模式", + "started_at": "2026-08-01T17:34:57.947281Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801173457-b91d14", + "matched_modes": [ + "office" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 21, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 2102, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 3D 01 36 08 00", + "timestamp": 36155.402606 + } + }, + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 7194, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 3A 01 1A 1C 00", + "timestamp": 36155.429035 + } + }, + "cushion_tilt": { + "position_pct": 22, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2193, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 3B 01 91 08 00", + "timestamp": 36155.455092 + } + }, + "backrest_recline": { + "position_pct": 22, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 2214, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 3C 01 A6 08 00", + "timestamp": 36155.481164 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36155.490271 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36155.490271 + } + }, + "captured_at": "2026-08-01T17:35:20.460980Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:35:20.539737Z", + "duration_ms": 22592 + }, + { + "id": "MODE-QUEEN", + "group": "mode", + "utterance": "副驾执行女王副驾行驶模式", + "started_at": "2026-08-01T17:35:20.539831Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801173520-452638", + "matched_modes": [ + "queen_passenger_driving" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4395, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 41 01 2B 11 00", + "timestamp": 36171.331389 + } + }, + "legrest_height": { + "position_pct": 31, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 3122, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 42 01 32 0C 00", + "timestamp": 36171.357453 + } + }, + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 7194, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 3F 01 1A 1C 00", + "timestamp": 36171.383588 + } + }, + "cushion_tilt": { + "position_pct": 38, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 3797, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 40 01 D5 0E 00", + "timestamp": 36171.409577 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36171.419133 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36171.419133 + } + }, + "captured_at": "2026-08-01T17:35:36.389592Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:35:36.474203Z", + "duration_ms": 15934 + }, + { + "id": "MODE-BABY-NAP", + "group": "mode", + "utterance": "副驾执行宝宝午睡模式", + "started_at": "2026-08-01T17:35:36.474286Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801173536-1ae95c", + "matched_modes": [ + "baby_nap" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 41, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4100, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 46 01 04 10 00", + "timestamp": 36186.402227 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 47 01 00 00 00", + "timestamp": 36186.427207 + } + }, + "longitudinal": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 8116, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 44 01 B4 1F 00", + "timestamp": 36186.454004 + } + }, + "cushion_tilt": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2995, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 45 01 B3 0B 00", + "timestamp": 36186.479783 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36186.486508 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36186.486508 + } + }, + "captured_at": "2026-08-01T17:35:51.456741Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:35:51.543269Z", + "duration_ms": 15069 + }, + { + "id": "MODE-CRUISE-SOFA", + "group": "mode", + "utterance": "副驾执行巡航沙发模式", + "started_at": "2026-08-01T17:35:51.543344Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801173551-b10a5e", + "matched_modes": [ + "cruise_sofa" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 53, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5317, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 4C 01 C5 14 00", + "timestamp": 36206.976676 + } + }, + "longitudinal": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 5090, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 49 01 E2 13 00", + "timestamp": 36207.002744 + } + }, + "cushion_tilt": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2995, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 4A 01 B3 0B 00", + "timestamp": 36207.028057 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4395, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 4B 01 2B 11 00", + "timestamp": 36207.054121 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36207.065484 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36207.065484 + } + }, + "captured_at": "2026-08-01T17:36:12.035258Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:36:12.116237Z", + "duration_ms": 20573 + }, + { + "id": "MODE-MEDITATION", + "group": "mode", + "utterance": "副驾执行冥想空间模式", + "started_at": "2026-08-01T17:36:12.116297Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801173612-dab772", + "matched_modes": [ + "meditation_space" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 58, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5811, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 51 01 B3 16 00", + "timestamp": 36223.272815 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 4E 01 10 27 00", + "timestamp": 36223.298855 + } + }, + "cushion_tilt": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 4412, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 4F 01 3C 11 00", + "timestamp": 36223.324246 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4395, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 50 01 2B 11 00", + "timestamp": 36223.35031 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36223.359447 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36223.359447 + } + }, + "captured_at": "2026-08-01T17:36:28.328944Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:36:28.416288Z", + "duration_ms": 16300 + }, + { + "id": "MODE-LEISURE", + "group": "mode", + "utterance": "副驾执行休闲躺椅模式", + "started_at": "2026-08-01T17:36:28.416362Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801173628-9d85f9", + "matched_modes": [ + "leisure_lounger" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2995, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 54 01 B3 0B 00", + "timestamp": 36248.14072 + } + }, + "backrest_recline": { + "position_pct": 66, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 6598, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 55 01 C6 19 00", + "timestamp": 36248.166811 + } + }, + "legrest_height": { + "position_pct": 76, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 7604, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 56 01 B4 1D 00", + "timestamp": 36248.19294 + } + }, + "longitudinal": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 5090, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 53 01 E2 13 00", + "timestamp": 36248.220546 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36248.228523 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36248.228523 + } + }, + "captured_at": "2026-08-01T17:36:53.197578Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:36:53.276712Z", + "duration_ms": 24860 + }, + { + "id": "MODE-CALF", + "group": "mode", + "utterance": "副驾执行小腿解压悬浮模式", + "started_at": "2026-08-01T17:36:53.276783Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801173653-39bc49", + "matched_modes": [ + "calf_decompression_float" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 75, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 7513, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 59 01 59 1D 00", + "timestamp": 36280.300316 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 5A 01 00 00 00", + "timestamp": 36280.325624 + } + }, + "legrest_height": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 28 5B 01 10 27 00", + "timestamp": 36280.351617 + } + }, + "longitudinal": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 5090, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 58 01 E2 13 00", + "timestamp": 36280.37769 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36280.387925 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36280.387925 + } + }, + "captured_at": "2026-08-01T17:37:25.356269Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:37:25.441255Z", + "duration_ms": 32164 + }, + { + "id": "MODE-BEACH", + "group": "mode", + "utterance": "副驾执行电感沙滩椅模式", + "started_at": "2026-08-01T17:37:25.441314Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801173725-8c8b69", + "matched_modes": [ + "electric_beach_chair" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 5D 01 10 27 00", + "timestamp": 36336.115156 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 5E 01 00 00 00", + "timestamp": 36336.141544 + } + }, + "backrest_recline": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 9978, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 5F 01 FA 26 00", + "timestamp": 36336.167515 + } + }, + "legrest_height": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5981, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 60 01 5D 17 00", + "timestamp": 36336.193545 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36336.202646 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36336.202646 + } + }, + "captured_at": "2026-08-01T17:38:21.169957Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:38:21.251584Z", + "duration_ms": 55810 + }, + { + "id": "MODE-NAP", + "group": "mode", + "utterance": "副驾执行小憩模式", + "started_at": "2026-08-01T17:38:21.251668Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801173821-8d526e", + "matched_modes": [ + "nap" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 65 01 B5 24 00", + "timestamp": 36361.915413 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 62 01 10 27 00", + "timestamp": 36361.941953 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 63 01 10 27 00", + "timestamp": 36361.968014 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 64 01 A7 1F 00", + "timestamp": 36361.994186 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36362.00334 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36362.00334 + } + }, + "captured_at": "2026-08-01T17:38:46.970161Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:38:47.053444Z", + "duration_ms": 25802 + }, + { + "id": "MODE-ZERO-GRAVITY", + "group": "mode", + "utterance": "打开零重力模式", + "started_at": "2026-08-01T17:38:47.053535Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801173847-630834", + "matched_modes": [ + "zero_gravity" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 6A 01 B5 24 00", + "timestamp": 36368.73592 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 67 01 10 27 00", + "timestamp": 36368.762028 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 68 01 10 27 00", + "timestamp": 36368.788151 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 69 01 A7 1F 00", + "timestamp": 36368.814254 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36368.823389 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36368.823389 + } + }, + "captured_at": "2026-08-01T17:38:53.790157Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:38:53.936718Z", + "duration_ms": 6883 + } + ], + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T17:38:53.936783Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801173853-a23f08", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 69 01 A7 1F 00", + "timestamp": 36369.599695 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 6A 01 B5 24 00", + "timestamp": 36369.625753 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 67 01 10 27 00", + "timestamp": 36369.652324 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 68 01 10 27 00", + "timestamp": 36369.678374 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36369.687565 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36369.687565 + } + }, + "captured_at": "2026-08-01T17:38:54.654265Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:38:54.726753Z", + "duration_ms": 790 + }, + "finished_at": "2026-08-01T17:38:54.726786Z", + "summary": { + "total": 11, + "passed": 11, + "failed": 0, + "safety_blocked": 0, + "executed": 11, + "final_state_passed": true + } +} \ No newline at end of file diff --git a/artifacts/hil/seat_frontend_hil_20260802_all_modes_post_cleanup.json b/artifacts/hil/seat_frontend_hil_20260802_all_modes_post_cleanup.json new file mode 100644 index 0000000..47dc88b --- /dev/null +++ b/artifacts/hil/seat_frontend_hil_20260802_all_modes_post_cleanup.json @@ -0,0 +1,250 @@ +{ + "suite": "t2g-seat-frontend-full-hil", + "started_at": "2026-08-01T17:39:16.430915Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801173916", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "MOTION-ALL-ZERO", + "group": "motion", + "utterance": "把副驾水平、坐盆、靠背、腿托四轴归零", + "started_at": "2026-08-01T17:39:16.430950Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801173916-90206d", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 36459.051975 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 36459.077734 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 36459.104324 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 36459.129781 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36459.136472 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36459.136472 + } + }, + "captured_at": "2026-08-01T17:40:24.101369Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:40:24.299645Z", + "duration_ms": 67869 + } + ], + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T17:40:24.299777Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801174024-2bef93", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 36460.001759 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 36460.028327 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 36460.055218 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 36460.08066 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36460.087354 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36460.087354 + } + }, + "captured_at": "2026-08-01T17:40:25.052281Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:40:25.130245Z", + "duration_ms": 830 + }, + "finished_at": "2026-08-01T17:40:25.130276Z", + "summary": { + "total": 1, + "passed": 1, + "failed": 0, + "safety_blocked": 0, + "executed": 1, + "final_state_passed": true + } +} \ No newline at end of file diff --git a/artifacts/hil/seat_frontend_hil_20260802_gpt56_position_sync_targeted.json b/artifacts/hil/seat_frontend_hil_20260802_gpt56_position_sync_targeted.json new file mode 100644 index 0000000..e8541c2 --- /dev/null +++ b/artifacts/hil/seat_frontend_hil_20260802_gpt56_position_sync_targeted.json @@ -0,0 +1,364 @@ +{ + "suite": "t2g-seat-frontend-comprehensive-hil", + "started_at": "2026-08-01T20:30:03.347380Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801203003", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "MODEL-FUZZY-CRAMPED-COMFORT", + "group": "model", + "utterance": "前舱空间太挤了,把座椅调整到舒服的位置", + "started_at": "2026-08-01T20:30:43.772650Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801203043-6dba03", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 35, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 3501, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 09 00 AD 0D 00", + "timestamp": 46720.941274 + } + }, + "legrest_height": { + "position_pct": 10, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 1005, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 0A 00 ED 03 00", + "timestamp": 46720.967852 + } + }, + "longitudinal": { + "position_pct": 80, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 8016, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 07 00 50 1F 00", + "timestamp": 46720.993263 + } + }, + "cushion_tilt": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2995, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 08 00 B3 0B 00", + "timestamp": 46721.019784 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 46721.030217 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 46721.030217 + } + }, + "captured_at": "2026-08-01T20:31:25.795596Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T20:31:25.863040Z", + "duration_ms": 42090 + } + ], + "position_memory_sync": { + "id": "PREFLIGHT-POSITION-MEMORY-SYNC", + "group": "preflight", + "utterance": "关闭副驾座椅加热和通风,并把水平、坐盆、靠背、腿托四轴归零", + "started_at": "2026-08-01T20:30:03.347411Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801203003-f00e7a", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 03 00 00 00 00", + "timestamp": 46678.830874 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 04 00 00 00 00", + "timestamp": 46678.856952 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 05 00 00 00 00", + "timestamp": 46678.882795 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 02 00 00 00 00", + "timestamp": 46678.908649 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 46678.916532 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 46678.916532 + } + }, + "captured_at": "2026-08-01T20:30:43.683001Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T20:30:43.772568Z", + "duration_ms": 40425 + }, + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风,并把水平、坐盆、靠背、腿托四轴归零", + "started_at": "2026-08-01T20:31:25.863092Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801203125-a4af68", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 0C 00 00 00 00", + "timestamp": 46759.956435 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 0D 00 00 00 00", + "timestamp": 46759.982688 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 0E 00 00 00 00", + "timestamp": 46760.008938 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 0F 00 00 00 00", + "timestamp": 46760.041009 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 46760.053878 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 46760.053878 + } + }, + "captured_at": "2026-08-01T20:32:04.818553Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T20:32:04.895597Z", + "duration_ms": 39033 + }, + "finished_at": "2026-08-01T20:32:04.895635Z", + "summary": { + "total": 1, + "passed": 1, + "failed": 0, + "safety_blocked": 0, + "executed": 1, + "position_memory_sync_passed": true, + "final_state_passed": true + } +} \ No newline at end of file diff --git a/artifacts/hil/seat_frontend_hil_20260802_post_suite_zero_cleanup.json b/artifacts/hil/seat_frontend_hil_20260802_post_suite_zero_cleanup.json new file mode 100644 index 0000000..497f7f8 --- /dev/null +++ b/artifacts/hil/seat_frontend_hil_20260802_post_suite_zero_cleanup.json @@ -0,0 +1,250 @@ +{ + "suite": "t2g-seat-frontend-full-hil", + "started_at": "2026-08-01T17:16:40.264559Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801171640", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "MOTION-ALL-ZERO", + "group": "motion", + "utterance": "把副驾水平、坐盆、靠背、腿托四轴归零", + "started_at": "2026-08-01T17:16:40.264614Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801171640-4a5f1e", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 19 01 00 00 00", + "timestamp": 35105.608647 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 1A 01 00 00 00", + "timestamp": 35105.634423 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 17 01 00 00 00", + "timestamp": 35105.661016 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 18 01 00 00 00", + "timestamp": 35105.68652 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 35105.692065 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 35105.692065 + } + }, + "captured_at": "2026-08-01T17:17:50.683023Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:17:50.762718Z", + "duration_ms": 70498 + } + ], + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T17:17:50.762772Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801171750-2f0f2f", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 19 01 00 00 00", + "timestamp": 35106.475011 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 1A 01 00 00 00", + "timestamp": 35106.500476 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 17 01 00 00 00", + "timestamp": 35106.526322 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 18 01 00 00 00", + "timestamp": 35106.552849 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 35106.558466 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 35106.558466 + } + }, + "captured_at": "2026-08-01T17:17:51.549417Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:17:51.636183Z", + "duration_ms": 873 + }, + "finished_at": "2026-08-01T17:17:51.636217Z", + "summary": { + "total": 1, + "passed": 1, + "failed": 0, + "safety_blocked": 0, + "executed": 1, + "final_state_passed": true + } +} \ No newline at end of file diff --git a/artifacts/hil/seat_frontend_hil_20260802_preflight_firmware_restore.json b/artifacts/hil/seat_frontend_hil_20260802_preflight_firmware_restore.json new file mode 100644 index 0000000..bc537ea --- /dev/null +++ b/artifacts/hil/seat_frontend_hil_20260802_preflight_firmware_restore.json @@ -0,0 +1,363 @@ +{ + "suite": "t2g-seat-frontend-full-hil", + "started_at": "2026-08-01T16:40:47.172484Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801164047", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "THERM-H-OFF", + "group": "thermal", + "utterance": "关闭副驾座椅加热", + "started_at": "2026-08-01T16:40:47.172525Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801164047-8cddb4", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 00 18 00 00 00 00 00", + "timestamp": 32897.543083 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 00 18 00 00 00 00 00", + "timestamp": 32897.568506 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 00 18 00 00 00 00 00", + "timestamp": 32897.595022 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 00 18 00 00 00 00 00", + "timestamp": 32897.620753 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 32897.62524 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 32897.62524 + } + }, + "captured_at": "2026-08-01T16:41:02.659736Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:41:02.738362Z", + "duration_ms": 15566 + }, + { + "id": "THERM-V-OFF", + "group": "thermal", + "utterance": "关闭副驾座椅通风", + "started_at": "2026-08-01T16:41:02.738421Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801164102-401927", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 00 18 00 00 00 00 00", + "timestamp": 32898.36913 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 00 18 00 00 00 00 00", + "timestamp": 32898.394558 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 00 18 00 00 00 00 00", + "timestamp": 32898.421367 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 00 18 00 00 00 00 00", + "timestamp": 32898.446823 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 32898.453497 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 32898.453497 + } + }, + "captured_at": "2026-08-01T16:41:03.487981Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:41:03.570272Z", + "duration_ms": 832 + } + ], + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T16:41:03.570317Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801164103-4efef7", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 00 18 00 00 00 00 00", + "timestamp": 32899.183035 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 00 18 00 00 00 00 00", + "timestamp": 32899.209498 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 00 18 00 00 00 00 00", + "timestamp": 32899.23527 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 0, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 00 18 00 00 00 00 00", + "timestamp": 32899.260679 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 32899.267388 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 32899.267388 + } + }, + "captured_at": "2026-08-01T16:41:04.301854Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:41:04.424088Z", + "duration_ms": 854 + }, + "finished_at": "2026-08-01T16:41:04.424118Z", + "summary": { + "total": 2, + "passed": 2, + "failed": 0, + "safety_blocked": 0, + "executed": 2, + "final_state_passed": true + } +} \ No newline at end of file diff --git a/artifacts/hil/seat_frontend_hil_20260802_timeout_fix_post_cleanup.json b/artifacts/hil/seat_frontend_hil_20260802_timeout_fix_post_cleanup.json new file mode 100644 index 0000000..56427a0 --- /dev/null +++ b/artifacts/hil/seat_frontend_hil_20260802_timeout_fix_post_cleanup.json @@ -0,0 +1,250 @@ +{ + "suite": "t2g-seat-frontend-full-hil", + "started_at": "2026-08-01T17:32:24.627065Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801173224", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "MOTION-ALL-ZERO", + "group": "motion", + "utterance": "把副驾水平、坐盆、靠背、腿托四轴归零", + "started_at": "2026-08-01T17:32:24.627106Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801173224-cedf76", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 30 01 00 00 00", + "timestamp": 36047.100786 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 31 01 00 00 00", + "timestamp": 36047.126273 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 32 01 00 00 00", + "timestamp": 36047.152829 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 33 01 00 00 00", + "timestamp": 36047.178304 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36047.185019 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36047.185019 + } + }, + "captured_at": "2026-08-01T17:33:32.157834Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:33:32.231664Z", + "duration_ms": 67605 + } + ], + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T17:33:32.231720Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801173332-3d22e2", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 30 01 00 00 00", + "timestamp": 36047.928676 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 31 01 00 00 00", + "timestamp": 36047.954191 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 32 01 00 00 00", + "timestamp": 36047.980699 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 33 01 00 00 00", + "timestamp": 36048.006522 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36048.013163 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 36048.013163 + } + }, + "captured_at": "2026-08-01T17:33:32.986103Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:33:33.067889Z", + "duration_ms": 836 + }, + "finished_at": "2026-08-01T17:33:33.067920Z", + "summary": { + "total": 1, + "passed": 1, + "failed": 0, + "safety_blocked": 0, + "executed": 1, + "final_state_passed": true + } +} \ No newline at end of file diff --git a/artifacts/hil/seat_frontend_hil_20260802_timeout_fix_precondition_zero.json b/artifacts/hil/seat_frontend_hil_20260802_timeout_fix_precondition_zero.json new file mode 100644 index 0000000..ae2dcfd --- /dev/null +++ b/artifacts/hil/seat_frontend_hil_20260802_timeout_fix_precondition_zero.json @@ -0,0 +1,250 @@ +{ + "suite": "t2g-seat-frontend-full-hil", + "started_at": "2026-08-01T17:26:35.994926Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801172635", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "MOTION-ALL-ZERO", + "group": "motion", + "utterance": "把副驾水平、坐盆、靠背、腿托四轴归零", + "started_at": "2026-08-01T17:26:35.994963Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801172635-cf368d", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 23 01 00 00 00", + "timestamp": 35698.280073 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 24 01 00 00 00", + "timestamp": 35698.306668 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 21 01 00 00 00", + "timestamp": 35698.332116 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 22 01 00 00 00", + "timestamp": 35698.357889 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 35698.36569 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 35698.36569 + } + }, + "captured_at": "2026-08-01T17:27:43.345246Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:27:43.418173Z", + "duration_ms": 67423 + } + ], + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T17:27:43.418231Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801172743-1f95ae", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 23 01 00 00 00", + "timestamp": 35699.098847 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 24 01 00 00 00", + "timestamp": 35699.124304 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 21 01 00 00 00", + "timestamp": 35699.150901 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 22 01 00 00 00", + "timestamp": 35699.176715 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 35699.184476 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 35699.184476 + } + }, + "captured_at": "2026-08-01T17:27:44.164137Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:27:44.276096Z", + "duration_ms": 858 + }, + "finished_at": "2026-08-01T17:27:44.276129Z", + "summary": { + "total": 1, + "passed": 1, + "failed": 0, + "safety_blocked": 0, + "executed": 1, + "final_state_passed": true + } +} \ No newline at end of file diff --git a/artifacts/hil/seat_frontend_hil_20260802_user_requested_run3.json b/artifacts/hil/seat_frontend_hil_20260802_user_requested_run3.json new file mode 100644 index 0000000..29fdf7d --- /dev/null +++ b/artifacts/hil/seat_frontend_hil_20260802_user_requested_run3.json @@ -0,0 +1,3888 @@ +{ + "suite": "t2g-seat-frontend-full-hil", + "started_at": "2026-08-01T17:08:24.094417Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801170824", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "THERM-H-1", + "group": "thermal", + "utterance": "副驾座椅加热开到1档", + "started_at": "2026-08-01T17:08:24.094455Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170824-e7d4bb", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 BE 00 B5 24 00", + "timestamp": 34539.795347 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 BB 00 10 27 00", + "timestamp": 34539.821216 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 BC 00 10 27 00", + "timestamp": 34539.847532 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 BD 00 A7 1F 00", + "timestamp": 34539.873425 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "11 00 00 00 00 00 00 00", + "timestamp": 34539.883598 + } + }, + "heating": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "11 00 00 00 00 00 00 00", + "timestamp": 34539.883598 + } + }, + "captured_at": "2026-08-01T17:08:24.885701Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:08:24.956845Z", + "duration_ms": 862 + }, + { + "id": "THERM-H-2", + "group": "thermal", + "utterance": "副驾座椅加热开到2档", + "started_at": "2026-08-01T17:08:24.956905Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170824-332e47", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 BB 00 10 27 00", + "timestamp": 34540.653512 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 BC 00 10 27 00", + "timestamp": 34540.679443 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 BD 00 A7 1F 00", + "timestamp": 34540.705312 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 BE 00 B5 24 00", + "timestamp": 34540.73161 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "19 00 00 00 00 00 00 00", + "timestamp": 34540.739551 + } + }, + "heating": { + "state": "on", + "level": 2, + "feedback_value": 3, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "19 00 00 00 00 00 00 00", + "timestamp": 34540.739551 + } + }, + "captured_at": "2026-08-01T17:08:25.741555Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:08:25.827429Z", + "duration_ms": 871 + }, + { + "id": "THERM-H-3", + "group": "thermal", + "utterance": "副驾座椅加热开到3档", + "started_at": "2026-08-01T17:08:25.827487Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170825-75b032", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 BC 00 10 27 00", + "timestamp": 34541.540791 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 BD 00 A7 1F 00", + "timestamp": 34541.566677 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 BE 00 B5 24 00", + "timestamp": 34541.59369 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 BB 00 10 27 00", + "timestamp": 34541.619559 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "21 00 00 00 00 00 00 00", + "timestamp": 34541.627552 + } + }, + "heating": { + "state": "on", + "level": 3, + "feedback_value": 4, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "21 00 00 00 00 00 00 00", + "timestamp": 34541.627552 + } + }, + "captured_at": "2026-08-01T17:08:26.629455Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:08:26.705777Z", + "duration_ms": 878 + }, + { + "id": "THERM-H-OFF", + "group": "thermal", + "utterance": "关闭副驾座椅加热", + "started_at": "2026-08-01T17:08:26.705835Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170826-c54cd3", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 BC 00 10 27 00", + "timestamp": 34542.387103 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 BD 00 A7 1F 00", + "timestamp": 34542.41287 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 BE 00 B5 24 00", + "timestamp": 34542.439124 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 BB 00 10 27 00", + "timestamp": 34542.464931 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34542.472838 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34542.472838 + } + }, + "captured_at": "2026-08-01T17:08:27.474790Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:08:27.558193Z", + "duration_ms": 852 + }, + { + "id": "THERM-V-1", + "group": "thermal", + "utterance": "副驾座椅通风开到1档", + "started_at": "2026-08-01T17:08:27.558249Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170827-b5bc45", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 BC 00 10 27 00", + "timestamp": 34543.216748 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 BD 00 A7 1F 00", + "timestamp": 34543.242971 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 BE 00 B5 24 00", + "timestamp": 34543.268807 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 BB 00 10 27 00", + "timestamp": 34543.295796 + } + } + }, + "ventilation": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0A 00 00 00 00 00 00 00", + "timestamp": 34543.302553 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0A 00 00 00 00 00 00 00", + "timestamp": 34543.302553 + } + }, + "captured_at": "2026-08-01T17:08:28.304452Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:08:28.378592Z", + "duration_ms": 820 + }, + { + "id": "THERM-V-2", + "group": "thermal", + "utterance": "副驾座椅通风开到2档", + "started_at": "2026-08-01T17:08:28.378644Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170828-4d9c48", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 BC 00 10 27 00", + "timestamp": 34544.031158 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 BD 00 A7 1F 00", + "timestamp": 34544.056998 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 BE 00 B5 24 00", + "timestamp": 34544.082809 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 BB 00 10 27 00", + "timestamp": 34544.109744 + } + } + }, + "ventilation": { + "state": "on", + "level": 2, + "feedback_value": 3, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0B 00 00 00 00 00 00 00", + "timestamp": 34544.117665 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0B 00 00 00 00 00 00 00", + "timestamp": 34544.117665 + } + }, + "captured_at": "2026-08-01T17:08:29.119487Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:08:29.199658Z", + "duration_ms": 821 + }, + { + "id": "THERM-V-3", + "group": "thermal", + "utterance": "副驾座椅通风开到3档", + "started_at": "2026-08-01T17:08:29.199719Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170829-0d184a", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 BC 00 10 27 00", + "timestamp": 34544.857453 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 BD 00 A7 1F 00", + "timestamp": 34544.883254 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 BE 00 B5 24 00", + "timestamp": 34544.909084 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 BB 00 10 27 00", + "timestamp": 34544.935365 + } + } + }, + "ventilation": { + "state": "on", + "level": 3, + "feedback_value": 4, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0C 00 00 00 00 00 00 00", + "timestamp": 34544.943222 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0C 00 00 00 00 00 00 00", + "timestamp": 34544.943222 + } + }, + "captured_at": "2026-08-01T17:08:29.945111Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:08:30.017608Z", + "duration_ms": 818 + }, + { + "id": "THERM-V-OFF", + "group": "thermal", + "utterance": "关闭副驾座椅通风", + "started_at": "2026-08-01T17:08:30.017659Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170830-a67de6", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 BC 00 10 27 00", + "timestamp": 34545.686922 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 BD 00 A7 1F 00", + "timestamp": 34545.713815 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 BE 00 B5 24 00", + "timestamp": 34545.738955 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 BB 00 10 27 00", + "timestamp": 34545.76586 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34545.773769 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34545.773769 + } + }, + "captured_at": "2026-08-01T17:08:30.775602Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:08:30.854317Z", + "duration_ms": 837 + }, + { + "id": "MOTION-M0-25", + "group": "motion", + "utterance": "把副驾座椅水平位置调到25%", + "started_at": "2026-08-01T17:08:30.854374Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170830-0dd6cd", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 08 BF 00 A7 1F 00", + "timestamp": 34559.237212 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 08 BF 00 B5 24 00", + "timestamp": 34559.26328 + } + }, + "longitudinal": { + "position_pct": 25, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 2505, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 C0 00 C9 09 00", + "timestamp": 34559.289411 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 BF 00 10 27 00", + "timestamp": 34559.315454 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34559.324617 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34559.324617 + } + }, + "captured_at": "2026-08-01T17:08:44.326171Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:08:44.398075Z", + "duration_ms": 13544 + }, + { + "id": "MOTION-M0-75", + "group": "motion", + "utterance": "把副驾座椅水平位置调到75%", + "started_at": "2026-08-01T17:08:44.398128Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170844-311b78", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 08 C1 00 B5 24 00", + "timestamp": 34567.727971 + } + }, + "longitudinal": { + "position_pct": 75, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 7515, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 C2 00 5B 1D 00", + "timestamp": 34567.753309 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 C1 00 10 27 00", + "timestamp": 34567.779454 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 08 C1 00 A7 1F 00", + "timestamp": 34567.805533 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34567.816918 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34567.816918 + } + }, + "captured_at": "2026-08-01T17:08:52.818254Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:08:52.893460Z", + "duration_ms": 8495 + }, + { + "id": "MOTION-M0-HOME", + "group": "motion", + "utterance": "把副驾座椅水平位置归零", + "started_at": "2026-08-01T17:08:52.893515Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170852-6542e6", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 C4 00 00 00 00", + "timestamp": 34581.822564 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 28 C3 00 10 27 00", + "timestamp": 34581.848649 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 08 C3 00 A7 1F 00", + "timestamp": 34581.874405 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 08 C3 00 B5 24 00", + "timestamp": 34581.90013 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34581.906921 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34581.906921 + } + }, + "captured_at": "2026-08-01T17:09:06.907964Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:09:06.983484Z", + "duration_ms": 14090 + }, + { + "id": "MOTION-M1-20", + "group": "motion", + "utterance": "把副驾坐盆调到20%", + "started_at": "2026-08-01T17:09:06.983546Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170907-eb8e51", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 08 C5 00 B5 24 00", + "timestamp": 34588.898684 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 C5 00 00 00 00", + "timestamp": 34588.924655 + } + }, + "cushion_tilt": { + "position_pct": 20, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2005, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 C6 00 D5 07 00", + "timestamp": 34588.949969 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 08 C5 00 A7 1F 00", + "timestamp": 34588.975992 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34588.985083 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34588.985083 + } + }, + "captured_at": "2026-08-01T17:09:13.986048Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:09:14.063651Z", + "duration_ms": 7080 + }, + { + "id": "MOTION-M1-60", + "group": "motion", + "utterance": "把副驾坐盆调到60%", + "started_at": "2026-08-01T17:09:14.063709Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170914-0c7995", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 08 C7 00 B5 24 00", + "timestamp": 34592.968781 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 C7 00 00 00 00", + "timestamp": 34592.994821 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 C8 00 65 17 00", + "timestamp": 34593.020838 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 08 C7 00 A7 1F 00", + "timestamp": 34593.046142 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34593.055193 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34593.055193 + } + }, + "captured_at": "2026-08-01T17:09:18.056088Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:09:18.130364Z", + "duration_ms": 4067 + }, + { + "id": "MOTION-M2-25", + "group": "motion", + "utterance": "把副驾靠背调到25%", + "started_at": "2026-08-01T17:09:18.130428Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170918-f759ce", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 25, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 2497, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 CA 00 C1 09 00", + "timestamp": 34606.416547 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 08 C9 00 B5 24 00", + "timestamp": 34606.442939 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 C9 00 00 00 00", + "timestamp": 34606.468938 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 C9 00 65 17 00", + "timestamp": 34606.494925 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34606.504014 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34606.504014 + } + }, + "captured_at": "2026-08-01T17:09:31.504638Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:09:31.588824Z", + "duration_ms": 13458 + }, + { + "id": "MOTION-M2-60", + "group": "motion", + "utterance": "把副驾靠背调到60%", + "started_at": "2026-08-01T17:09:31.588888Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170931-ae3e10", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 CB 00 65 17 00", + "timestamp": 34616.211128 + } + }, + "backrest_recline": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 6009, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 CC 00 79 17 00", + "timestamp": 34616.238698 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 08 CB 00 B5 24 00", + "timestamp": 34616.264663 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 CB 00 00 00 00", + "timestamp": 34616.290723 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34616.299824 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34616.299824 + } + }, + "captured_at": "2026-08-01T17:09:41.300276Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:09:41.383301Z", + "duration_ms": 9794 + }, + { + "id": "MOTION-M2-HOME", + "group": "motion", + "utterance": "把副驾靠背归零", + "started_at": "2026-08-01T17:09:41.383362Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170941-d0ef3d", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 08 CD 00 B5 24 00", + "timestamp": 34633.823158 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 CD 00 00 00 00", + "timestamp": 34633.849132 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 CD 00 65 17 00", + "timestamp": 34633.875891 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 CE 00 00 00 00", + "timestamp": 34633.901539 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34633.908302 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34633.908302 + } + }, + "captured_at": "2026-08-01T17:09:58.908346Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:09:58.991459Z", + "duration_ms": 17608 + }, + { + "id": "MOTION-M3-20", + "group": "motion", + "utterance": "把副驾腿托调到20%", + "started_at": "2026-08-01T17:09:58.991514Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170959-5967df", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 CF 00 00 00 00", + "timestamp": 34644.962212 + } + }, + "legrest_height": { + "position_pct": 20, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 1978, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 D0 00 BA 07 00", + "timestamp": 34644.988191 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 CF 00 00 00 00", + "timestamp": 34645.01405 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 CF 00 65 17 00", + "timestamp": 34645.04002 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34645.050557 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34645.050557 + } + }, + "captured_at": "2026-08-01T17:10:10.050390Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:10:10.128196Z", + "duration_ms": 11137 + }, + { + "id": "MOTION-M3-60", + "group": "motion", + "utterance": "把副驾腿托调到60%", + "started_at": "2026-08-01T17:10:10.128256Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801171010-21f384", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 D1 00 00 00 00", + "timestamp": 34651.627936 + } + }, + "legrest_height": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 6012, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 D2 00 7C 17 00", + "timestamp": 34651.654228 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 D1 00 00 00 00", + "timestamp": 34651.680193 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 D1 00 65 17 00", + "timestamp": 34651.706171 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34651.715212 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34651.715212 + } + }, + "captured_at": "2026-08-01T17:10:16.714930Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:10:16.797288Z", + "duration_ms": 6669 + }, + { + "id": "MOTION-M3-HOME", + "group": "motion", + "utterance": "把副驾腿托归零", + "started_at": "2026-08-01T17:10:16.797347Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801171016-b82525", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 D3 00 00 00 00", + "timestamp": 34662.045316 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 D3 00 65 17 00", + "timestamp": 34662.0698 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 D3 00 00 00 00", + "timestamp": 34662.096479 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 D4 00 00 00 00", + "timestamp": 34662.122041 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34662.129885 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34662.129885 + } + }, + "captured_at": "2026-08-01T17:10:27.129431Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:10:27.200558Z", + "duration_ms": 10403 + }, + { + "id": "MOTION-ALL-ZERO", + "group": "motion", + "utterance": "把副驾水平、坐盆、靠背、腿托四轴归零", + "started_at": "2026-08-01T17:10:27.200614Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801171027-fd4b0c", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 D7 00 00 00 00", + "timestamp": 34685.346403 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 D8 00 00 00 00", + "timestamp": 34685.372197 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 D9 00 00 00 00", + "timestamp": 34685.398708 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 D6 00 00 00 00", + "timestamp": 34685.424255 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34685.430944 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34685.430944 + } + }, + "captured_at": "2026-08-01T17:10:50.430113Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:10:50.507327Z", + "duration_ms": 23307 + }, + { + "id": "COMBINED-ALL", + "group": "combined", + "utterance": "打开副驾加热1档、打开通风1档,座椅水平到30%,坐盆到40%,靠背到37%,腿托到42%", + "started_at": "2026-08-01T17:10:50.507392Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801171050-85b754", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 37, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 3708, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 DD 00 7C 0E 00", + "timestamp": 34720.499128 + } + }, + "legrest_height": { + "position_pct": 42, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 4219, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 DE 00 7B 10 00", + "timestamp": 34720.525318 + } + }, + "longitudinal": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 3026, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 DB 00 D2 0B 00", + "timestamp": 34720.551413 + } + }, + "cushion_tilt": { + "position_pct": 40, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 4037, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 DC 00 C5 0F 00", + "timestamp": 34720.577979 + } + } + }, + "ventilation": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "12 00 00 00 00 00 00 00", + "timestamp": 34720.588248 + } + }, + "heating": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "12 00 00 00 00 00 00 00", + "timestamp": 34720.588248 + } + }, + "captured_at": "2026-08-01T17:11:25.586625Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:11:25.659462Z", + "duration_ms": 35152 + }, + { + "id": "COMBINED-OFF", + "group": "combined", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T17:11:25.659547Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801171125-fa15bd", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 40, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 4037, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 DC 00 C5 0F 00", + "timestamp": 34721.319937 + } + }, + "backrest_recline": { + "position_pct": 37, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 3708, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 DD 00 7C 0E 00", + "timestamp": 34721.345996 + } + }, + "legrest_height": { + "position_pct": 42, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 4219, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 DE 00 7B 10 00", + "timestamp": 34721.37131 + } + }, + "longitudinal": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 3026, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 DB 00 D2 0B 00", + "timestamp": 34721.397361 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34721.406478 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34721.406478 + } + }, + "captured_at": "2026-08-01T17:11:26.404961Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:11:26.478711Z", + "duration_ms": 819 + }, + { + "id": "MODE-EASY-ENTRY", + "group": "mode", + "utterance": "副驾执行轻松进出模式", + "started_at": "2026-08-01T17:11:26.478775Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801171126-8cbfe1", + "matched_modes": [ + "easy_entry_exit" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 E3 00 00 00 00", + "timestamp": 34761.498612 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 E0 00 10 27 00", + "timestamp": 34761.524155 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 E1 00 00 00 00", + "timestamp": 34761.550808 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 E2 00 00 00 00", + "timestamp": 34761.5764 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34761.583409 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34761.583409 + } + }, + "captured_at": "2026-08-01T17:12:06.580984Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:12:06.664393Z", + "duration_ms": 40186 + }, + { + "id": "MODE-OFFICE", + "group": "mode", + "utterance": "副驾执行办公模式", + "started_at": "2026-08-01T17:12:06.664466Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801171206-47bb05", + "matched_modes": [ + "office" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 7194, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 E5 00 1A 1C 00", + "timestamp": 34783.981964 + } + }, + "cushion_tilt": { + "position_pct": 22, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2219, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 E6 00 AB 08 00", + "timestamp": 34784.006911 + } + }, + "backrest_recline": { + "position_pct": 22, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 2214, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 E7 00 A6 08 00", + "timestamp": 34784.033007 + } + }, + "legrest_height": { + "position_pct": 21, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 2102, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 E8 00 36 08 00", + "timestamp": 34784.059026 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34784.068151 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34784.068151 + } + }, + "captured_at": "2026-08-01T17:12:29.065381Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:12:29.147224Z", + "duration_ms": 22483 + }, + { + "id": "MODE-QUEEN", + "group": "mode", + "utterance": "副驾执行女王副驾行驶模式", + "started_at": "2026-08-01T17:12:29.147301Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801171229-7e40f0", + "matched_modes": [ + "queen_passenger_driving" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4406, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 EC 00 36 11 00", + "timestamp": 34799.721331 + } + }, + "legrest_height": { + "position_pct": 31, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 3122, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 ED 00 32 0C 00", + "timestamp": 34799.747467 + } + }, + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 7194, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 EA 00 1A 1C 00", + "timestamp": 34799.773538 + } + }, + "cushion_tilt": { + "position_pct": 38, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 3797, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 EB 00 D5 0E 00", + "timestamp": 34799.798852 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34799.809103 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34799.809103 + } + }, + "captured_at": "2026-08-01T17:12:44.806117Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:12:44.888658Z", + "duration_ms": 15741 + }, + { + "id": "MODE-BABY-NAP", + "group": "mode", + "utterance": "副驾执行宝宝午睡模式", + "started_at": "2026-08-01T17:12:44.888730Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801171244-0fe733", + "matched_modes": [ + "baby_nap" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 F2 00 00 00 00", + "timestamp": 34814.595262 + } + }, + "longitudinal": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 8116, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 EF 00 B4 1F 00", + "timestamp": 34814.622063 + } + }, + "cushion_tilt": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2995, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 F0 00 B3 0B 00", + "timestamp": 34814.647821 + } + }, + "backrest_recline": { + "position_pct": 41, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4100, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 F1 00 04 10 00", + "timestamp": 34814.673468 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34814.680263 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34814.680263 + } + }, + "captured_at": "2026-08-01T17:12:59.676855Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:12:59.751492Z", + "duration_ms": 14863 + }, + { + "id": "MODE-CRUISE-SOFA", + "group": "mode", + "utterance": "副驾执行巡航沙发模式", + "started_at": "2026-08-01T17:12:59.751570Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801171259-ad309d", + "matched_modes": [ + "cruise_sofa" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 5090, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 F4 00 E2 13 00", + "timestamp": 34835.0259 + } + }, + "cushion_tilt": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2995, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 F5 00 B3 0B 00", + "timestamp": 34835.052041 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4406, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 F6 00 36 11 00", + "timestamp": 34835.078121 + } + }, + "legrest_height": { + "position_pct": 53, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5301, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 F7 00 B5 14 00", + "timestamp": 34835.104564 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34835.113699 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34835.113699 + } + }, + "captured_at": "2026-08-01T17:13:20.109892Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:13:20.189317Z", + "duration_ms": 20438 + }, + { + "id": "MODE-MEDITATION", + "group": "mode", + "utterance": "副驾执行冥想空间模式", + "started_at": "2026-08-01T17:13:20.189388Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801171320-cd7446", + "matched_modes": [ + "meditation_space" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 4412, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 FA 00 3C 11 00", + "timestamp": 34851.294603 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4362, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 FB 00 0A 11 00", + "timestamp": 34851.320691 + } + }, + "legrest_height": { + "position_pct": 58, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5811, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 FC 00 B3 16 00", + "timestamp": 34851.346778 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 F9 00 10 27 00", + "timestamp": 34851.37289 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34851.382033 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34851.382033 + } + }, + "captured_at": "2026-08-01T17:13:36.377905Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:13:36.441207Z", + "duration_ms": 16252 + }, + { + "id": "MODE-LEISURE", + "group": "mode", + "utterance": "副驾执行休闲躺椅模式", + "started_at": "2026-08-01T17:13:36.441287Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801171336-7cd1ce", + "matched_modes": [ + "leisure_lounger" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 5090, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 FE 00 E2 13 00", + "timestamp": 34876.303425 + } + }, + "cushion_tilt": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2995, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 FF 00 B3 0B 00", + "timestamp": 34876.329519 + } + }, + "backrest_recline": { + "position_pct": 66, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 6598, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 00 01 C6 19 00", + "timestamp": 34876.355634 + } + }, + "legrest_height": { + "position_pct": 76, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 7604, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 01 01 B4 1D 00", + "timestamp": 34876.380603 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34876.391277 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34876.391277 + } + }, + "captured_at": "2026-08-01T17:14:01.386641Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:14:01.471255Z", + "duration_ms": 25030 + }, + { + "id": "MODE-CALF", + "group": "mode", + "utterance": "副驾执行小腿解压悬浮模式", + "started_at": "2026-08-01T17:14:01.471332Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801171401-3ded24", + "matched_modes": [ + "calf_decompression_float" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 28 06 01 10 27 00", + "timestamp": 34908.769508 + } + }, + "longitudinal": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 5090, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 03 01 E2 13 00", + "timestamp": 34908.795939 + } + }, + "cushion_tilt": { + "position_pct": 75, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 7513, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 04 01 59 1D 00", + "timestamp": 34908.821914 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 05 01 00 00 00", + "timestamp": 34908.84801 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34908.857109 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34908.857109 + } + }, + "captured_at": "2026-08-01T17:14:33.851924Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:14:33.937484Z", + "duration_ms": 32466 + }, + { + "id": "MODE-BEACH", + "group": "mode", + "utterance": "副驾执行电感沙滩椅模式", + "started_at": "2026-08-01T17:14:33.937559Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801171433-ef5599", + "matched_modes": [ + "electric_beach_chair" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5981, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 0B 01 5D 17 00", + "timestamp": 34965.675011 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 08 01 10 27 00", + "timestamp": 34965.70144 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 09 01 00 00 00", + "timestamp": 34965.727424 + } + }, + "backrest_recline": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 28 0A 01 10 27 00", + "timestamp": 34965.753391 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34965.762482 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34965.762482 + } + }, + "captured_at": "2026-08-01T17:15:30.756318Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:15:30.836468Z", + "duration_ms": 56899 + }, + { + "id": "MODE-NAP", + "group": "mode", + "utterance": "副驾执行小憩模式", + "started_at": "2026-08-01T17:15:30.836547Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801171530-f5eb43", + "matched_modes": [ + "nap" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 10 01 B5 24 00", + "timestamp": 34991.839546 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 0D 01 10 27 00", + "timestamp": 34991.865654 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 0E 01 10 27 00", + "timestamp": 34991.891761 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 0F 01 A7 1F 00", + "timestamp": 34991.918295 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34991.927382 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34991.927382 + } + }, + "captured_at": "2026-08-01T17:15:56.920610Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:15:57.005919Z", + "duration_ms": 26169 + }, + { + "id": "MODE-ZERO-GRAVITY", + "group": "mode", + "utterance": "副驾执行零重力模式", + "started_at": "2026-08-01T17:15:57.005998Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801171557-3eb462", + "matched_modes": [ + "zero_gravity" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 15 01 B5 24 00", + "timestamp": 34998.626016 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 12 01 10 27 00", + "timestamp": 34998.652171 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 13 01 10 27 00", + "timestamp": 34998.678282 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 14 01 A7 1F 00", + "timestamp": 34998.703658 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34998.712781 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34998.712781 + } + }, + "captured_at": "2026-08-01T17:16:03.705893Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:16:03.835252Z", + "duration_ms": 6829 + } + ], + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T17:16:03.835320Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801171603-9ad0a8", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 14 01 A7 1F 00", + "timestamp": 34999.513815 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 15 01 B5 24 00", + "timestamp": 34999.539906 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 12 01 10 27 00", + "timestamp": 34999.566 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 13 01 10 27 00", + "timestamp": 34999.592133 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34999.601708 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34999.601708 + } + }, + "captured_at": "2026-08-01T17:16:04.594818Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:16:04.678143Z", + "duration_ms": 843 + }, + "finished_at": "2026-08-01T17:16:04.678184Z", + "summary": { + "total": 33, + "passed": 33, + "failed": 0, + "safety_blocked": 0, + "executed": 33, + "final_state_passed": true + } +} \ No newline at end of file diff --git a/artifacts/hil/seat_frontend_hil_20260802_user_retest_run2.json b/artifacts/hil/seat_frontend_hil_20260802_user_retest_run2.json new file mode 100644 index 0000000..655d639 --- /dev/null +++ b/artifacts/hil/seat_frontend_hil_20260802_user_retest_run2.json @@ -0,0 +1,3888 @@ +{ + "suite": "t2g-seat-frontend-full-hil", + "started_at": "2026-08-01T16:58:40.725101Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801165840", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "THERM-H-1", + "group": "thermal", + "utterance": "副驾座椅加热开到1档", + "started_at": "2026-08-01T16:58:40.725141Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801165840-28be33", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 66 00 00 00 00", + "timestamp": 33956.407861 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 67 00 00 00 00", + "timestamp": 33956.434758 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 64 00 00 00 00", + "timestamp": 33956.459254 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 65 00 00 00 00", + "timestamp": 33956.485917 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "11 00 00 00 00 00 00 00", + "timestamp": 33956.492602 + } + }, + "heating": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "11 00 00 00 00 00 00 00", + "timestamp": 33956.492602 + } + }, + "captured_at": "2026-08-01T16:58:41.506031Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:58:41.593525Z", + "duration_ms": 868 + }, + { + "id": "THERM-H-2", + "group": "thermal", + "utterance": "副驾座椅加热开到2档", + "started_at": "2026-08-01T16:58:41.593579Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801165841-1818ca", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 67 00 00 00 00", + "timestamp": 33957.275065 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 64 00 00 00 00", + "timestamp": 33957.301682 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 65 00 00 00 00", + "timestamp": 33957.327241 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 66 00 00 00 00", + "timestamp": 33957.353047 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "19 00 00 00 00 00 00 00", + "timestamp": 33957.361982 + } + }, + "heating": { + "state": "on", + "level": 2, + "feedback_value": 3, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "19 00 00 00 00 00 00 00", + "timestamp": 33957.361982 + } + }, + "captured_at": "2026-08-01T16:58:42.375305Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:58:42.458664Z", + "duration_ms": 865 + }, + { + "id": "THERM-H-3", + "group": "thermal", + "utterance": "副驾座椅加热开到3档", + "started_at": "2026-08-01T16:58:42.458718Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801165842-7be445", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 64 00 00 00 00", + "timestamp": 33958.147489 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 65 00 00 00 00", + "timestamp": 33958.17301 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 66 00 00 00 00", + "timestamp": 33958.19969 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 67 00 00 00 00", + "timestamp": 33958.225239 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "21 00 00 00 00 00 00 00", + "timestamp": 33958.231924 + } + }, + "heating": { + "state": "on", + "level": 3, + "feedback_value": 4, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "21 00 00 00 00 00 00 00", + "timestamp": 33958.231924 + } + }, + "captured_at": "2026-08-01T16:58:43.245268Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:58:43.322944Z", + "duration_ms": 864 + }, + { + "id": "THERM-H-OFF", + "group": "thermal", + "utterance": "关闭副驾座椅加热", + "started_at": "2026-08-01T16:58:43.323003Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801165843-a122cf", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 64 00 00 00 00", + "timestamp": 33958.977621 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 65 00 00 00 00", + "timestamp": 33959.003071 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 66 00 00 00 00", + "timestamp": 33959.029648 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 67 00 00 00 00", + "timestamp": 33959.055459 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 33959.062138 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 33959.062138 + } + }, + "captured_at": "2026-08-01T16:58:44.075421Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:58:44.162451Z", + "duration_ms": 839 + }, + { + "id": "THERM-V-1", + "group": "thermal", + "utterance": "副驾座椅通风开到1档", + "started_at": "2026-08-01T16:58:44.162505Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801165844-5ac04a", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 64 00 00 00 00", + "timestamp": 33959.821916 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 65 00 00 00 00", + "timestamp": 33959.847733 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 66 00 00 00 00", + "timestamp": 33959.873151 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 67 00 00 00 00", + "timestamp": 33959.89977 + } + } + }, + "ventilation": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0A 00 00 00 00 00 00 00", + "timestamp": 33959.905367 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0A 00 00 00 00 00 00 00", + "timestamp": 33959.905367 + } + }, + "captured_at": "2026-08-01T16:58:44.918541Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:58:45.000904Z", + "duration_ms": 838 + }, + { + "id": "THERM-V-2", + "group": "thermal", + "utterance": "副驾座椅通风开到2档", + "started_at": "2026-08-01T16:58:45.000961Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801165845-a745b7", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 64 00 00 00 00", + "timestamp": 33960.665204 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 65 00 00 00 00", + "timestamp": 33960.691756 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 66 00 00 00 00", + "timestamp": 33960.717225 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 67 00 00 00 00", + "timestamp": 33960.744105 + } + } + }, + "ventilation": { + "state": "on", + "level": 2, + "feedback_value": 3, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0B 00 00 00 00 00 00 00", + "timestamp": 33960.749702 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0B 00 00 00 00 00 00 00", + "timestamp": 33960.749702 + } + }, + "captured_at": "2026-08-01T16:58:45.762915Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:58:45.846671Z", + "duration_ms": 846 + }, + { + "id": "THERM-V-3", + "group": "thermal", + "utterance": "副驾座椅通风开到3档", + "started_at": "2026-08-01T16:58:45.846729Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801165845-9215b0", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 64 00 00 00 00", + "timestamp": 33961.491153 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 65 00 00 00 00", + "timestamp": 33961.517744 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 66 00 00 00 00", + "timestamp": 33961.543512 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 67 00 00 00 00", + "timestamp": 33961.570101 + } + } + }, + "ventilation": { + "state": "on", + "level": 3, + "feedback_value": 4, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0C 00 00 00 00 00 00 00", + "timestamp": 33961.57789 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0C 00 00 00 00 00 00 00", + "timestamp": 33961.57789 + } + }, + "captured_at": "2026-08-01T16:58:46.591152Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:58:46.679815Z", + "duration_ms": 833 + }, + { + "id": "THERM-V-OFF", + "group": "thermal", + "utterance": "关闭副驾座椅通风", + "started_at": "2026-08-01T16:58:46.679892Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801165846-6c49f7", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 64 00 00 00 00", + "timestamp": 33962.337988 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 65 00 00 00 00", + "timestamp": 33962.363413 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 66 00 00 00 00", + "timestamp": 33962.390019 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 67 00 00 00 00", + "timestamp": 33962.415496 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 33962.422179 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 33962.422179 + } + }, + "captured_at": "2026-08-01T16:58:47.435325Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:58:47.512136Z", + "duration_ms": 832 + }, + { + "id": "MOTION-M0-25", + "group": "motion", + "utterance": "把副驾座椅水平位置调到25%", + "started_at": "2026-08-01T16:58:47.512204Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801165847-75993f", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 25, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 2525, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 69 00 DD 09 00", + "timestamp": 33967.153221 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 68 00 00 00 00", + "timestamp": 33967.18019 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 68 00 00 00 00", + "timestamp": 33967.206048 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 68 00 00 00 00", + "timestamp": 33967.231817 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 33967.2401 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 33967.2401 + } + }, + "captured_at": "2026-08-01T16:58:52.253241Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:58:52.327216Z", + "duration_ms": 4815 + }, + { + "id": "MOTION-M0-75", + "group": "motion", + "utterance": "把副驾座椅水平位置调到75%", + "started_at": "2026-08-01T16:58:52.327271Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801165852-7a72ed", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 75, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 7515, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 6B 00 5B 1D 00", + "timestamp": 33975.674201 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 6A 00 00 00 00", + "timestamp": 33975.700112 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 6A 00 00 00 00", + "timestamp": 33975.725955 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 6A 00 00 00 00", + "timestamp": 33975.752099 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 33975.76113 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 33975.76113 + } + }, + "captured_at": "2026-08-01T16:59:00.774072Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:59:00.855639Z", + "duration_ms": 8528 + }, + { + "id": "MOTION-M0-HOME", + "group": "motion", + "utterance": "把副驾座椅水平位置归零", + "started_at": "2026-08-01T16:59:00.855696Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801165900-695164", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 6C 00 00 00 00", + "timestamp": 33989.886615 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6D 00 00 00 00", + "timestamp": 33989.91214 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 6C 00 00 00 00", + "timestamp": 33989.93873 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 6C 00 00 00 00", + "timestamp": 33989.964477 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 33989.971188 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 33989.971188 + } + }, + "captured_at": "2026-08-01T16:59:14.983746Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:59:15.056659Z", + "duration_ms": 14201 + }, + { + "id": "MOTION-M1-20", + "group": "motion", + "utterance": "把副驾坐盆调到20%", + "started_at": "2026-08-01T16:59:15.056795Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801165915-65fa18", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 20, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2032, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 6F 00 F0 07 00", + "timestamp": 33992.312514 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 6E 00 00 00 00", + "timestamp": 33992.338389 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 6E 00 00 00 00", + "timestamp": 33992.364609 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 6E 00 00 00 00", + "timestamp": 33992.390412 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 33992.399497 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 33992.399497 + } + }, + "captured_at": "2026-08-01T16:59:17.412102Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:59:17.488121Z", + "duration_ms": 2431 + }, + { + "id": "MOTION-M1-60", + "group": "motion", + "utterance": "把副驾坐盆调到60%", + "started_at": "2026-08-01T16:59:17.488175Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801165917-4b67f3", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 70 00 00 00 00", + "timestamp": 33996.428291 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 70 00 00 00 00", + "timestamp": 33996.454511 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 70 00 00 00 00", + "timestamp": 33996.48033 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 71 00 65 17 00", + "timestamp": 33996.506252 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 33996.515289 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 33996.515289 + } + }, + "captured_at": "2026-08-01T16:59:21.527765Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:59:21.606263Z", + "duration_ms": 4118 + }, + { + "id": "MOTION-M2-25", + "group": "motion", + "utterance": "把副驾靠背调到25%", + "started_at": "2026-08-01T16:59:21.606343Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801165921-6cee8c", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 72 00 65 17 00", + "timestamp": 34004.026783 + } + }, + "backrest_recline": { + "position_pct": 25, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 2497, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 73 00 C1 09 00", + "timestamp": 34004.053038 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 72 00 00 00 00", + "timestamp": 34004.078986 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 72 00 00 00 00", + "timestamp": 34004.104953 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34004.112858 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34004.112858 + } + }, + "captured_at": "2026-08-01T16:59:29.125201Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:59:29.251711Z", + "duration_ms": 7645 + }, + { + "id": "MOTION-M2-60", + "group": "motion", + "utterance": "把副驾靠背调到60%", + "started_at": "2026-08-01T16:59:29.251773Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801165929-d60acc", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 74 00 65 17 00", + "timestamp": 34014.312699 + } + }, + "backrest_recline": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 6009, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 75 00 79 17 00", + "timestamp": 34014.338618 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 74 00 00 00 00", + "timestamp": 34014.364946 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 74 00 00 00 00", + "timestamp": 34014.390835 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34014.398832 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34014.398832 + } + }, + "captured_at": "2026-08-01T16:59:39.410969Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:59:39.500273Z", + "duration_ms": 10249 + }, + { + "id": "MOTION-M2-HOME", + "group": "motion", + "utterance": "把副驾靠背归零", + "started_at": "2026-08-01T16:59:39.500353Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801165939-de4ed7", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 76 00 00 00 00", + "timestamp": 34032.801741 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 76 00 65 17 00", + "timestamp": 34032.827323 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 77 00 00 00 00", + "timestamp": 34032.853224 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 76 00 00 00 00", + "timestamp": 34032.878787 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34032.886576 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34032.886576 + } + }, + "captured_at": "2026-08-01T16:59:57.898342Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T16:59:57.974694Z", + "duration_ms": 18474 + }, + { + "id": "MOTION-M3-20", + "group": "motion", + "utterance": "把副驾腿托调到20%", + "started_at": "2026-08-01T16:59:57.974757Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801165957-b8e46e", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 78 00 00 00 00", + "timestamp": 34036.617557 + } + }, + "legrest_height": { + "position_pct": 20, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 2009, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 79 00 D9 07 00", + "timestamp": 34036.643471 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 78 00 00 00 00", + "timestamp": 34036.66978 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 78 00 65 17 00", + "timestamp": 34036.695668 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34036.703671 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34036.703671 + } + }, + "captured_at": "2026-08-01T17:00:01.715434Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:00:01.789672Z", + "duration_ms": 3815 + }, + { + "id": "MOTION-M3-60", + "group": "motion", + "utterance": "把副驾腿托调到60%", + "started_at": "2026-08-01T17:00:01.789728Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170001-97f1a0", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5997, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 7B 00 6D 17 00", + "timestamp": 34043.401583 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 7A 00 00 00 00", + "timestamp": 34043.42748 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 7A 00 65 17 00", + "timestamp": 34043.4538 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 7A 00 00 00 00", + "timestamp": 34043.479769 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34043.487672 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34043.487672 + } + }, + "captured_at": "2026-08-01T17:00:08.499203Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:00:08.578135Z", + "duration_ms": 6788 + }, + { + "id": "MOTION-M3-HOME", + "group": "motion", + "utterance": "把副驾腿托归零", + "started_at": "2026-08-01T17:00:08.578191Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170008-a6fdf0", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 7C 00 00 00 00", + "timestamp": 34053.589228 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 7D 00 00 00 00", + "timestamp": 34053.615932 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 18 7C 00 00 00 00", + "timestamp": 34053.641455 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 7C 00 65 17 00", + "timestamp": 34053.66742 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34053.675201 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34053.675201 + } + }, + "captured_at": "2026-08-01T17:00:18.686791Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:00:18.764322Z", + "duration_ms": 10186 + }, + { + "id": "MOTION-ALL-ZERO", + "group": "motion", + "utterance": "把副驾水平、坐盆、靠背、腿托四轴归零", + "started_at": "2026-08-01T17:00:18.764381Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170018-b875b8", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 82 00 00 00 00", + "timestamp": 34076.930018 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 7F 00 00 00 00", + "timestamp": 34076.956602 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 80 00 00 00 00", + "timestamp": 34076.982073 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 81 00 00 00 00", + "timestamp": 34077.007845 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34077.014556 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34077.014556 + } + }, + "captured_at": "2026-08-01T17:00:42.025520Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:00:42.095974Z", + "duration_ms": 23332 + }, + { + "id": "COMBINED-ALL", + "group": "combined", + "utterance": "打开副驾加热1档、打开通风1档,座椅水平到30%,坐盆到40%,靠背到37%,腿托到42%", + "started_at": "2026-08-01T17:00:42.096046Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170042-f4bb4d", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 40, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 4037, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 85 00 C5 0F 00", + "timestamp": 34112.200599 + } + }, + "backrest_recline": { + "position_pct": 37, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 3708, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 86 00 7C 0E 00", + "timestamp": 34112.226744 + } + }, + "legrest_height": { + "position_pct": 42, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 4219, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 87 00 7B 10 00", + "timestamp": 34112.252938 + } + }, + "longitudinal": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 3026, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 84 00 D2 0B 00", + "timestamp": 34112.279053 + } + } + }, + "ventilation": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "12 00 00 00 00 00 00 00", + "timestamp": 34112.290207 + } + }, + "heating": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "12 00 00 00 00 00 00 00", + "timestamp": 34112.290207 + } + }, + "captured_at": "2026-08-01T17:01:17.300394Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:01:17.373384Z", + "duration_ms": 35277 + }, + { + "id": "COMBINED-OFF", + "group": "combined", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T17:01:17.373456Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170117-e15325", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 3026, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 84 00 D2 0B 00", + "timestamp": 34113.027123 + } + }, + "cushion_tilt": { + "position_pct": 40, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 4037, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 85 00 C5 0F 00", + "timestamp": 34113.053216 + } + }, + "backrest_recline": { + "position_pct": 37, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 3708, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 86 00 7C 0E 00", + "timestamp": 34113.07923 + } + }, + "legrest_height": { + "position_pct": 42, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 4219, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 87 00 7B 10 00", + "timestamp": 34113.104607 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34113.114844 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34113.114844 + } + }, + "captured_at": "2026-08-01T17:01:18.125195Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:01:18.207309Z", + "duration_ms": 834 + }, + { + "id": "MODE-EASY-ENTRY", + "group": "mode", + "utterance": "副驾执行轻松进出模式", + "started_at": "2026-08-01T17:01:18.207374Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170118-aab686", + "matched_modes": [ + "easy_entry_exit" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 8B 00 00 00 00", + "timestamp": 34153.387936 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 8C 00 00 00 00", + "timestamp": 34153.413864 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 89 00 10 27 00", + "timestamp": 34153.440447 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 8A 00 00 00 00", + "timestamp": 34153.46603 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34153.472765 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34153.472765 + } + }, + "captured_at": "2026-08-01T17:01:58.482171Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:01:58.561830Z", + "duration_ms": 40354 + }, + { + "id": "MODE-OFFICE", + "group": "mode", + "utterance": "副驾执行办公模式", + "started_at": "2026-08-01T17:01:58.561907Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170158-3f6b61", + "matched_modes": [ + "office" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 21, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 2117, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 91 00 45 08 00", + "timestamp": 34175.930894 + } + }, + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 7194, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 8E 00 1A 1C 00", + "timestamp": 34175.957002 + } + }, + "cushion_tilt": { + "position_pct": 22, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2193, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 8F 00 91 08 00", + "timestamp": 34175.983003 + } + }, + "backrest_recline": { + "position_pct": 22, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 2214, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 90 00 A6 08 00", + "timestamp": 34176.008392 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34176.018637 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34176.018637 + } + }, + "captured_at": "2026-08-01T17:02:21.027767Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:02:21.097981Z", + "duration_ms": 22536 + }, + { + "id": "MODE-QUEEN", + "group": "mode", + "utterance": "副驾执行女王副驾行驶模式", + "started_at": "2026-08-01T17:02:21.098056Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170221-7fae50", + "matched_modes": [ + "queen_passenger_driving" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 38, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 3797, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 94 00 D5 0E 00", + "timestamp": 34191.653282 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4406, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 95 00 36 11 00", + "timestamp": 34191.67938 + } + }, + "legrest_height": { + "position_pct": 31, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 3122, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 96 00 32 0C 00", + "timestamp": 34191.705489 + } + }, + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 7194, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 93 00 1A 1C 00", + "timestamp": 34191.730767 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34191.739884 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34191.739884 + } + }, + "captured_at": "2026-08-01T17:02:36.748637Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:02:36.831176Z", + "duration_ms": 15733 + }, + { + "id": "MODE-BABY-NAP", + "group": "mode", + "utterance": "副驾执行宝宝午睡模式", + "started_at": "2026-08-01T17:02:36.831256Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170236-aa2721", + "matched_modes": [ + "baby_nap" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2995, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 99 00 B3 0B 00", + "timestamp": 34206.517144 + } + }, + "backrest_recline": { + "position_pct": 41, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4100, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 9A 00 04 10 00", + "timestamp": 34206.542843 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 9B 00 00 00 00", + "timestamp": 34206.569709 + } + }, + "longitudinal": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 8116, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 98 00 B4 1F 00", + "timestamp": 34206.595362 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34206.604399 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34206.604399 + } + }, + "captured_at": "2026-08-01T17:02:51.612769Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:02:51.743994Z", + "duration_ms": 14913 + }, + { + "id": "MODE-CRUISE-SOFA", + "group": "mode", + "utterance": "副驾执行巡航沙发模式", + "started_at": "2026-08-01T17:02:51.744083Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170251-25d77f", + "matched_modes": [ + "cruise_sofa" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4406, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 9F 00 36 11 00", + "timestamp": 34227.145285 + } + }, + "legrest_height": { + "position_pct": 53, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5301, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 A0 00 B5 14 00", + "timestamp": 34227.171387 + } + }, + "longitudinal": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 5090, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 9D 00 E2 13 00", + "timestamp": 34227.197402 + } + }, + "cushion_tilt": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2995, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 9E 00 B3 0B 00", + "timestamp": 34227.22392 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34227.233039 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34227.233039 + } + }, + "captured_at": "2026-08-01T17:03:12.241003Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:03:12.318444Z", + "duration_ms": 20574 + }, + { + "id": "MODE-MEDITATION", + "group": "mode", + "utterance": "副驾执行冥想空间模式", + "started_at": "2026-08-01T17:03:12.318525Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170312-ba626c", + "matched_modes": [ + "meditation_space" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 58, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5811, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 A5 00 B3 16 00", + "timestamp": 34243.42054 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 A2 00 10 27 00", + "timestamp": 34243.446644 + } + }, + "cushion_tilt": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 4412, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 A3 00 3C 11 00", + "timestamp": 34243.472751 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4362, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 A4 00 0A 11 00", + "timestamp": 34243.497686 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34243.507977 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34243.507977 + } + }, + "captured_at": "2026-08-01T17:03:28.515726Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:03:28.582661Z", + "duration_ms": 16264 + }, + { + "id": "MODE-LEISURE", + "group": "mode", + "utterance": "副驾执行休闲躺椅模式", + "started_at": "2026-08-01T17:03:28.582760Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170328-f317e6", + "matched_modes": [ + "leisure_lounger" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 66, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 6598, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 A9 00 C6 19 00", + "timestamp": 34268.270288 + } + }, + "legrest_height": { + "position_pct": 76, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 7604, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 AA 00 B4 1D 00", + "timestamp": 34268.296373 + } + }, + "longitudinal": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 5090, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 A7 00 E2 13 00", + "timestamp": 34268.322881 + } + }, + "cushion_tilt": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2995, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 A8 00 B3 0B 00", + "timestamp": 34268.34893 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34268.358089 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34268.358089 + } + }, + "captured_at": "2026-08-01T17:03:53.365347Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:03:53.443553Z", + "duration_ms": 24861 + }, + { + "id": "MODE-CALF", + "group": "mode", + "utterance": "副驾执行小腿解压悬浮模式", + "started_at": "2026-08-01T17:03:53.443639Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170353-4d3bf8", + "matched_modes": [ + "calf_decompression_float" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 28 AF 00 10 27 00", + "timestamp": 34301.047403 + } + }, + "longitudinal": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 5090, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 AC 00 E2 13 00", + "timestamp": 34301.073417 + } + }, + "cushion_tilt": { + "position_pct": 75, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 7513, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 AD 00 59 1D 00", + "timestamp": 34301.099444 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 AE 00 00 00 00", + "timestamp": 34301.12586 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34301.133794 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34301.133794 + } + }, + "captured_at": "2026-08-01T17:04:26.140417Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:04:26.230191Z", + "duration_ms": 32787 + }, + { + "id": "MODE-BEACH", + "group": "mode", + "utterance": "副驾执行电感沙滩椅模式", + "started_at": "2026-08-01T17:04:26.230297Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170426-2ff5a0", + "matched_modes": [ + "electric_beach_chair" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5981, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 B4 00 5D 17 00", + "timestamp": 34357.070462 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 B1 00 10 27 00", + "timestamp": 34357.096447 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 B2 00 00 00 00", + "timestamp": 34357.123929 + } + }, + "backrest_recline": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 28 B3 00 10 27 00", + "timestamp": 34357.1488 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34357.157893 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34357.157893 + } + }, + "captured_at": "2026-08-01T17:05:22.163410Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:05:22.240070Z", + "duration_ms": 56010 + }, + { + "id": "MODE-NAP", + "group": "mode", + "utterance": "副驾执行小憩模式", + "started_at": "2026-08-01T17:05:22.240143Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170522-c5e5c9", + "matched_modes": [ + "nap" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 B9 00 B5 24 00", + "timestamp": 34383.483608 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 B6 00 10 27 00", + "timestamp": 34383.509719 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 B7 00 10 27 00", + "timestamp": 34383.535157 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 B8 00 A7 1F 00", + "timestamp": 34383.56124 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34383.571535 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34383.571535 + } + }, + "captured_at": "2026-08-01T17:05:48.576482Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:05:48.690511Z", + "duration_ms": 26450 + }, + { + "id": "MODE-ZERO-GRAVITY", + "group": "mode", + "utterance": "副驾执行零重力模式", + "started_at": "2026-08-01T17:05:48.690603Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170548-adcb9c", + "matched_modes": [ + "zero_gravity" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 BE 00 B5 24 00", + "timestamp": 34390.339534 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 BB 00 10 27 00", + "timestamp": 34390.365679 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 BC 00 10 27 00", + "timestamp": 34390.391743 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 BD 00 A7 1F 00", + "timestamp": 34390.417918 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34390.427469 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34390.427469 + } + }, + "captured_at": "2026-08-01T17:05:55.432315Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:05:55.511441Z", + "duration_ms": 6821 + } + ], + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T17:05:55.511502Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801170555-fefff7", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 BD 00 A7 1F 00", + "timestamp": 34391.195927 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 BE 00 B5 24 00", + "timestamp": 34391.222014 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 BB 00 10 27 00", + "timestamp": 34391.247436 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 BC 00 10 27 00", + "timestamp": 34391.273537 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34391.282664 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 34391.282664 + } + }, + "captured_at": "2026-08-01T17:05:56.287538Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:05:56.356721Z", + "duration_ms": 845 + }, + "finished_at": "2026-08-01T17:05:56.356757Z", + "summary": { + "total": 33, + "passed": 33, + "failed": 0, + "safety_blocked": 0, + "executed": 33, + "final_state_passed": true + } +} \ No newline at end of file diff --git a/artifacts/hil/seat_frontend_hil_20260802_zero_gravity_timeout_fix.json b/artifacts/hil/seat_frontend_hil_20260802_zero_gravity_timeout_fix.json new file mode 100644 index 0000000..d73058f --- /dev/null +++ b/artifacts/hil/seat_frontend_hil_20260802_zero_gravity_timeout_fix.json @@ -0,0 +1,252 @@ +{ + "suite": "t2g-seat-frontend-full-hil", + "started_at": "2026-08-01T17:32:02.775803Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801173202", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "MODE-ZERO-GRAVITY", + "group": "mode", + "utterance": "打开零重力模式", + "started_at": "2026-08-01T17:32:02.775839Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801173202-68d1da", + "matched_modes": [ + "zero_gravity" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 2C 01 10 27 00", + "timestamp": 35964.438236 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 2D 01 A7 1F 00", + "timestamp": 35964.464297 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 2E 01 B5 24 00", + "timestamp": 35964.490843 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 2B 01 10 27 00", + "timestamp": 35964.51698 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 35964.526089 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 35964.526089 + } + }, + "captured_at": "2026-08-01T17:32:09.500643Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:32:09.582995Z", + "duration_ms": 6807 + } + ], + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T17:32:09.583051Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801173209-29898b", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 2B 01 10 27 00", + "timestamp": 35965.246437 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 2C 01 10 27 00", + "timestamp": 35965.27405 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 2D 01 A7 1F 00", + "timestamp": 35965.3002 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 2E 01 B5 24 00", + "timestamp": 35965.326337 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 35965.334306 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 35965.334306 + } + }, + "captured_at": "2026-08-01T17:32:10.308851Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T17:32:10.379863Z", + "duration_ms": 797 + }, + "finished_at": "2026-08-01T17:32:10.379894Z", + "summary": { + "total": 1, + "passed": 1, + "failed": 0, + "safety_blocked": 0, + "executed": 1, + "final_state_passed": true + } +} \ No newline at end of file diff --git a/artifacts/hil/seat_frontend_hil_cleanup.json b/artifacts/hil/seat_frontend_hil_cleanup.json new file mode 100644 index 0000000..0d1431f --- /dev/null +++ b/artifacts/hil/seat_frontend_hil_cleanup.json @@ -0,0 +1,250 @@ +{ + "suite": "t2g-seat-frontend-comprehensive-hil", + "started_at": "2026-08-01T18:19:38.370275Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801181938", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "MOTION-ALL-ZERO", + "group": "motion", + "utterance": "把副驾水平、坐盆、靠背、腿托四轴归零", + "started_at": "2026-08-01T18:19:38.370320Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181938-22b770", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 2A 01 00 00 00", + "timestamp": 38880.446998 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 2B 01 00 00 00", + "timestamp": 38880.472823 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 28 01 00 00 00", + "timestamp": 38880.498667 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 29 01 00 00 00", + "timestamp": 38880.524482 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38880.532693 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38880.532693 + } + }, + "captured_at": "2026-08-01T18:20:45.450814Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:20:45.533084Z", + "duration_ms": 67163 + } + ], + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风,并把水平、坐盆、靠背、腿托四轴归零", + "started_at": "2026-08-01T18:20:45.533139Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801182045-0ea6d9", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 30 01 00 00 00", + "timestamp": 38903.567521 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 2D 01 00 00 00", + "timestamp": 38903.593343 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 2E 01 00 00 00", + "timestamp": 38903.619184 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 2F 01 00 00 00", + "timestamp": 38903.646408 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38903.653213 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38903.653213 + } + }, + "captured_at": "2026-08-01T18:21:08.570962Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:21:08.651237Z", + "duration_ms": 23118 + }, + "finished_at": "2026-08-01T18:21:08.651275Z", + "summary": { + "total": 1, + "passed": 1, + "failed": 0, + "safety_blocked": 0, + "executed": 1, + "final_state_passed": true + } +} \ No newline at end of file diff --git a/artifacts/hil/seat_frontend_hil_latest.json b/artifacts/hil/seat_frontend_hil_latest.json new file mode 100644 index 0000000..33bf456 --- /dev/null +++ b/artifacts/hil/seat_frontend_hil_latest.json @@ -0,0 +1,14719 @@ +{ + "suite": "t2g-seat-frontend-comprehensive-hil", + "started_at": "2026-08-01T18:03:13.048608Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801180313", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "THERM-H-LOW-NUMERIC", + "group": "thermal", + "utterance": "副驾座椅加热开到1档", + "started_at": "2026-08-01T18:03:13.048648Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180313-2b8d9a", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37828.834093 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37828.86012 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37828.887604 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37828.913615 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "11 00 00 00 00 00 00 00", + "timestamp": 37828.921562 + } + }, + "heating": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "11 00 00 00 00 00 00 00", + "timestamp": 37828.921562 + } + }, + "captured_at": "2026-08-01T18:03:13.860092Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:13.946164Z", + "duration_ms": 898 + }, + { + "id": "THERM-H-LOW-CHINESE", + "group": "thermal", + "utterance": "把副驾驶座椅加热调到一档", + "started_at": "2026-08-01T18:03:13.946222Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180313-505b77", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37829.708145 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37829.734183 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37829.760186 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37829.787662 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "11 00 00 00 00 00 00 00", + "timestamp": 37829.794527 + } + }, + "heating": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "11 00 00 00 00 00 00 00", + "timestamp": 37829.794527 + } + }, + "captured_at": "2026-08-01T18:03:14.733052Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:14.812731Z", + "duration_ms": 867 + }, + { + "id": "THERM-H-LOW-WORD", + "group": "thermal", + "utterance": "副驾位座椅加热最低档", + "started_at": "2026-08-01T18:03:14.812785Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180314-9bc8e4", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37830.5784 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37830.603645 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37830.629649 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37830.655708 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "11 00 00 00 00 00 00 00", + "timestamp": 37830.667051 + } + }, + "heating": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "11 00 00 00 00 00 00 00", + "timestamp": 37830.667051 + } + }, + "captured_at": "2026-08-01T18:03:15.605651Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:15.691478Z", + "duration_ms": 879 + }, + { + "id": "THERM-H-LOW-DEFAULT", + "group": "thermal", + "utterance": "打开座椅加热", + "started_at": "2026-08-01T18:03:15.691537Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180315-4a8c7a", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37831.436545 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37831.462501 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37831.487734 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37831.513772 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "11 00 00 00 00 00 00 00", + "timestamp": 37831.522807 + } + }, + "heating": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "11 00 00 00 00 00 00 00", + "timestamp": 37831.522807 + } + }, + "captured_at": "2026-08-01T18:03:16.461147Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:16.540435Z", + "duration_ms": 849 + }, + { + "id": "THERM-H-MID-NUMERIC", + "group": "thermal", + "utterance": "副驾座椅加热开到2档", + "started_at": "2026-08-01T18:03:16.540493Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180316-85546f", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37832.339986 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37832.366003 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37832.392309 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37832.418356 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "19 00 00 00 00 00 00 00", + "timestamp": 37832.427447 + } + }, + "heating": { + "state": "on", + "level": 2, + "feedback_value": 3, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "19 00 00 00 00 00 00 00", + "timestamp": 37832.427447 + } + }, + "captured_at": "2026-08-01T18:03:17.365841Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:17.446957Z", + "duration_ms": 906 + }, + { + "id": "THERM-H-MID-CHINESE", + "group": "thermal", + "utterance": "乘客座加热调到二档", + "started_at": "2026-08-01T18:03:17.447010Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180317-dff074", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37833.229797 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37833.25589 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37833.281869 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37833.308211 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "19 00 00 00 00 00 00 00", + "timestamp": 37833.31732 + } + }, + "heating": { + "state": "on", + "level": 2, + "feedback_value": 3, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "19 00 00 00 00 00 00 00", + "timestamp": 37833.31732 + } + }, + "captured_at": "2026-08-01T18:03:18.255784Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:18.350416Z", + "duration_ms": 903 + }, + { + "id": "THERM-H-MID-WORD", + "group": "thermal", + "utterance": "座椅加热设置为中档", + "started_at": "2026-08-01T18:03:18.350473Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180318-7cb81c", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37834.13423 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37834.160245 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37834.187753 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37834.213764 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "19 00 00 00 00 00 00 00", + "timestamp": 37834.220583 + } + }, + "heating": { + "state": "on", + "level": 2, + "feedback_value": 3, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "19 00 00 00 00 00 00 00", + "timestamp": 37834.220583 + } + }, + "captured_at": "2026-08-01T18:03:19.159037Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:19.245051Z", + "duration_ms": 895 + }, + { + "id": "THERM-H-HIGH-NUMERIC", + "group": "thermal", + "utterance": "副驾座椅加热开到3档", + "started_at": "2026-08-01T18:03:19.245103Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180319-7ae585", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37835.022444 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37835.048503 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37835.074522 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37835.099752 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "21 00 00 00 00 00 00 00", + "timestamp": 37835.108837 + } + }, + "heating": { + "state": "on", + "level": 3, + "feedback_value": 4, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "21 00 00 00 00 00 00 00", + "timestamp": 37835.108837 + } + }, + "captured_at": "2026-08-01T18:03:20.047145Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:20.121928Z", + "duration_ms": 877 + }, + { + "id": "THERM-H-HIGH-PREFIX", + "group": "thermal", + "utterance": "右前座椅开启3档加热", + "started_at": "2026-08-01T18:03:20.121998Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180320-5cb10e", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37835.895724 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37835.92169 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37835.947789 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37835.97381 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "21 00 00 00 00 00 00 00", + "timestamp": 37835.982869 + } + }, + "heating": { + "state": "on", + "level": 3, + "feedback_value": 4, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "21 00 00 00 00 00 00 00", + "timestamp": 37835.982869 + } + }, + "captured_at": "2026-08-01T18:03:20.921249Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:20.984663Z", + "duration_ms": 863 + }, + { + "id": "THERM-H-HIGH-WORD", + "group": "thermal", + "utterance": "乘客座椅加热调到最高档", + "started_at": "2026-08-01T18:03:20.984717Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180320-25cb8e", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37836.724463 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37836.750502 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37836.776534 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37836.801737 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "21 00 00 00 00 00 00 00", + "timestamp": 37836.810848 + } + }, + "heating": { + "state": "on", + "level": 3, + "feedback_value": 4, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "21 00 00 00 00 00 00 00", + "timestamp": 37836.810848 + } + }, + "captured_at": "2026-08-01T18:03:21.749151Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:21.824666Z", + "duration_ms": 840 + }, + { + "id": "THERM-H-OFF-CLOSE", + "group": "thermal", + "utterance": "关闭副驾座椅加热", + "started_at": "2026-08-01T18:03:21.824729Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180321-9002c0", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37837.538673 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37837.564491 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37837.590622 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37837.616454 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37837.624371 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37837.624371 + } + }, + "captured_at": "2026-08-01T18:03:22.562696Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:22.641761Z", + "duration_ms": 817 + }, + { + "id": "THERM-H-OFF-DROP", + "group": "thermal", + "utterance": "关掉副驾驶座椅加热", + "started_at": "2026-08-01T18:03:22.641814Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180322-b20fa0", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37838.387227 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37838.411923 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37838.437784 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37838.464717 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37838.47259 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37838.47259 + } + }, + "captured_at": "2026-08-01T18:03:23.410906Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:23.492401Z", + "duration_ms": 851 + }, + { + "id": "THERM-H-OFF-STOP", + "group": "thermal", + "utterance": "停止乘客座加热", + "started_at": "2026-08-01T18:03:23.492460Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180323-5d384e", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37839.262241 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37839.28841 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37839.314256 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37839.340057 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37839.347992 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37839.347992 + } + }, + "captured_at": "2026-08-01T18:03:24.286187Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:24.360420Z", + "duration_ms": 868 + }, + { + "id": "THERM-H-OFF-DEFAULT", + "group": "thermal", + "utterance": "座椅加热关闭", + "started_at": "2026-08-01T18:03:24.360509Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180324-7114ae", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37840.092677 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37840.118541 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37840.144408 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37840.170192 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37840.178116 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37840.178116 + } + }, + "captured_at": "2026-08-01T18:03:25.116365Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:25.220394Z", + "duration_ms": 860 + }, + { + "id": "THERM-H-COMFORT-MILD", + "group": "thermal", + "utterance": "副驾驶有点冷", + "started_at": "2026-08-01T18:03:25.220457Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180325-8f3c3e", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37840.972664 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37840.99795 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37841.023959 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37841.049982 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "11 00 00 00 00 00 00 00", + "timestamp": 37841.059103 + } + }, + "heating": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "11 00 00 00 00 00 00 00", + "timestamp": 37841.059103 + } + }, + "captured_at": "2026-08-01T18:03:25.997430Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:26.077380Z", + "duration_ms": 857 + }, + { + "id": "THERM-H-COMFORT-STRONG", + "group": "thermal", + "utterance": "右前座椅太冷了", + "started_at": "2026-08-01T18:03:26.077439Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180326-b2b293", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37841.860666 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37841.888168 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37841.914195 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37841.940208 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "21 00 00 00 00 00 00 00", + "timestamp": 37841.947077 + } + }, + "heating": { + "state": "on", + "level": 3, + "feedback_value": 4, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "21 00 00 00 00 00 00 00", + "timestamp": 37841.947077 + } + }, + "captured_at": "2026-08-01T18:03:26.885294Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:27.051907Z", + "duration_ms": 974 + }, + { + "id": "THERM-H-COMFORT-OFF", + "group": "thermal", + "utterance": "把右前座加热关掉", + "started_at": "2026-08-01T18:03:27.051969Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180327-057d60", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37842.881896 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37842.908047 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37842.933819 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37842.960826 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37842.968745 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37842.968745 + } + }, + "captured_at": "2026-08-01T18:03:27.906885Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:27.983173Z", + "duration_ms": 931 + }, + { + "id": "THERM-V-LOW-NUMERIC", + "group": "thermal", + "utterance": "副驾座椅通风开到1档", + "started_at": "2026-08-01T18:03:27.983230Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180327-3aee9e", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37843.727974 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37843.754982 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37843.780757 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37843.805835 + } + } + }, + "ventilation": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0A 00 00 00 00 00 00 00", + "timestamp": 37843.813706 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0A 00 00 00 00 00 00 00", + "timestamp": 37843.813706 + } + }, + "captured_at": "2026-08-01T18:03:28.751916Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:28.838585Z", + "duration_ms": 855 + }, + { + "id": "THERM-V-LOW-CHINESE", + "group": "thermal", + "utterance": "副驾驶座椅通风调到一档", + "started_at": "2026-08-01T18:03:28.838639Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180328-907ab8", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37844.570358 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37844.596513 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37844.622315 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37844.64819 + } + } + }, + "ventilation": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0A 00 00 00 00 00 00 00", + "timestamp": 37844.658347 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0A 00 00 00 00 00 00 00", + "timestamp": 37844.658347 + } + }, + "captured_at": "2026-08-01T18:03:29.596471Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:29.672129Z", + "duration_ms": 833 + }, + { + "id": "THERM-V-LOW-WORD", + "group": "thermal", + "utterance": "乘客座通风最低档", + "started_at": "2026-08-01T18:03:29.672187Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180329-ce2cf9", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37845.400132 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37845.425956 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37845.452885 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37845.47874 + } + } + }, + "ventilation": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0A 00 00 00 00 00 00 00", + "timestamp": 37845.48744 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0A 00 00 00 00 00 00 00", + "timestamp": 37845.48744 + } + }, + "captured_at": "2026-08-01T18:03:30.425548Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:30.501809Z", + "duration_ms": 830 + }, + { + "id": "THERM-V-MID-NUMERIC", + "group": "thermal", + "utterance": "副驾座椅通风开到2档", + "started_at": "2026-08-01T18:03:30.501870Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180330-40fff8", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37846.248807 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37846.274654 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37846.300766 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37846.326609 + } + } + }, + "ventilation": { + "state": "on", + "level": 2, + "feedback_value": 3, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0B 00 00 00 00 00 00 00", + "timestamp": 37846.334532 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0B 00 00 00 00 00 00 00", + "timestamp": 37846.334532 + } + }, + "captured_at": "2026-08-01T18:03:31.272615Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:31.351788Z", + "duration_ms": 850 + }, + { + "id": "THERM-V-MID-PREFIX", + "group": "thermal", + "utterance": "右前座椅开启2档通风", + "started_at": "2026-08-01T18:03:31.351849Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180331-6f1aed", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37847.078576 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37847.104739 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37847.130537 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37847.156414 + } + } + }, + "ventilation": { + "state": "on", + "level": 2, + "feedback_value": 3, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0B 00 00 00 00 00 00 00", + "timestamp": 37847.164335 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0B 00 00 00 00 00 00 00", + "timestamp": 37847.164335 + } + }, + "captured_at": "2026-08-01T18:03:32.102539Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:32.189612Z", + "duration_ms": 838 + }, + { + "id": "THERM-V-MID-WORD", + "group": "thermal", + "utterance": "打开座椅通风中档", + "started_at": "2026-08-01T18:03:32.189666Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180332-cad393", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37847.908492 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37847.934346 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37847.960157 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37847.987439 + } + } + }, + "ventilation": { + "state": "on", + "level": 2, + "feedback_value": 3, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0B 00 00 00 00 00 00 00", + "timestamp": 37847.99537 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0B 00 00 00 00 00 00 00", + "timestamp": 37847.99537 + } + }, + "captured_at": "2026-08-01T18:03:32.933421Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:33.021186Z", + "duration_ms": 832 + }, + { + "id": "THERM-V-HIGH-NUMERIC", + "group": "thermal", + "utterance": "副驾座椅通风开到3档", + "started_at": "2026-08-01T18:03:33.021243Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180333-00596c", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37848.738213 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37848.764072 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37848.790206 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37848.816051 + } + } + }, + "ventilation": { + "state": "on", + "level": 3, + "feedback_value": 4, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0C 00 00 00 00 00 00 00", + "timestamp": 37848.825092 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0C 00 00 00 00 00 00 00", + "timestamp": 37848.825092 + } + }, + "captured_at": "2026-08-01T18:03:33.763230Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:33.868681Z", + "duration_ms": 847 + }, + { + "id": "THERM-V-HIGH-CHINESE", + "group": "thermal", + "utterance": "乘客座椅通风调到三档", + "started_at": "2026-08-01T18:03:33.868742Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180333-76af9f", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37849.600149 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37849.625992 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37849.65292 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37849.678757 + } + } + }, + "ventilation": { + "state": "on", + "level": 3, + "feedback_value": 4, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0C 00 00 00 00 00 00 00", + "timestamp": 37849.687472 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0C 00 00 00 00 00 00 00", + "timestamp": 37849.687472 + } + }, + "captured_at": "2026-08-01T18:03:34.625470Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:34.772675Z", + "duration_ms": 904 + }, + { + "id": "THERM-V-HIGH-WORD", + "group": "thermal", + "utterance": "右前座通风最高档", + "started_at": "2026-08-01T18:03:34.772756Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180334-13f47e", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37850.524465 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37850.550287 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37850.576138 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37850.602276 + } + } + }, + "ventilation": { + "state": "on", + "level": 3, + "feedback_value": 4, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0C 00 00 00 00 00 00 00", + "timestamp": 37850.611305 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0C 00 00 00 00 00 00 00", + "timestamp": 37850.611305 + } + }, + "captured_at": "2026-08-01T18:03:35.549455Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:35.623077Z", + "duration_ms": 850 + }, + { + "id": "THERM-V-OFF-CLOSE", + "group": "thermal", + "utterance": "关闭副驾座椅通风", + "started_at": "2026-08-01T18:03:35.623136Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180335-94ce44", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37851.412383 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37851.438254 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37851.464063 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37851.490233 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37851.49926 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37851.49926 + } + }, + "captured_at": "2026-08-01T18:03:36.437277Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:36.581634Z", + "duration_ms": 959 + }, + { + "id": "THERM-V-OFF-DROP", + "group": "thermal", + "utterance": "关掉副驾驶座椅通风", + "started_at": "2026-08-01T18:03:36.581706Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180336-4cefe1", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37852.322237 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37852.348107 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37852.37507 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37852.400091 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37852.40802 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37852.40802 + } + }, + "captured_at": "2026-08-01T18:03:37.346107Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:37.429462Z", + "duration_ms": 848 + }, + { + "id": "THERM-V-OFF-STOP", + "group": "thermal", + "utterance": "停止右前座通风", + "started_at": "2026-08-01T18:03:37.429518Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180337-fc248f", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37853.218726 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37853.244589 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37853.270358 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37853.296516 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37853.305549 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37853.305549 + } + }, + "captured_at": "2026-08-01T18:03:38.243640Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:38.319330Z", + "duration_ms": 890 + }, + { + "id": "THERM-V-COMFORT-MILD", + "group": "thermal", + "utterance": "副驾驶有点热", + "started_at": "2026-08-01T18:03:38.319387Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180338-940fbc", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37854.03214 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37854.059153 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37854.084969 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37854.111084 + } + } + }, + "ventilation": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0A 00 00 00 00 00 00 00", + "timestamp": 37854.117897 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0A 00 00 00 00 00 00 00", + "timestamp": 37854.117897 + } + }, + "captured_at": "2026-08-01T18:03:39.055915Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:39.133791Z", + "duration_ms": 814 + }, + { + "id": "THERM-V-COMFORT-STRONG", + "group": "thermal", + "utterance": "右前座椅太闷了", + "started_at": "2026-08-01T18:03:39.133851Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180339-f61d79", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37854.865125 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37854.890144 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37854.917119 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37854.942931 + } + } + }, + "ventilation": { + "state": "on", + "level": 3, + "feedback_value": 4, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0C 00 00 00 00 00 00 00", + "timestamp": 37854.950866 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0C 00 00 00 00 00 00 00", + "timestamp": 37854.950866 + } + }, + "captured_at": "2026-08-01T18:03:39.888924Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:39.966631Z", + "duration_ms": 833 + }, + { + "id": "THERM-V-COMFORT-OFF", + "group": "thermal", + "utterance": "把乘客座通风关掉", + "started_at": "2026-08-01T18:03:39.966694Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180339-9561d2", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37855.710285 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37855.736113 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37855.763032 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37855.789224 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37855.797123 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37855.797123 + } + }, + "captured_at": "2026-08-01T18:03:40.735033Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:40.816905Z", + "duration_ms": 850 + }, + { + "id": "THERM-MIXED-COMFORT", + "group": "thermal", + "utterance": "副驾驶有点冷又有点闷", + "started_at": "2026-08-01T18:03:40.816964Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180340-7ba27d", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37856.606998 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37856.632996 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37856.659067 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37856.685132 + } + } + }, + "ventilation": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "12 00 00 00 00 00 00 00", + "timestamp": 37856.693417 + } + }, + "heating": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "12 00 00 00 00 00 00 00", + "timestamp": 37856.693417 + } + }, + "captured_at": "2026-08-01T18:03:41.631658Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:41.712736Z", + "duration_ms": 896 + }, + { + "id": "THERM-MIXED-OFF", + "group": "thermal", + "utterance": "关闭右前座的加热和通风", + "started_at": "2026-08-01T18:03:41.712799Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180341-8b02bd", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37857.444344 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37857.471241 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37857.496305 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37857.523184 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37857.531109 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37857.531109 + } + }, + "captured_at": "2026-08-01T18:03:42.469069Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:42.547355Z", + "duration_ms": 835 + }, + { + "id": "THERM-AIRFLOW-SETUP", + "group": "thermal", + "utterance": "右前座通风调到2档", + "started_at": "2026-08-01T18:03:42.547416Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180342-ae3fff", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37858.288978 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37858.314807 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37858.340638 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37858.366494 + } + } + }, + "ventilation": { + "state": "on", + "level": 2, + "feedback_value": 3, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0B 00 00 00 00 00 00 00", + "timestamp": 37858.376641 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0B 00 00 00 00 00 00 00", + "timestamp": 37858.376641 + } + }, + "captured_at": "2026-08-01T18:03:43.314519Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:43.397779Z", + "duration_ms": 850 + }, + { + "id": "THERM-AIRFLOW-COLD", + "group": "thermal", + "utterance": "副驾被风吹得有点冷", + "started_at": "2026-08-01T18:03:43.397838Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180343-b09247", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37859.179208 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37859.204209 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37859.231177 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37859.257038 + } + } + }, + "ventilation": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0A 00 00 00 00 00 00 00", + "timestamp": 37859.264975 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "0A 00 00 00 00 00 00 00", + "timestamp": 37859.264975 + } + }, + "captured_at": "2026-08-01T18:03:44.202835Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:44.278739Z", + "duration_ms": 881 + }, + { + "id": "THERM-AIRFLOW-OFF", + "group": "thermal", + "utterance": "关闭座椅通风", + "started_at": "2026-08-01T18:03:44.278843Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180344-73102d", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6F 01 00 00 00", + "timestamp": 37860.00863 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 6C 01 00 00 00", + "timestamp": 37860.034486 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6D 01 00 00 00", + "timestamp": 37860.060297 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6E 01 00 00 00", + "timestamp": 37860.088677 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37860.095488 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37860.095488 + } + }, + "captured_at": "2026-08-01T18:03:45.033348Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:45.115687Z", + "duration_ms": 837 + }, + { + "id": "MOTION-M0-25-HORIZONTAL", + "group": "motion", + "utterance": "把副驾座椅水平位置调到25%", + "started_at": "2026-08-01T18:03:45.115747Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180345-cc4b46", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 01 00 00 00 00", + "timestamp": 37864.853077 + } + }, + "longitudinal": { + "position_pct": 25, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 2525, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 02 00 DD 09 00", + "timestamp": 37864.879373 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 01 00 00 00 00", + "timestamp": 37864.90494 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 01 00 00 00 00", + "timestamp": 37864.931231 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37864.941604 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37864.941604 + } + }, + "captured_at": "2026-08-01T18:03:49.879404Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:49.965027Z", + "duration_ms": 4849 + }, + { + "id": "MOTION-M0-25-FRONTBACK", + "group": "motion", + "utterance": "副驾驶座椅前后位置设置为25%", + "started_at": "2026-08-01T18:03:49.965091Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180349-41abed", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 25, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 2505, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 04 00 C9 09 00", + "timestamp": 37865.704375 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 03 00 00 00 00", + "timestamp": 37865.730693 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 03 00 00 00 00", + "timestamp": 37865.75705 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 03 00 00 00 00", + "timestamp": 37865.783293 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37865.792841 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37865.792841 + } + }, + "captured_at": "2026-08-01T18:03:50.730555Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:50.818450Z", + "duration_ms": 853 + }, + { + "id": "MOTION-M0-25-RAIL", + "group": "motion", + "utterance": "右前座滑轨移到25%", + "started_at": "2026-08-01T18:03:50.818512Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180350-477236", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 25, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 2505, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 06 00 C9 09 00", + "timestamp": 37866.552797 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 05 00 00 00 00", + "timestamp": 37866.579091 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 05 00 00 00 00", + "timestamp": 37866.604638 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 05 00 00 00 00", + "timestamp": 37866.63091 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37866.640111 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37866.640111 + } + }, + "captured_at": "2026-08-01T18:03:51.577859Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:03:51.655568Z", + "duration_ms": 837 + }, + { + "id": "MOTION-M0-75-HORIZONTAL", + "group": "motion", + "utterance": "副驾座椅水平位置调到75%", + "started_at": "2026-08-01T18:03:51.655652Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180351-ca1a0b", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 07 00 00 00 00", + "timestamp": 37875.195518 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 07 00 00 00 00", + "timestamp": 37875.220666 + } + }, + "longitudinal": { + "position_pct": 75, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 7515, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 08 00 5B 1D 00", + "timestamp": 37875.247013 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 07 00 00 00 00", + "timestamp": 37875.2733 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37875.283627 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37875.283627 + } + }, + "captured_at": "2026-08-01T18:04:00.221136Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:04:00.289344Z", + "duration_ms": 8634 + }, + { + "id": "MOTION-M0-75-LONGITUDINAL", + "group": "motion", + "utterance": "乘客座纵向移动至75%", + "started_at": "2026-08-01T18:04:00.289403Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180400-107ad4", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 75, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 7495, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 0A 00 47 1D 00", + "timestamp": 37876.049065 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 09 00 00 00 00", + "timestamp": 37876.075382 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 09 00 00 00 00", + "timestamp": 37876.100882 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 09 00 00 00 00", + "timestamp": 37876.127237 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37876.136436 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37876.136436 + } + }, + "captured_at": "2026-08-01T18:04:01.074088Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:04:01.225142Z", + "duration_ms": 936 + }, + { + "id": "MOTION-M0-75-RAIL", + "group": "motion", + "utterance": "把副驾驶滑轨设为75%", + "started_at": "2026-08-01T18:04:01.225211Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180401-eccf96", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 75, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 7495, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 0C 00 47 1D 00", + "timestamp": 37876.975129 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 0B 00 00 00 00", + "timestamp": 37877.00067 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 0B 00 00 00 00", + "timestamp": 37877.026988 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 0B 00 00 00 00", + "timestamp": 37877.053315 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37877.063648 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37877.063648 + } + }, + "captured_at": "2026-08-01T18:04:02.001258Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:04:02.082996Z", + "duration_ms": 858 + }, + { + "id": "MOTION-M0-50-CN-PERCENT", + "group": "motion", + "utterance": "座椅前后移动到百分之五十", + "started_at": "2026-08-01T18:04:02.083063Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180402-441a04", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 0D 00 00 00 00", + "timestamp": 37882.083092 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 0D 00 00 00 00", + "timestamp": 37882.109749 + } + }, + "longitudinal": { + "position_pct": 50, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 5010, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 0E 00 92 13 00", + "timestamp": 37882.134933 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 0D 00 00 00 00", + "timestamp": 37882.161296 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37882.171639 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37882.171639 + } + }, + "captured_at": "2026-08-01T18:04:07.109245Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:04:07.186826Z", + "duration_ms": 5104 + }, + { + "id": "MOTION-M0-50-FULLWIDTH", + "group": "motion", + "utterance": "右前座水平位置调到50%", + "started_at": "2026-08-01T18:04:07.186898Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180407-d9445d", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 0F 00 00 00 00", + "timestamp": 37882.930836 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 0F 00 00 00 00", + "timestamp": 37882.957198 + } + }, + "longitudinal": { + "position_pct": 50, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 5010, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 10 00 92 13 00", + "timestamp": 37882.983451 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 0F 00 00 00 00", + "timestamp": 37883.009002 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37883.019341 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37883.019341 + } + }, + "captured_at": "2026-08-01T18:04:07.956849Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:04:08.035631Z", + "duration_ms": 849 + }, + { + "id": "MOTION-M0-FRONTMOST", + "group": "motion", + "utterance": "把副驾座椅推到最前面", + "started_at": "2026-08-01T18:04:08.035695Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180408-a16ba3", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 11 00 00 00 00", + "timestamp": 37892.917144 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 12 00 00 00 00", + "timestamp": 37892.942967 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 11 00 00 00 00", + "timestamp": 37892.969913 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 11 00 00 00 00", + "timestamp": 37892.994986 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37893.004009 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37893.004009 + } + }, + "captured_at": "2026-08-01T18:04:17.941375Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:04:18.018815Z", + "duration_ms": 9983 + }, + { + "id": "MOTION-M0-HOME", + "group": "motion", + "utterance": "副驾驶座椅前后复位", + "started_at": "2026-08-01T18:04:18.018909Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180418-5206ef", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 13 00 00 00 00", + "timestamp": 37897.179487 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 14 00 00 00 00", + "timestamp": 37897.205619 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 13 00 00 00 00", + "timestamp": 37897.231444 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 13 00 00 00 00", + "timestamp": 37897.257322 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37897.265187 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37897.265187 + } + }, + "captured_at": "2026-08-01T18:04:22.202332Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:04:22.278460Z", + "duration_ms": 4260 + }, + { + "id": "MOTION-M0-ZERO", + "group": "motion", + "utterance": "右前座滑轨归零", + "started_at": "2026-08-01T18:04:22.278530Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180422-9ccbf0", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 15 00 00 00 00", + "timestamp": 37901.501948 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 15 00 00 00 00", + "timestamp": 37901.528127 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 15 00 00 00 00", + "timestamp": 37901.553965 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 16 00 00 00 00", + "timestamp": 37901.579768 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37901.588807 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37901.588807 + } + }, + "captured_at": "2026-08-01T18:04:26.525856Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:04:26.614196Z", + "duration_ms": 4336 + }, + { + "id": "MOTION-M0-REARMOST", + "group": "motion", + "utterance": "副驾驶座椅移动到最后面", + "started_at": "2026-08-01T18:04:26.614273Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180426-b1fe92", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 18 00 10 27 00", + "timestamp": 37918.049929 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 17 00 00 00 00", + "timestamp": 37918.076228 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 17 00 00 00 00", + "timestamp": 37918.10253 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 17 00 00 00 00", + "timestamp": 37918.128057 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37918.137218 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37918.137218 + } + }, + "captured_at": "2026-08-01T18:04:43.073943Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:04:43.149781Z", + "duration_ms": 16536 + }, + { + "id": "MOTION-M0-BACK-END", + "group": "motion", + "utterance": "把右前座滑轨向后移到底", + "started_at": "2026-08-01T18:04:43.149862Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180443-f49646", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 1A 00 10 27 00", + "timestamp": 37918.865692 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 19 00 00 00 00", + "timestamp": 37918.892018 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 19 00 00 00 00", + "timestamp": 37918.918691 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 19 00 00 00 00", + "timestamp": 37918.943849 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37918.95419 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37918.95419 + } + }, + "captured_at": "2026-08-01T18:04:43.891080Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:04:43.970091Z", + "duration_ms": 820 + }, + { + "id": "MOTION-M1-20-PAN", + "group": "motion", + "utterance": "把副驾坐盆调到20%", + "started_at": "2026-08-01T18:04:43.970155Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180443-2259d4", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 1B 00 00 00 00", + "timestamp": 37921.366316 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 1B 00 10 27 00", + "timestamp": 37921.392712 + } + }, + "cushion_tilt": { + "position_pct": 20, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2005, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 1C 00 D5 07 00", + "timestamp": 37921.418383 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 1B 00 00 00 00", + "timestamp": 37921.444721 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37921.455101 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37921.455101 + } + }, + "captured_at": "2026-08-01T18:04:46.391972Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:04:46.475218Z", + "duration_ms": 2505 + }, + { + "id": "MOTION-M1-20-CUSHION", + "group": "motion", + "utterance": "副驾驶坐垫位置设置为20%", + "started_at": "2026-08-01T18:04:46.475280Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180446-1dc0b0", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 1D 00 00 00 00", + "timestamp": 37922.245667 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 1D 00 10 27 00", + "timestamp": 37922.27211 + } + }, + "cushion_tilt": { + "position_pct": 20, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2005, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 1E 00 D5 07 00", + "timestamp": 37922.298572 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 1D 00 00 00 00", + "timestamp": 37922.324211 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37922.334588 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37922.334588 + } + }, + "captured_at": "2026-08-01T18:04:47.271188Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:04:47.355194Z", + "duration_ms": 880 + }, + { + "id": "MOTION-M1-60-PAN", + "group": "motion", + "utterance": "副驾坐盆调到60%", + "started_at": "2026-08-01T18:04:47.355263Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180447-8aa2f6", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 20 00 65 17 00", + "timestamp": 37926.388749 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 1F 00 00 00 00", + "timestamp": 37926.4144 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 1F 00 00 00 00", + "timestamp": 37926.440808 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 1F 00 10 27 00", + "timestamp": 37926.466101 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37926.477602 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37926.477602 + } + }, + "captured_at": "2026-08-01T18:04:51.414231Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:04:51.499968Z", + "duration_ms": 4145 + }, + { + "id": "MOTION-M1-60-TILT", + "group": "motion", + "utterance": "右前座坐垫倾角调到60%", + "started_at": "2026-08-01T18:04:51.500031Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180451-4a28a5", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 21 00 00 00 00", + "timestamp": 37927.254126 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 21 00 00 00 00", + "timestamp": 37927.280567 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 21 00 10 27 00", + "timestamp": 37927.305833 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 22 00 65 17 00", + "timestamp": 37927.332664 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37927.343049 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37927.343049 + } + }, + "captured_at": "2026-08-01T18:04:52.279720Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:04:52.402784Z", + "duration_ms": 903 + }, + { + "id": "MOTION-M1-50-CN-PERCENT", + "group": "motion", + "utterance": "乘客座坐盆调到百分之五十", + "started_at": "2026-08-01T18:04:52.402836Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180452-58470b", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 23 00 10 27 00", + "timestamp": 37928.948815 + } + }, + "cushion_tilt": { + "position_pct": 50, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 5000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 24 00 88 13 00", + "timestamp": 37928.974118 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 23 00 00 00 00", + "timestamp": 37929.00053 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 23 00 00 00 00", + "timestamp": 37929.026161 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37929.037662 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37929.037662 + } + }, + "captured_at": "2026-08-01T18:04:53.974340Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:04:54.049144Z", + "duration_ms": 1646 + }, + { + "id": "MOTION-M1-50-FULLWIDTH", + "group": "motion", + "utterance": "副驾驶坐垫设置为50%", + "started_at": "2026-08-01T18:04:54.049224Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180454-5ab231", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 50, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 5000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 26 00 88 13 00", + "timestamp": 37929.799906 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 25 00 00 00 00", + "timestamp": 37929.826666 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 25 00 00 00 00", + "timestamp": 37929.851953 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 25 00 10 27 00", + "timestamp": 37929.878443 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37929.888818 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37929.888818 + } + }, + "captured_at": "2026-08-01T18:04:54.825375Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:04:54.909425Z", + "duration_ms": 860 + }, + { + "id": "MOTION-M1-HOME", + "group": "motion", + "utterance": "副驾坐盆归零", + "started_at": "2026-08-01T18:04:54.909507Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180454-c91376", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 27 00 00 00 00", + "timestamp": 37935.596315 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 27 00 00 00 00", + "timestamp": 37935.622596 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 27 00 10 27 00", + "timestamp": 37935.64846 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 28 00 00 00 00", + "timestamp": 37935.674405 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37935.683454 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37935.683454 + } + }, + "captured_at": "2026-08-01T18:05:00.620046Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:05:00.701569Z", + "duration_ms": 5792 + }, + { + "id": "MOTION-M1-RESET", + "group": "motion", + "utterance": "右前座坐垫复位", + "started_at": "2026-08-01T18:05:00.701639Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180500-9d301d", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 29 00 10 27 00", + "timestamp": 37939.958788 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 2A 00 00 00 00", + "timestamp": 37939.984757 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 29 00 00 00 00", + "timestamp": 37940.010621 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 29 00 00 00 00", + "timestamp": 37940.036898 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37940.044853 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37940.044853 + } + }, + "captured_at": "2026-08-01T18:05:04.981277Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:05:05.063572Z", + "duration_ms": 4362 + }, + { + "id": "MOTION-M2-25-BACKREST", + "group": "motion", + "utterance": "副驾靠背调到25%", + "started_at": "2026-08-01T18:05:05.063636Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180505-6b3538", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 25, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 2497, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 2C 00 C1 09 00", + "timestamp": 37947.856329 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 2B 00 00 00 00", + "timestamp": 37947.882736 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 2B 00 10 27 00", + "timestamp": 37947.909165 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 2B 00 00 00 00", + "timestamp": 37947.934757 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37947.945124 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37947.945124 + } + }, + "captured_at": "2026-08-01T18:05:12.881401Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:05:12.988923Z", + "duration_ms": 7925 + }, + { + "id": "MOTION-M2-25-SEATBACK", + "group": "motion", + "utterance": "副驾驶椅背设置为25%", + "started_at": "2026-08-01T18:05:12.989000Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180512-2d4df3", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 2D 00 00 00 00", + "timestamp": 37948.738587 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 2D 00 10 27 00", + "timestamp": 37948.764938 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 2D 00 00 00 00", + "timestamp": 37948.791351 + } + }, + "backrest_recline": { + "position_pct": 25, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 2497, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 2E 00 C1 09 00", + "timestamp": 37948.816557 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37948.827298 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37948.827298 + } + }, + "captured_at": "2026-08-01T18:05:13.763518Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:05:13.843061Z", + "duration_ms": 854 + }, + { + "id": "MOTION-M2-60-BACKREST", + "group": "motion", + "utterance": "把副驾靠背调到60%", + "started_at": "2026-08-01T18:05:13.843126Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180513-dfe328", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 2F 00 00 00 00", + "timestamp": 37959.003066 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 2F 00 10 27 00", + "timestamp": 37959.028708 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 2F 00 00 00 00", + "timestamp": 37959.055099 + } + }, + "backrest_recline": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 6009, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 30 00 79 17 00", + "timestamp": 37959.081521 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37959.093024 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37959.093024 + } + }, + "captured_at": "2026-08-01T18:05:24.028947Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:05:24.107319Z", + "duration_ms": 10264 + }, + { + "id": "MOTION-M2-60-SEATBACK", + "group": "motion", + "utterance": "右前座椅背调至60%", + "started_at": "2026-08-01T18:05:24.107382Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180524-7cabf8", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 31 00 00 00 00", + "timestamp": 37959.89543 + } + }, + "backrest_recline": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 5965, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 32 00 4D 17 00", + "timestamp": 37959.921076 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 31 00 00 00 00", + "timestamp": 37959.947441 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 31 00 10 27 00", + "timestamp": 37959.972727 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37959.984238 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37959.984238 + } + }, + "captured_at": "2026-08-01T18:05:24.920200Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:05:24.987852Z", + "duration_ms": 880 + }, + { + "id": "MOTION-M2-ANGLE-130", + "group": "motion", + "utterance": "副驾靠背角度调到130度", + "started_at": "2026-08-01T18:05:24.987924Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180524-63dbe0", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 33 00 10 27 00", + "timestamp": 37962.997503 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 33 00 00 00 00", + "timestamp": 37963.023155 + } + }, + "backrest_recline": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 5104, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 34 00 F0 13 00", + "timestamp": 37963.049562 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 33 00 00 00 00", + "timestamp": 37963.074793 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37963.086302 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37963.086302 + } + }, + "captured_at": "2026-08-01T18:05:28.022157Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:05:28.095432Z", + "duration_ms": 3108 + }, + { + "id": "MOTION-M2-ANGLE-130-SEATBACK", + "group": "motion", + "utterance": "把副驾驶椅背设为130°", + "started_at": "2026-08-01T18:05:28.095512Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180528-3c9c1f", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 35 00 10 27 00", + "timestamp": 37963.860794 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 35 00 00 00 00", + "timestamp": 37963.887178 + } + }, + "backrest_recline": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 5104, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 36 00 F0 13 00", + "timestamp": 37963.913589 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 35 00 00 00 00", + "timestamp": 37963.939229 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37963.950732 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37963.950732 + } + }, + "captured_at": "2026-08-01T18:05:28.886688Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:05:29.046678Z", + "duration_ms": 951 + }, + { + "id": "MOTION-M2-ANGLE-130-RIGHT", + "group": "motion", + "utterance": "右前座靠背夹角调至130度", + "started_at": "2026-08-01T18:05:29.046751Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180529-fa7cdd", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 37 00 00 00 00", + "timestamp": 37964.771709 + } + }, + "backrest_recline": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 5104, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 38 00 F0 13 00", + "timestamp": 37964.796932 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 37 00 00 00 00", + "timestamp": 37964.823712 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 37 00 10 27 00", + "timestamp": 37964.848981 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37964.860486 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37964.860486 + } + }, + "captured_at": "2026-08-01T18:05:29.796401Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:05:29.872595Z", + "duration_ms": 826 + }, + { + "id": "MOTION-M2-ANGLE-150", + "group": "motion", + "utterance": "副驾靠背放倒到150度", + "started_at": "2026-08-01T18:05:29.872661Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180529-90be94", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 39 00 00 00 00", + "timestamp": 37973.553784 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 3A 00 A7 1F 00", + "timestamp": 37973.579063 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 39 00 00 00 00", + "timestamp": 37973.605431 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 39 00 10 27 00", + "timestamp": 37973.63107 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37973.641447 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37973.641447 + } + }, + "captured_at": "2026-08-01T18:05:38.577064Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:05:38.651106Z", + "duration_ms": 8778 + }, + { + "id": "MOTION-M2-ANGLE-150-SEATBACK", + "group": "motion", + "utterance": "乘客座椅背调到150°", + "started_at": "2026-08-01T18:05:38.651170Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180538-a9c08b", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 3B 00 00 00 00", + "timestamp": 37974.417945 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 3C 00 A7 1F 00", + "timestamp": 37974.443562 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 3B 00 00 00 00", + "timestamp": 37974.470009 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 3B 00 10 27 00", + "timestamp": 37974.495235 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37974.505598 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37974.505598 + } + }, + "captured_at": "2026-08-01T18:05:39.441371Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:05:39.520969Z", + "duration_ms": 870 + }, + { + "id": "MOTION-M2-UPRIGHT", + "group": "motion", + "utterance": "把副驾靠背调直", + "started_at": "2026-08-01T18:05:39.521036Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180539-0d9284", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 3D 00 10 27 00", + "timestamp": 37997.830419 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 3D 00 00 00 00", + "timestamp": 37997.856322 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 3E 00 00 00 00", + "timestamp": 37997.882269 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 3D 00 00 00 00", + "timestamp": 37997.908155 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37997.918322 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 37997.918322 + } + }, + "captured_at": "2026-08-01T18:06:02.853517Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:06:02.916502Z", + "duration_ms": 23395 + }, + { + "id": "MOTION-M2-HOME", + "group": "motion", + "utterance": "副驾驶椅背归零", + "started_at": "2026-08-01T18:06:02.916592Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180602-5be924", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 40 00 00 00 00", + "timestamp": 38000.530131 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 3F 00 00 00 00", + "timestamp": 38000.55643 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 3F 00 10 27 00", + "timestamp": 38000.58161 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 3F 00 00 00 00", + "timestamp": 38000.607915 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38000.618238 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38000.618238 + } + }, + "captured_at": "2026-08-01T18:06:05.553473Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:06:05.615340Z", + "duration_ms": 2699 + }, + { + "id": "MOTION-M2-RESET", + "group": "motion", + "utterance": "右前座靠背复位", + "started_at": "2026-08-01T18:06:05.615412Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180605-7575dd", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 41 00 00 00 00", + "timestamp": 38003.202263 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 42 00 00 00 00", + "timestamp": 38003.227783 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 41 00 00 00 00", + "timestamp": 38003.254116 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 41 00 10 27 00", + "timestamp": 38003.280461 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38003.291924 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38003.291924 + } + }, + "captured_at": "2026-08-01T18:06:08.227109Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:06:08.297881Z", + "duration_ms": 2682 + }, + { + "id": "MOTION-M3-20-LEGREST", + "group": "motion", + "utterance": "副驾腿托调到20%", + "started_at": "2026-08-01T18:06:08.297970Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180608-c6f4e5", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 43 00 00 00 00", + "timestamp": 38007.394022 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 43 00 00 00 00", + "timestamp": 38007.420333 + } + }, + "legrest_height": { + "position_pct": 20, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 2009, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 44 00 D9 07 00", + "timestamp": 38007.445974 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 43 00 10 27 00", + "timestamp": 38007.472314 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38007.482725 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38007.482725 + } + }, + "captured_at": "2026-08-01T18:06:12.417816Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:06:12.571667Z", + "duration_ms": 4274 + }, + { + "id": "MOTION-M3-20-FOOTREST", + "group": "motion", + "utterance": "副驾驶脚托设置为20%", + "started_at": "2026-08-01T18:06:12.571735Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180612-8be469", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 20, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 1978, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 46 00 BA 07 00", + "timestamp": 38008.352337 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 45 00 10 27 00", + "timestamp": 38008.37876 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 45 00 00 00 00", + "timestamp": 38008.404029 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 45 00 00 00 00", + "timestamp": 38008.430755 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38008.439992 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38008.439992 + } + }, + "captured_at": "2026-08-01T18:06:13.375007Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:06:13.460207Z", + "duration_ms": 888 + }, + { + "id": "MOTION-M3-60-LEGREST", + "group": "motion", + "utterance": "把副驾腿托调到60%", + "started_at": "2026-08-01T18:06:13.460272Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180613-bc95d6", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 47 00 10 27 00", + "timestamp": 38015.188189 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 47 00 00 00 00", + "timestamp": 38015.214573 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 47 00 00 00 00", + "timestamp": 38015.240168 + } + }, + "legrest_height": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5997, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 48 00 6D 17 00", + "timestamp": 38015.266542 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38015.276963 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38015.276963 + } + }, + "captured_at": "2026-08-01T18:06:20.211836Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:06:20.296417Z", + "duration_ms": 6836 + }, + { + "id": "MOTION-M3-60-SUPPORT", + "group": "motion", + "utterance": "右前座腿部支撑调至60%", + "started_at": "2026-08-01T18:06:20.296485Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180620-700c2a", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 49 00 00 00 00", + "timestamp": 38016.054804 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 49 00 00 00 00", + "timestamp": 38016.080032 + } + }, + "legrest_height": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5997, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 4A 00 6D 17 00", + "timestamp": 38016.106437 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 49 00 10 27 00", + "timestamp": 38016.132043 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38016.14241 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38016.14241 + } + }, + "captured_at": "2026-08-01T18:06:21.077331Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:06:21.157352Z", + "duration_ms": 861 + }, + { + "id": "MOTION-M3-ANGLE-145", + "group": "motion", + "utterance": "副驾腿托抬到145度", + "started_at": "2026-08-01T18:06:21.157422Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180621-49eb2f", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 4B 00 10 27 00", + "timestamp": 38018.252291 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 4B 00 00 00 00", + "timestamp": 38018.278748 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 4B 00 00 00 00", + "timestamp": 38018.304021 + } + }, + "legrest_height": { + "position_pct": 69, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 6893, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 4C 00 ED 1A 00", + "timestamp": 38018.330733 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38018.33884 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38018.33884 + } + }, + "captured_at": "2026-08-01T18:06:23.273585Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:06:23.345084Z", + "duration_ms": 2188 + }, + { + "id": "MOTION-M3-ANGLE-145-FOOTREST", + "group": "motion", + "utterance": "把副驾驶脚托设为145°", + "started_at": "2026-08-01T18:06:23.345147Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180623-1cd72b", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 4D 00 00 00 00", + "timestamp": 38019.120312 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 4D 00 00 00 00", + "timestamp": 38019.145968 + } + }, + "legrest_height": { + "position_pct": 69, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 6893, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 4E 00 ED 1A 00", + "timestamp": 38019.172279 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 4D 00 10 27 00", + "timestamp": 38019.198723 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38019.207976 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38019.207976 + } + }, + "captured_at": "2026-08-01T18:06:24.142908Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:06:24.229370Z", + "duration_ms": 884 + }, + { + "id": "MOTION-M3-ANGLE-160", + "group": "motion", + "utterance": "右前座小腿托调到160度", + "started_at": "2026-08-01T18:06:24.229438Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180624-16c48e", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 90, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 8995, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 50 00 23 23 00", + "timestamp": 38023.226448 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 4F 00 10 27 00", + "timestamp": 38023.252801 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 4F 00 00 00 00", + "timestamp": 38023.278113 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 4F 00 00 00 00", + "timestamp": 38023.304488 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38023.312541 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38023.312541 + } + }, + "captured_at": "2026-08-01T18:06:28.247255Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:06:28.326020Z", + "duration_ms": 4097 + }, + { + "id": "MOTION-M3-ANGLE-160-SUPPORT", + "group": "motion", + "utterance": "乘客座腿部支撑夹角设为160°", + "started_at": "2026-08-01T18:06:28.326090Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180628-eeb32d", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 51 00 10 27 00", + "timestamp": 38024.090455 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 51 00 00 00 00", + "timestamp": 38024.116835 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 51 00 00 00 00", + "timestamp": 38024.142414 + } + }, + "legrest_height": { + "position_pct": 90, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 8995, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 52 00 23 23 00", + "timestamp": 38024.168782 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38024.178075 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38024.178075 + } + }, + "captured_at": "2026-08-01T18:06:29.112844Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:06:29.193744Z", + "duration_ms": 868 + }, + { + "id": "MOTION-M3-RETRACT", + "group": "motion", + "utterance": "把副驾腿托收起", + "started_at": "2026-08-01T18:06:29.193811Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180629-bb59b4", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 54 00 00 00 00", + "timestamp": 38038.449265 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 53 00 10 27 00", + "timestamp": 38038.475128 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 53 00 00 00 00", + "timestamp": 38038.501073 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 53 00 00 00 00", + "timestamp": 38038.528473 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38038.537544 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38038.537544 + } + }, + "captured_at": "2026-08-01T18:06:43.472023Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:06:43.547554Z", + "duration_ms": 14354 + }, + { + "id": "MOTION-M3-HOME", + "group": "motion", + "utterance": "副驾驶脚托归零", + "started_at": "2026-08-01T18:06:43.547633Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180643-719f51", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 55 00 00 00 00", + "timestamp": 38044.804866 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 56 00 00 00 00", + "timestamp": 38044.830781 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 55 00 10 27 00", + "timestamp": 38044.857001 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 55 00 00 00 00", + "timestamp": 38044.882952 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38044.892007 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38044.892007 + } + }, + "captured_at": "2026-08-01T18:06:49.826400Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:06:49.909806Z", + "duration_ms": 6362 + }, + { + "id": "MOTION-M3-RESET", + "group": "motion", + "utterance": "右前座腿部支撑复位", + "started_at": "2026-08-01T18:06:49.909870Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180649-ffdb1a", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 57 00 10 27 00", + "timestamp": 38051.126951 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 57 00 00 00 00", + "timestamp": 38051.153243 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 57 00 00 00 00", + "timestamp": 38051.179104 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 58 00 00 00 00", + "timestamp": 38051.205048 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38051.214105 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38051.214105 + } + }, + "captured_at": "2026-08-01T18:06:56.148301Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:06:56.236987Z", + "duration_ms": 6327 + }, + { + "id": "MOTION-ALL-40", + "group": "motion", + "utterance": "副驾驶水平、坐垫、椅背、脚托都调到40%", + "started_at": "2026-08-01T18:06:56.237057Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180656-add72d", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 40, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 4008, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 5A 00 A8 0F 00", + "timestamp": 38088.69165 + } + }, + "cushion_tilt": { + "position_pct": 40, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 4037, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 5B 00 C5 0F 00", + "timestamp": 38088.71818 + } + }, + "backrest_recline": { + "position_pct": 40, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4002, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 5C 00 A2 0F 00", + "timestamp": 38088.744015 + } + }, + "legrest_height": { + "position_pct": 40, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 4003, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 5D 00 A3 0F 00", + "timestamp": 38088.770493 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38088.78326 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38088.78326 + } + }, + "captured_at": "2026-08-01T18:07:33.716856Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:07:33.790019Z", + "duration_ms": 37553 + }, + { + "id": "MOTION-ALL-40-FULLWIDTH", + "group": "motion", + "utterance": "右前座前后、坐盆、靠背、腿托全部设置为40%", + "started_at": "2026-08-01T18:07:33.790098Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180733-bad3f3", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 40, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 4008, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 5F 00 A8 0F 00", + "timestamp": 38095.595699 + } + }, + "cushion_tilt": { + "position_pct": 40, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 3984, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 60 00 90 0F 00", + "timestamp": 38095.622241 + } + }, + "backrest_recline": { + "position_pct": 40, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4002, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 61 00 A2 0F 00", + "timestamp": 38095.648008 + } + }, + "legrest_height": { + "position_pct": 40, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 4003, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 62 00 A3 0F 00", + "timestamp": 38095.67453 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38095.684963 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38095.684963 + } + }, + "captured_at": "2026-08-01T18:07:40.618595Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:07:40.704221Z", + "duration_ms": 6914 + }, + { + "id": "MOTION-ALL-ZERO", + "group": "motion", + "utterance": "把副驾水平、坐盆、靠背、腿托四轴归零", + "started_at": "2026-08-01T18:07:40.704296Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180740-96ab15", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 65 00 00 00 00", + "timestamp": 38132.810737 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 66 00 00 00 00", + "timestamp": 38132.836546 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 67 00 00 00 00", + "timestamp": 38132.862698 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 64 00 00 00 00", + "timestamp": 38132.889597 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38132.896374 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38132.896374 + } + }, + "captured_at": "2026-08-01T18:08:17.828941Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:08:17.914905Z", + "duration_ms": 37211 + }, + { + "id": "MOTION-ALL-RESET", + "group": "motion", + "utterance": "右前座椅四轴全部复位", + "started_at": "2026-08-01T18:08:17.914977Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180817-319234", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 6A 00 00 00 00", + "timestamp": 38153.909876 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 6B 00 00 00 00", + "timestamp": 38153.935727 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 6C 00 00 00 00", + "timestamp": 38153.961563 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 69 00 00 00 00", + "timestamp": 38153.987678 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38153.995599 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38153.995599 + } + }, + "captured_at": "2026-08-01T18:08:38.927854Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:08:39.002141Z", + "duration_ms": 21087 + }, + { + "id": "COMBINED-ALL", + "group": "combined", + "utterance": "打开副驾加热1档、通风1档,座椅水平到30%,坐盆到40%,靠背到37%,腿托到42%", + "started_at": "2026-08-01T18:08:39.002216Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180839-6720d4", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 42, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 4204, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 71 00 6C 10 00", + "timestamp": 38189.512293 + } + }, + "longitudinal": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 3026, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 6E 00 D2 0B 00", + "timestamp": 38189.537884 + } + }, + "cushion_tilt": { + "position_pct": 40, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 4037, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 6F 00 C5 0F 00", + "timestamp": 38189.56465 + } + }, + "backrest_recline": { + "position_pct": 37, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 3708, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 70 00 7C 0E 00", + "timestamp": 38189.590639 + } + } + }, + "ventilation": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "12 00 00 00 00 00 00 00", + "timestamp": 38189.602358 + } + }, + "heating": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "12 00 00 00 00 00 00 00", + "timestamp": 38189.602358 + } + }, + "captured_at": "2026-08-01T18:09:14.533883Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:09:14.607994Z", + "duration_ms": 35606 + }, + { + "id": "COMBINED-ALL-OFF", + "group": "combined", + "utterance": "关闭副驾驶座椅加热和通风", + "started_at": "2026-08-01T18:09:14.608074Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180914-a17099", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 37, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 3708, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 70 00 7C 0E 00", + "timestamp": 38190.320446 + } + }, + "legrest_height": { + "position_pct": 42, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 4204, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 71 00 6C 10 00", + "timestamp": 38190.345919 + } + }, + "longitudinal": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 3026, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 6E 00 D2 0B 00", + "timestamp": 38190.372459 + } + }, + "cushion_tilt": { + "position_pct": 40, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 4037, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 6F 00 C5 0F 00", + "timestamp": 38190.398252 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38190.409831 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38190.409831 + } + }, + "captured_at": "2026-08-01T18:09:15.341456Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:09:15.427885Z", + "duration_ms": 820 + }, + { + "id": "COMBINED-HEAT-MOTION", + "group": "combined", + "utterance": "副驾驶加热调到二档,前后位置50%,椅背130度", + "started_at": "2026-08-01T18:09:15.428049Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180915-6c05e5", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 42, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 4204, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 08 72 00 6C 10 00", + "timestamp": 38204.222318 + } + }, + "longitudinal": { + "position_pct": 50, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 5030, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 73 00 A6 13 00", + "timestamp": 38204.249083 + } + }, + "cushion_tilt": { + "position_pct": 40, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 4037, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 72 00 C5 0F 00", + "timestamp": 38204.274691 + } + }, + "backrest_recline": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 5104, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 74 00 F0 13 00", + "timestamp": 38204.300736 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "19 00 00 00 00 00 00 00", + "timestamp": 38204.312411 + } + }, + "heating": { + "state": "on", + "level": 2, + "feedback_value": 3, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "19 00 00 00 00 00 00 00", + "timestamp": 38204.312411 + } + }, + "captured_at": "2026-08-01T18:09:29.243623Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:09:29.328495Z", + "duration_ms": 13900 + }, + { + "id": "COMBINED-VENT-MOTION", + "group": "combined", + "utterance": "右前座通风最高档 坐垫40% 脚托145度", + "started_at": "2026-08-01T18:09:29.328587Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180929-68fd5a", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 50, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 5030, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 08 75 00 A6 13 00", + "timestamp": 38215.127446 + } + }, + "cushion_tilt": { + "position_pct": 40, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 4011, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 76 00 AB 0F 00", + "timestamp": 38215.153063 + } + }, + "backrest_recline": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 5104, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 08 75 00 F0 13 00", + "timestamp": 38215.178677 + } + }, + "legrest_height": { + "position_pct": 69, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 6893, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 77 00 ED 1A 00", + "timestamp": 38215.204676 + } + } + }, + "ventilation": { + "state": "on", + "level": 3, + "feedback_value": 4, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "1C 00 00 00 00 00 00 00", + "timestamp": 38215.217581 + } + }, + "heating": { + "state": "on", + "level": 2, + "feedback_value": 3, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "1C 00 00 00 00 00 00 00", + "timestamp": 38215.217581 + } + }, + "captured_at": "2026-08-01T18:09:40.148694Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:09:40.226503Z", + "duration_ms": 10898 + }, + { + "id": "COMBINED-FULLWIDTH", + "group": "combined", + "utterance": "乘客座加热1档,通风2档,前后30%,坐盆40%,靠背130度,腿托145度", + "started_at": "2026-08-01T18:09:40.226579Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180940-96263c", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 5104, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 7B 00 F0 13 00", + "timestamp": 38229.431026 + } + }, + "legrest_height": { + "position_pct": 69, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 6893, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 7C 00 ED 1A 00", + "timestamp": 38229.457852 + } + }, + "longitudinal": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 3006, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 79 00 BE 0B 00", + "timestamp": 38229.483457 + } + }, + "cushion_tilt": { + "position_pct": 40, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 4011, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 7A 00 AB 0F 00", + "timestamp": 38229.509456 + } + } + }, + "ventilation": { + "state": "on", + "level": 2, + "feedback_value": 3, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "13 00 00 00 00 00 00 00", + "timestamp": 38229.523492 + } + }, + "heating": { + "state": "on", + "level": 1, + "feedback_value": 2, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "13 00 00 00 00 00 00 00", + "timestamp": 38229.523492 + } + }, + "captured_at": "2026-08-01T18:09:54.454304Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:09:54.537912Z", + "duration_ms": 14311 + }, + { + "id": "COMBINED-CLEANUP", + "group": "combined", + "utterance": "关闭右前座加热和通风,并把水平、坐盆、靠背、腿托四轴归零", + "started_at": "2026-08-01T18:09:54.537992Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801180954-e31e25", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 81 00 00 00 00", + "timestamp": 38273.786201 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 7E 00 00 00 00", + "timestamp": 38273.81237 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 7F 00 00 00 00", + "timestamp": 38273.838158 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 80 00 00 00 00", + "timestamp": 38273.864019 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38273.873046 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38273.873046 + } + }, + "captured_at": "2026-08-01T18:10:38.803073Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:10:38.876331Z", + "duration_ms": 44338 + }, + { + "id": "MODE-EASY-OPEN", + "group": "mode", + "utterance": "打开轻松进出模式", + "started_at": "2026-08-01T18:10:38.876415Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181038-3dec8e", + "matched_modes": [ + "easy_entry_exit" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 84 00 00 00 00", + "timestamp": 38307.372758 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 85 00 00 00 00", + "timestamp": 38307.398664 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 86 00 00 00 00", + "timestamp": 38307.424913 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 83 00 10 27 00", + "timestamp": 38307.450839 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38307.459898 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38307.459898 + } + }, + "captured_at": "2026-08-01T18:11:12.389125Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:11:12.473873Z", + "duration_ms": 33597 + }, + { + "id": "MODE-EASY-ENTER", + "group": "mode", + "utterance": "副驾进入轻松进出", + "started_at": "2026-08-01T18:11:12.473971Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181112-7d1cc6", + "matched_modes": [ + "easy_entry_exit" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 8B 00 00 00 00", + "timestamp": 38324.997754 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 88 00 10 27 00", + "timestamp": 38325.023677 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 89 00 00 00 00", + "timestamp": 38325.049885 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 8A 00 00 00 00", + "timestamp": 38325.075796 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38325.084857 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38325.084857 + } + }, + "captured_at": "2026-08-01T18:11:30.013794Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:11:30.096933Z", + "duration_ms": 17623 + }, + { + "id": "MODE-EASY-SWITCH", + "group": "mode", + "utterance": "切换到轻松进出模式", + "started_at": "2026-08-01T18:11:30.097015Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181130-8a0027", + "matched_modes": [ + "easy_entry_exit" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 8D 00 10 27 00", + "timestamp": 38342.690272 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 8E 00 00 00 00", + "timestamp": 38342.716256 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 8F 00 00 00 00", + "timestamp": 38342.742171 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 90 00 00 00 00", + "timestamp": 38342.768383 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38342.776326 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38342.776326 + } + }, + "captured_at": "2026-08-01T18:11:47.704886Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:11:47.788817Z", + "duration_ms": 17692 + }, + { + "id": "MODE-OFFICE-OPEN", + "group": "mode", + "utterance": "打开办公模式", + "started_at": "2026-08-01T18:11:47.788893Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181147-e6a8fa", + "matched_modes": [ + "office" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 7194, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 92 00 1A 1C 00", + "timestamp": 38365.194062 + } + }, + "cushion_tilt": { + "position_pct": 22, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2193, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 93 00 91 08 00", + "timestamp": 38365.220652 + } + }, + "backrest_recline": { + "position_pct": 22, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 2214, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 94 00 A6 08 00", + "timestamp": 38365.246015 + } + }, + "legrest_height": { + "position_pct": 21, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 2117, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 95 00 45 08 00", + "timestamp": 38365.272997 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38365.285718 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38365.285718 + } + }, + "captured_at": "2026-08-01T18:12:10.213843Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:12:10.298709Z", + "duration_ms": 22510 + }, + { + "id": "MODE-OFFICE-ENTER", + "group": "mode", + "utterance": "副驾进入办公", + "started_at": "2026-08-01T18:12:10.298810Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181210-958feb", + "matched_modes": [ + "office" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 7194, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 97 00 1A 1C 00", + "timestamp": 38372.131005 + } + }, + "cushion_tilt": { + "position_pct": 22, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2193, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 98 00 91 08 00", + "timestamp": 38372.156809 + } + }, + "backrest_recline": { + "position_pct": 22, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 2170, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 99 00 7A 08 00", + "timestamp": 38372.18221 + } + }, + "legrest_height": { + "position_pct": 21, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 2087, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 9A 00 27 08 00", + "timestamp": 38372.208737 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38372.220348 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38372.220348 + } + }, + "captured_at": "2026-08-01T18:12:17.148425Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:12:17.234231Z", + "duration_ms": 6935 + }, + { + "id": "MODE-OFFICE-START", + "group": "mode", + "utterance": "启动办公模式", + "started_at": "2026-08-01T18:12:17.234340Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181217-183858", + "matched_modes": [ + "office" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 7194, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 9C 00 1A 1C 00", + "timestamp": 38379.048366 + } + }, + "cushion_tilt": { + "position_pct": 22, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2193, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 9D 00 91 08 00", + "timestamp": 38379.075335 + } + }, + "backrest_recline": { + "position_pct": 22, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 2214, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 9E 00 A6 08 00", + "timestamp": 38379.100735 + } + }, + "legrest_height": { + "position_pct": 21, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 2117, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 9F 00 45 08 00", + "timestamp": 38379.127296 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38379.137731 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38379.137731 + } + }, + "captured_at": "2026-08-01T18:12:24.065539Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:12:24.147258Z", + "duration_ms": 6913 + }, + { + "id": "MODE-QUEEN-OPEN", + "group": "mode", + "utterance": "打开女王副驾模式", + "started_at": "2026-08-01T18:12:24.147348Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181224-e70c5e", + "matched_modes": [ + "queen_passenger_driving" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 7194, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 A1 00 1A 1C 00", + "timestamp": 38394.804912 + } + }, + "cushion_tilt": { + "position_pct": 38, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 3797, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 A2 00 D5 0E 00", + "timestamp": 38394.831477 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4406, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 A3 00 36 11 00", + "timestamp": 38394.857295 + } + }, + "legrest_height": { + "position_pct": 31, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 3122, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 A4 00 32 0C 00", + "timestamp": 38394.882706 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38394.894265 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38394.894265 + } + }, + "captured_at": "2026-08-01T18:12:39.822024Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:12:39.896662Z", + "duration_ms": 15749 + }, + { + "id": "MODE-QUEEN-ENTER", + "group": "mode", + "utterance": "进入女王副驾", + "started_at": "2026-08-01T18:12:39.896743Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181239-b27f32", + "matched_modes": [ + "queen_passenger_driving" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 7194, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 A6 00 1A 1C 00", + "timestamp": 38401.705554 + } + }, + "cushion_tilt": { + "position_pct": 38, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 3797, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 A7 00 D5 0E 00", + "timestamp": 38401.730998 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4362, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 A8 00 0A 11 00", + "timestamp": 38401.756793 + } + }, + "legrest_height": { + "position_pct": 31, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 3091, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 A9 00 13 0C 00", + "timestamp": 38401.783364 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38401.794948 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38401.794948 + } + }, + "captured_at": "2026-08-01T18:12:46.722449Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:12:46.795259Z", + "duration_ms": 6899 + }, + { + "id": "MODE-QUEEN-SWITCH", + "group": "mode", + "utterance": "切换到女王副驾行驶模式", + "started_at": "2026-08-01T18:12:46.795364Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181246-f88881", + "matched_modes": [ + "queen_passenger_driving" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 72, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 7194, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 AB 00 1A 1C 00", + "timestamp": 38408.595777 + } + }, + "cushion_tilt": { + "position_pct": 38, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 3797, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 AC 00 D5 0E 00", + "timestamp": 38408.621225 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4406, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 AD 00 36 11 00", + "timestamp": 38408.647744 + } + }, + "legrest_height": { + "position_pct": 31, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 3122, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 AE 00 32 0C 00", + "timestamp": 38408.673576 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38408.685143 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38408.685143 + } + }, + "captured_at": "2026-08-01T18:12:53.612508Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:12:53.698241Z", + "duration_ms": 6903 + }, + { + "id": "MODE-BABY-OPEN", + "group": "mode", + "utterance": "打开宝宝午睡模式", + "started_at": "2026-08-01T18:12:53.698334Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181253-d4a65f", + "matched_modes": [ + "baby_nap" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 41, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4100, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 B2 00 04 10 00", + "timestamp": 38423.77842 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 B3 00 00 00 00", + "timestamp": 38423.803319 + } + }, + "longitudinal": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 8116, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 B0 00 B4 1F 00", + "timestamp": 38423.829447 + } + }, + "cushion_tilt": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2995, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 B1 00 B3 0B 00", + "timestamp": 38423.855902 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38423.865071 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38423.865071 + } + }, + "captured_at": "2026-08-01T18:13:08.792098Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:13:08.866007Z", + "duration_ms": 15168 + }, + { + "id": "MODE-BABY-ENTER", + "group": "mode", + "utterance": "副驾进入宝宝午睡", + "started_at": "2026-08-01T18:13:08.866098Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181308-b5d52b", + "matched_modes": [ + "baby_nap" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2995, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 B6 00 B3 0B 00", + "timestamp": 38436.188692 + } + }, + "backrest_recline": { + "position_pct": 41, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4100, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 B7 00 04 10 00", + "timestamp": 38436.214766 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 B8 00 00 00 00", + "timestamp": 38436.239729 + } + }, + "longitudinal": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 8096, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 B5 00 A0 1F 00", + "timestamp": 38436.266207 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38436.275334 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38436.275334 + } + }, + "captured_at": "2026-08-01T18:13:21.202058Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:13:21.284419Z", + "duration_ms": 12418 + }, + { + "id": "MODE-BABY-START", + "group": "mode", + "utterance": "启动宝宝午睡模式", + "started_at": "2026-08-01T18:13:21.284532Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181321-0cdaf5", + "matched_modes": [ + "baby_nap" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 BD 00 00 00 00", + "timestamp": 38448.572582 + } + }, + "longitudinal": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 8096, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 BA 00 A0 1F 00", + "timestamp": 38448.598618 + } + }, + "cushion_tilt": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2995, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 BB 00 B3 0B 00", + "timestamp": 38448.624757 + } + }, + "backrest_recline": { + "position_pct": 41, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4100, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 BC 00 04 10 00", + "timestamp": 38448.650846 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38448.658805 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38448.658805 + } + }, + "captured_at": "2026-08-01T18:13:33.585363Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:13:33.652301Z", + "duration_ms": 12368 + }, + { + "id": "MODE-CRUISE-OPEN", + "group": "mode", + "utterance": "打开巡航沙发模式", + "started_at": "2026-08-01T18:13:33.652389Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181333-8d38fe", + "matched_modes": [ + "cruise_sofa" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2995, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 C0 00 B3 0B 00", + "timestamp": 38469.037312 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4395, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 C1 00 2B 11 00", + "timestamp": 38469.062685 + } + }, + "legrest_height": { + "position_pct": 53, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5301, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 C2 00 B5 14 00", + "timestamp": 38469.088557 + } + }, + "longitudinal": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 5090, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 BF 00 E2 13 00", + "timestamp": 38469.115072 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38469.126745 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38469.126745 + } + }, + "captured_at": "2026-08-01T18:13:54.052799Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:13:54.130112Z", + "duration_ms": 20478 + }, + { + "id": "MODE-CRUISE-ENTER", + "group": "mode", + "utterance": "进入巡航沙发", + "started_at": "2026-08-01T18:13:54.130184Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181354-902294", + "matched_modes": [ + "cruise_sofa" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2995, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 C5 00 B3 0B 00", + "timestamp": 38475.945397 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4395, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 C6 00 2B 11 00", + "timestamp": 38475.971225 + } + }, + "legrest_height": { + "position_pct": 53, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5301, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 C7 00 B5 14 00", + "timestamp": 38475.996646 + } + }, + "longitudinal": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 5090, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 C4 00 E2 13 00", + "timestamp": 38476.023208 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38476.033685 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38476.033685 + } + }, + "captured_at": "2026-08-01T18:14:00.959659Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:14:01.043950Z", + "duration_ms": 6914 + }, + { + "id": "MODE-CRUISE-SWITCH", + "group": "mode", + "utterance": "切换到巡航沙发模式", + "started_at": "2026-08-01T18:14:01.044028Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181401-404910", + "matched_modes": [ + "cruise_sofa" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2995, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 CA 00 B3 0B 00", + "timestamp": 38482.844825 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4395, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 CB 00 2B 11 00", + "timestamp": 38482.871766 + } + }, + "legrest_height": { + "position_pct": 53, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5301, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 CC 00 B5 14 00", + "timestamp": 38482.897237 + } + }, + "longitudinal": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 5090, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 C9 00 E2 13 00", + "timestamp": 38482.923759 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38482.935382 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38482.935382 + } + }, + "captured_at": "2026-08-01T18:14:07.861296Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:14:07.936489Z", + "duration_ms": 6892 + }, + { + "id": "MODE-MEDITATION-OPEN", + "group": "mode", + "utterance": "打开冥想空间模式", + "started_at": "2026-08-01T18:14:07.936571Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181407-2ca448", + "matched_modes": [ + "meditation_space" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 58, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5811, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 D1 00 B3 16 00", + "timestamp": 38499.219369 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 CE 00 10 27 00", + "timestamp": 38499.24592 + } + }, + "cushion_tilt": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 4412, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 CF 00 3C 11 00", + "timestamp": 38499.27174 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4395, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 D0 00 2B 11 00", + "timestamp": 38499.297183 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38499.308806 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38499.308806 + } + }, + "captured_at": "2026-08-01T18:14:24.234341Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:14:24.317611Z", + "duration_ms": 16381 + }, + { + "id": "MODE-MEDITATION-ENTER", + "group": "mode", + "utterance": "副驾进入冥想", + "started_at": "2026-08-01T18:14:24.317716Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181424-326ee6", + "matched_modes": [ + "meditation_space" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 58, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5781, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 D6 00 95 16 00", + "timestamp": 38506.16153 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 D3 00 10 27 00", + "timestamp": 38506.18743 + } + }, + "cushion_tilt": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 4412, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 D4 00 3C 11 00", + "timestamp": 38506.213955 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4395, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 D5 00 2B 11 00", + "timestamp": 38506.239417 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38506.250994 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38506.250994 + } + }, + "captured_at": "2026-08-01T18:14:31.176364Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:14:31.245028Z", + "duration_ms": 6927 + }, + { + "id": "MODE-MEDITATION-START", + "group": "mode", + "utterance": "启动冥想空间模式", + "started_at": "2026-08-01T18:14:31.245116Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181431-faf70c", + "matched_modes": [ + "meditation_space" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 58, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5811, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 DB 00 B3 16 00", + "timestamp": 38513.038478 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 D8 00 10 27 00", + "timestamp": 38513.063861 + } + }, + "cushion_tilt": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 4412, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 D9 00 3C 11 00", + "timestamp": 38513.089719 + } + }, + "backrest_recline": { + "position_pct": 44, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 4395, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 DA 00 2B 11 00", + "timestamp": 38513.116224 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38513.127913 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38513.127913 + } + }, + "captured_at": "2026-08-01T18:14:38.053194Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:14:38.131240Z", + "duration_ms": 6886 + }, + { + "id": "MODE-LEISURE-OPEN", + "group": "mode", + "utterance": "打开休闲躺椅模式", + "started_at": "2026-08-01T18:14:38.131336Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181438-0ad746", + "matched_modes": [ + "leisure_lounger" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 76, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 7604, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 E0 00 B4 1D 00", + "timestamp": 38537.722207 + } + }, + "longitudinal": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 5090, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 DD 00 E2 13 00", + "timestamp": 38537.748815 + } + }, + "cushion_tilt": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2995, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 DE 00 B3 0B 00", + "timestamp": 38537.77459 + } + }, + "backrest_recline": { + "position_pct": 66, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 6598, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 DF 00 C6 19 00", + "timestamp": 38537.800098 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38537.813963 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38537.813963 + } + }, + "captured_at": "2026-08-01T18:15:02.738811Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:15:02.808893Z", + "duration_ms": 24678 + }, + { + "id": "MODE-LEISURE-ENTER", + "group": "mode", + "utterance": "进入休闲躺椅", + "started_at": "2026-08-01T18:15:02.809003Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181502-9fc01a", + "matched_modes": [ + "leisure_lounger" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 76, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 7604, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 E5 00 B4 1D 00", + "timestamp": 38544.649225 + } + }, + "longitudinal": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 5090, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 E2 00 E2 13 00", + "timestamp": 38544.674993 + } + }, + "cushion_tilt": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2995, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 E3 00 B3 0B 00", + "timestamp": 38544.700446 + } + }, + "backrest_recline": { + "position_pct": 66, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 6598, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 E4 00 C6 19 00", + "timestamp": 38544.726964 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38544.738641 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38544.738641 + } + }, + "captured_at": "2026-08-01T18:15:09.663438Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:15:09.739021Z", + "duration_ms": 6930 + }, + { + "id": "MODE-LEISURE-SWITCH", + "group": "mode", + "utterance": "切换到休闲躺椅模式", + "started_at": "2026-08-01T18:15:09.739169Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181509-fd6606", + "matched_modes": [ + "leisure_lounger" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 76, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 7604, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 EA 00 B4 1D 00", + "timestamp": 38551.550425 + } + }, + "longitudinal": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 5090, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 E7 00 E2 13 00", + "timestamp": 38551.577314 + } + }, + "cushion_tilt": { + "position_pct": 30, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 2995, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 E8 00 B3 0B 00", + "timestamp": 38551.602782 + } + }, + "backrest_recline": { + "position_pct": 66, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 6598, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 E9 00 C6 19 00", + "timestamp": 38551.629417 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38551.639862 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38551.639862 + } + }, + "captured_at": "2026-08-01T18:15:16.564587Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:15:16.639370Z", + "duration_ms": 6900 + }, + { + "id": "MODE-CALF-OPEN", + "group": "mode", + "utterance": "打开小腿解压悬浮模式", + "started_at": "2026-08-01T18:15:16.639459Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181516-dd6d5c", + "matched_modes": [ + "calf_decompression_float" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 28 EF 00 10 27 00", + "timestamp": 38583.415703 + } + }, + "longitudinal": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 5090, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 EC 00 E2 13 00", + "timestamp": 38583.441109 + } + }, + "cushion_tilt": { + "position_pct": 75, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 7513, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 ED 00 59 1D 00", + "timestamp": 38583.467556 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 EE 00 00 00 00", + "timestamp": 38583.493326 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38583.504883 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38583.504883 + } + }, + "captured_at": "2026-08-01T18:15:48.428778Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:15:48.508601Z", + "duration_ms": 31869 + }, + { + "id": "MODE-CALF-ENTER", + "group": "mode", + "utterance": "进入小腿解压", + "started_at": "2026-08-01T18:15:48.508679Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181548-8d6172", + "matched_modes": [ + "calf_decompression_float" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 75, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 7513, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 F2 00 59 1D 00", + "timestamp": 38592.153871 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 F3 00 00 00 00", + "timestamp": 38592.181896 + } + }, + "legrest_height": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 28 F4 00 10 27 00", + "timestamp": 38592.208432 + } + }, + "longitudinal": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 5090, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 F1 00 E2 13 00", + "timestamp": 38592.233747 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38592.243064 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38592.243064 + } + }, + "captured_at": "2026-08-01T18:15:57.166796Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:15:57.252082Z", + "duration_ms": 8743 + }, + { + "id": "MODE-CALF-START", + "group": "mode", + "utterance": "启动小腿悬浮模式", + "started_at": "2026-08-01T18:15:57.252155Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181557-680b3d", + "matched_modes": [ + "calf_decompression_float" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 F8 00 00 00 00", + "timestamp": 38600.868639 + } + }, + "legrest_height": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 28 F9 00 10 27 00", + "timestamp": 38600.894427 + } + }, + "longitudinal": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 5090, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 F6 00 E2 13 00", + "timestamp": 38600.91973 + } + }, + "cushion_tilt": { + "position_pct": 75, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 7513, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 F7 00 59 1D 00", + "timestamp": 38600.946303 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38600.956724 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38600.956724 + } + }, + "captured_at": "2026-08-01T18:16:05.880351Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:16:05.963656Z", + "duration_ms": 8712 + }, + { + "id": "MODE-BEACH-OPEN", + "group": "mode", + "utterance": "打开电感沙滩椅", + "started_at": "2026-08-01T18:16:05.963740Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181605-f1cd10", + "matched_modes": [ + "electric_beach_chair" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 FC 00 00 00 00", + "timestamp": 38658.042929 + } + }, + "backrest_recline": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": true, + "task_state": 7, + "motor_result": 6, + "motor_selector": 2, + "value_x100": 9989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 67 08 FD 00 05 27 00", + "timestamp": 38658.069414 + } + }, + "legrest_height": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5981, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 FE 00 5D 17 00", + "timestamp": 38658.095112 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 FB 00 10 27 00", + "timestamp": 38658.121601 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38658.133174 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38658.133174 + } + }, + "captured_at": "2026-08-01T18:17:03.055720Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:17:03.136151Z", + "duration_ms": 57172 + }, + { + "id": "MODE-BEACH-ENTER", + "group": "mode", + "utterance": "进入沙滩椅模式", + "started_at": "2026-08-01T18:17:03.136235Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181703-203001", + "matched_modes": [ + "electric_beach_chair" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 01 01 00 00 00", + "timestamp": 38668.419137 + } + }, + "backrest_recline": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 28 02 01 10 27 00", + "timestamp": 38668.445555 + } + }, + "legrest_height": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 6012, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 03 01 7C 17 00", + "timestamp": 38668.472114 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 00 01 10 27 00", + "timestamp": 38668.497794 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38668.509369 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38668.509369 + } + }, + "captured_at": "2026-08-01T18:17:13.431635Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:17:13.509811Z", + "duration_ms": 10374 + }, + { + "id": "MODE-BEACH-SWITCH", + "group": "mode", + "utterance": "切换到电感沙滩椅模式", + "started_at": "2026-08-01T18:17:13.509900Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181713-7cb0b7", + "matched_modes": [ + "electric_beach_chair" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 06 01 00 00 00", + "timestamp": 38678.77835 + } + }, + "backrest_recline": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 28 07 01 10 27 00", + "timestamp": 38678.80406 + } + }, + "legrest_height": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5981, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 08 01 5D 17 00", + "timestamp": 38678.829383 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 05 01 10 27 00", + "timestamp": 38678.855839 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38678.867432 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38678.867432 + } + }, + "captured_at": "2026-08-01T18:17:23.789479Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:17:23.871691Z", + "duration_ms": 10362 + }, + { + "id": "MODE-NAP-OPEN", + "group": "mode", + "utterance": "打开小憩模式", + "started_at": "2026-08-01T18:17:23.871792Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181723-4a0b62", + "matched_modes": [ + "nap" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 0A 01 10 27 00", + "timestamp": 38704.734923 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 0B 01 10 27 00", + "timestamp": 38704.7604 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 0C 01 A7 1F 00", + "timestamp": 38704.786994 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 0D 01 B5 24 00", + "timestamp": 38704.812825 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38704.823278 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38704.823278 + } + }, + "captured_at": "2026-08-01T18:17:49.744795Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:17:49.820372Z", + "duration_ms": 25949 + }, + { + "id": "MODE-NAP-ENTER", + "group": "mode", + "utterance": "副驾进入小憩", + "started_at": "2026-08-01T18:17:49.820485Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181749-bed402", + "matched_modes": [ + "nap" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 10 01 10 27 00", + "timestamp": 38711.518766 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 11 01 A7 1F 00", + "timestamp": 38711.544164 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 12 01 B5 24 00", + "timestamp": 38711.570807 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 0F 01 10 27 00", + "timestamp": 38711.596254 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38711.610586 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38711.610586 + } + }, + "captured_at": "2026-08-01T18:17:56.532009Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:17:56.689291Z", + "duration_ms": 6869 + }, + { + "id": "MODE-NAP-START", + "group": "mode", + "utterance": "启动小憩模式", + "started_at": "2026-08-01T18:17:56.689408Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181756-bafac7", + "matched_modes": [ + "nap" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 16 01 A7 1F 00", + "timestamp": 38718.527422 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 17 01 B5 24 00", + "timestamp": 38718.552804 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 14 01 10 27 00", + "timestamp": 38718.579433 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 15 01 10 27 00", + "timestamp": 38718.605269 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38718.615742 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38718.615742 + } + }, + "captured_at": "2026-08-01T18:18:03.537236Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:18:03.616979Z", + "duration_ms": 6928 + }, + { + "id": "MODE-ZERO-GRAVITY-OPEN", + "group": "mode", + "utterance": "打开零重力模式", + "started_at": "2026-08-01T18:18:03.617099Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181803-b968ba", + "matched_modes": [ + "zero_gravity" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 1C 01 B5 24 00", + "timestamp": 38725.452872 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 19 01 10 27 00", + "timestamp": 38725.479536 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 1A 01 10 27 00", + "timestamp": 38725.505395 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 1B 01 A7 1F 00", + "timestamp": 38725.530851 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38725.54244 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38725.54244 + } + }, + "captured_at": "2026-08-01T18:18:10.463573Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:18:10.541182Z", + "duration_ms": 6924 + }, + { + "id": "MODE-ZERO-GRAVITY-ENTER", + "group": "mode", + "utterance": "副驾进入零重力", + "started_at": "2026-08-01T18:18:10.541284Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181810-035b9a", + "matched_modes": [ + "zero_gravity" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 1E 01 10 27 00", + "timestamp": 38732.331013 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 1F 01 10 27 00", + "timestamp": 38732.357595 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 20 01 A7 1F 00", + "timestamp": 38732.383032 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 21 01 B5 24 00", + "timestamp": 38732.408866 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38732.420505 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38732.420505 + } + }, + "captured_at": "2026-08-01T18:18:17.341700Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:18:17.414745Z", + "duration_ms": 6873 + }, + { + "id": "MODE-ZERO-GRAVITY-ENGLISH", + "group": "mode", + "utterance": "开启 zero-gravity 模式", + "started_at": "2026-08-01T18:18:17.414832Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181817-17c748", + "matched_modes": [ + "zero_gravity" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 24 01 10 27 00", + "timestamp": 38739.24695 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 25 01 A7 1F 00", + "timestamp": 38739.273513 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 26 01 B5 24 00", + "timestamp": 38739.300503 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 23 01 10 27 00", + "timestamp": 38739.324836 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38739.336475 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38739.336475 + } + }, + "captured_at": "2026-08-01T18:18:24.257352Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:18:24.336745Z", + "duration_ms": 6922 + }, + { + "id": "SAFE-DRIVER-THERMAL", + "group": "safety", + "utterance": "打开主驾座椅通风", + "started_at": "2026-08-01T18:18:24.336859Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181824-e63969", + "physical_state_before": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "physical_state_after": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "finished_at": "2026-08-01T18:18:25.091868Z", + "duration_ms": 755 + }, + { + "id": "SAFE-DRIVER-MOTION", + "group": "safety", + "utterance": "把驾驶位靠背调到50%", + "started_at": "2026-08-01T18:18:25.091935Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181825-b14e47", + "physical_state_before": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "physical_state_after": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "finished_at": "2026-08-01T18:18:25.817495Z", + "duration_ms": 726 + }, + { + "id": "SAFE-DRIVER-MODE", + "group": "safety", + "utterance": "主驾进入零重力模式", + "started_at": "2026-08-01T18:18:25.817569Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181826-a2fee4", + "physical_state_before": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "physical_state_after": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "finished_at": "2026-08-01T18:18:26.661784Z", + "duration_ms": 844 + }, + { + "id": "SAFE-FRONT-ROW", + "group": "safety", + "utterance": "打开前排座椅加热", + "started_at": "2026-08-01T18:18:26.661844Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181827-ebadd5", + "physical_state_before": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "physical_state_after": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "finished_at": "2026-08-01T18:18:27.393073Z", + "duration_ms": 731 + }, + { + "id": "SAFE-PERCENT-OVERFLOW", + "group": "safety", + "utterance": "副驾座椅水平位置调到101%", + "started_at": "2026-08-01T18:18:27.393128Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181827-c45229", + "physical_state_before": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "physical_state_after": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "finished_at": "2026-08-01T18:18:28.164033Z", + "duration_ms": 771 + }, + { + "id": "SAFE-ANGLE-OVERFLOW", + "group": "safety", + "utterance": "副驾靠背调到200度", + "started_at": "2026-08-01T18:18:28.164096Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181828-f14022", + "physical_state_before": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "physical_state_after": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "finished_at": "2026-08-01T18:18:28.950747Z", + "duration_ms": 787 + }, + { + "id": "SAFE-LEVEL-UNSUPPORTED", + "group": "safety", + "utterance": "副驾座椅加热开到4档", + "started_at": "2026-08-01T18:18:28.950805Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181829-a95330", + "physical_state_before": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "physical_state_after": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "finished_at": "2026-08-01T18:18:29.713510Z", + "duration_ms": 763 + }, + { + "id": "SAFE-MISSING-STATE", + "group": "safety", + "utterance": "副驾座椅通风", + "started_at": "2026-08-01T18:18:29.713573Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181830-f6f4cb", + "physical_state_before": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "physical_state_after": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "finished_at": "2026-08-01T18:18:30.433392Z", + "duration_ms": 720 + }, + { + "id": "SAFE-CONTRADICTORY", + "group": "safety", + "utterance": "打开副驾加热然后关闭副驾加热", + "started_at": "2026-08-01T18:18:30.433450Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181830-aa40a2", + "physical_state_before": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "physical_state_after": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "finished_at": "2026-08-01T18:18:31.169600Z", + "duration_ms": 736 + }, + { + "id": "SAFE-UNKNOWN-CAPABILITY", + "group": "safety", + "utterance": "把副驾座椅按摩打开", + "started_at": "2026-08-01T18:18:31.169657Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181831-3aef4a", + "physical_state_before": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "physical_state_after": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "finished_at": "2026-08-01T18:18:31.933210Z", + "duration_ms": 764 + }, + { + "id": "SAFE-UNKNOWN-MODE", + "group": "safety", + "utterance": "打开老板模式", + "started_at": "2026-08-01T18:18:31.933269Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181832-db2831", + "physical_state_before": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "physical_state_after": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "finished_at": "2026-08-01T18:18:32.677354Z", + "duration_ms": 744 + }, + { + "id": "SAFE-MULTIPLE-MODES", + "group": "safety", + "utterance": "进入办公模式和零重力模式", + "started_at": "2026-08-01T18:18:32.677411Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181833-75e6a1", + "physical_state_before": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "physical_state_after": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "finished_at": "2026-08-01T18:18:33.467353Z", + "duration_ms": 790 + }, + { + "id": "SAFE-LEGREST-EXTENSION", + "group": "safety", + "utterance": "把副驾腿托伸长到50%", + "started_at": "2026-08-01T18:18:33.467424Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181833-6d5479", + "physical_state_before": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "physical_state_after": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "finished_at": "2026-08-01T18:18:34.266012Z", + "duration_ms": 799 + }, + { + "id": "SAFE-VAGUE", + "group": "safety", + "utterance": "把座椅调舒服一点", + "started_at": "2026-08-01T18:18:34.266070Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181834-51398c", + "physical_state_before": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "physical_state_after": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 81, + "cushion_tilt": 100, + "legrest_height": 94, + "longitudinal": 100 + } + }, + "finished_at": "2026-08-01T18:18:35.030667Z", + "duration_ms": 765 + } + ], + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风", + "started_at": "2026-08-01T18:18:35.030723Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801181835-27db4c", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 23 01 10 27 00", + "timestamp": 38750.767321 + } + }, + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 24 01 10 27 00", + "timestamp": 38750.79349 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 25 01 A7 1F 00", + "timestamp": 38750.82009 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 26 01 B5 24 00", + "timestamp": 38750.845099 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38750.855392 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 38750.855392 + } + }, + "captured_at": "2026-08-01T18:18:35.776166Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:18:35.870387Z", + "duration_ms": 840 + }, + "finished_at": "2026-08-01T18:18:35.870429Z", + "summary": { + "total": 138, + "passed": 138, + "failed": 0, + "safety_blocked": 0, + "executed": 138, + "final_state_passed": true + } +} \ No newline at end of file diff --git a/artifacts/hil/seat_relative_motion_regression.json b/artifacts/hil/seat_relative_motion_regression.json new file mode 100644 index 0000000..1f1610b --- /dev/null +++ b/artifacts/hil/seat_relative_motion_regression.json @@ -0,0 +1,1827 @@ +{ + "suite": "t2g-seat-frontend-comprehensive-hil", + "started_at": "2026-08-01T18:55:51.859382Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801185551", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "MOTION-M0-REARMOST", + "group": "motion", + "utterance": "副驾驶座椅移动到最后面", + "started_at": "2026-08-01T18:55:51.859423Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801185551-e3b1b4", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 01 00 00 00 00", + "timestamp": 41003.319 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 01 00 00 00 00", + "timestamp": 41003.344167 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 02 00 10 27 00", + "timestamp": 41003.370792 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 01 00 00 00 00", + "timestamp": 41003.397098 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41003.406341 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41003.406341 + } + }, + "captured_at": "2026-08-01T18:56:08.283480Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:56:08.365287Z", + "duration_ms": 16506 + }, + { + "id": "MOTION-M0-RELATIVE-FORWARD", + "group": "motion", + "utterance": "副驾滑轨向前移动10%", + "started_at": "2026-08-01T18:56:08.365359Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801185608-597d1c", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 03 00 00 00 00", + "timestamp": 41005.875054 + } + }, + "longitudinal": { + "position_pct": 90, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 8998, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 08 04 00 26 23 00", + "timestamp": 41005.900223 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 03 00 00 00 00", + "timestamp": 41005.926546 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 03 00 00 00 00", + "timestamp": 41005.952874 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41005.963521 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41005.963521 + } + }, + "captured_at": "2026-08-01T18:56:10.840600Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:56:10.918119Z", + "duration_ms": 2553 + }, + { + "id": "MOTION-M0-RELATIVE-BACKWARD", + "group": "motion", + "utterance": "座椅前后向后移动10%", + "started_at": "2026-08-01T18:56:10.918192Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801185610-0bcd93", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 05 00 00 00 00", + "timestamp": 41008.262515 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 05 00 00 00 00", + "timestamp": 41008.288794 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 06 00 10 27 00", + "timestamp": 41008.315132 + } + }, + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 18 05 00 00 00 00", + "timestamp": 41008.340261 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41008.34836 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41008.34836 + } + }, + "captured_at": "2026-08-01T18:56:13.225386Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:56:13.305401Z", + "duration_ms": 2387 + }, + { + "id": "MOTION-M1-60-PAN", + "group": "motion", + "utterance": "副驾坐盆调到60%", + "started_at": "2026-08-01T18:56:13.305460Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801185613-a45d47", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 07 00 00 00 00", + "timestamp": 41014.117064 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 07 00 00 00 00", + "timestamp": 41014.142329 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 07 00 10 27 00", + "timestamp": 41014.169109 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 08 00 65 17 00", + "timestamp": 41014.194414 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41014.205961 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41014.205961 + } + }, + "captured_at": "2026-08-01T18:56:19.082848Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:56:19.160368Z", + "duration_ms": 5855 + }, + { + "id": "MOTION-M1-RELATIVE-UP", + "group": "motion", + "utterance": "副驾坐垫向上调整10%", + "started_at": "2026-08-01T18:56:19.160420Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801185619-8fc990", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 09 00 00 00 00", + "timestamp": 41015.770697 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 09 00 10 27 00", + "timestamp": 41015.797085 + } + }, + "cushion_tilt": { + "position_pct": 50, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 4973, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 0A 00 6D 13 00", + "timestamp": 41015.82237 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 09 00 00 00 00", + "timestamp": 41015.848831 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41015.859214 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41015.859214 + } + }, + "captured_at": "2026-08-01T18:56:20.736074Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:56:20.821687Z", + "duration_ms": 1661 + }, + { + "id": "MOTION-M1-RELATIVE-DOWN", + "group": "motion", + "utterance": "坐盆向下移动10%", + "started_at": "2026-08-01T18:56:20.821745Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801185620-086ce3", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 0B 00 10 27 00", + "timestamp": 41017.478808 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 08 0C 00 65 17 00", + "timestamp": 41017.505241 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 18 0B 00 00 00 00", + "timestamp": 41017.5305 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 0B 00 00 00 00", + "timestamp": 41017.556934 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41017.567659 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41017.567659 + } + }, + "captured_at": "2026-08-01T18:56:22.444490Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:56:22.531225Z", + "duration_ms": 1709 + }, + { + "id": "MOTION-M2-ANGLE-130", + "group": "motion", + "utterance": "副驾靠背角度调到130度", + "started_at": "2026-08-01T18:56:22.531282Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801185622-512c44", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 0D 00 10 27 00", + "timestamp": 41032.26553 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 0D 00 65 17 00", + "timestamp": 41032.290873 + } + }, + "backrest_recline": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 5104, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 0E 00 F0 13 00", + "timestamp": 41032.317415 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 0D 00 00 00 00", + "timestamp": 41032.342726 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41032.354355 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41032.354355 + } + }, + "captured_at": "2026-08-01T18:56:37.230885Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:56:37.309322Z", + "duration_ms": 14778 + }, + { + "id": "MOTION-M2-RELATIVE-FORWARD", + "group": "motion", + "utterance": "靠背向前移动10度", + "started_at": "2026-08-01T18:56:37.309375Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801185637-e74f66", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 0F 00 65 17 00", + "timestamp": 41037.003664 + } + }, + "backrest_recline": { + "position_pct": 36, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 3599, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 10 00 0F 0E 00", + "timestamp": 41037.028979 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 0F 00 00 00 00", + "timestamp": 41037.05549 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 0F 00 10 27 00", + "timestamp": 41037.081162 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41037.092699 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41037.092699 + } + }, + "captured_at": "2026-08-01T18:56:41.969121Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:56:42.049069Z", + "duration_ms": 4740 + }, + { + "id": "MOTION-M2-RELATIVE-BACKWARD", + "group": "motion", + "utterance": "副驾椅背向后移动10度", + "started_at": "2026-08-01T18:56:42.049121Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801185642-9fcaa4", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 5104, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 12 00 F0 13 00", + "timestamp": 41041.934051 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 11 00 00 00 00", + "timestamp": 41041.959404 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 11 00 10 27 00", + "timestamp": 41041.98512 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 11 00 65 17 00", + "timestamp": 41042.011597 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41042.024352 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41042.024352 + } + }, + "captured_at": "2026-08-01T18:56:46.900703Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:56:46.978006Z", + "duration_ms": 4929 + }, + { + "id": "MOTION-M2-RELATIVE-FORWARD-CN", + "group": "motion", + "utterance": "椅背往前调十度", + "started_at": "2026-08-01T18:56:46.978062Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801185646-3afa90", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 36, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 3599, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 14 00 0F 0E 00", + "timestamp": 41046.645717 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 13 00 00 00 00", + "timestamp": 41046.671437 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 13 00 10 27 00", + "timestamp": 41046.697902 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 13 00 65 17 00", + "timestamp": 41046.723279 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41046.73483 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41046.73483 + } + }, + "captured_at": "2026-08-01T18:56:51.611166Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:56:51.695691Z", + "duration_ms": 4718 + }, + { + "id": "MOTION-M2-RELATIVE-BACKWARD-CN", + "group": "motion", + "utterance": "靠背后仰十度", + "started_at": "2026-08-01T18:56:51.695745Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801185651-4f2b8b", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 15 00 10 27 00", + "timestamp": 41051.465939 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 15 00 65 17 00", + "timestamp": 41051.491246 + } + }, + "backrest_recline": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 5104, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 16 00 F0 13 00", + "timestamp": 41051.517798 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 30 18 15 00 00 00 00", + "timestamp": 41051.544271 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41051.554716 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41051.554716 + } + }, + "captured_at": "2026-08-01T18:56:56.430855Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:56:56.502940Z", + "duration_ms": 4807 + }, + { + "id": "MOTION-M3-ANGLE-145", + "group": "motion", + "utterance": "副驾腿托抬到145度", + "started_at": "2026-08-01T18:56:56.502992Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801185656-e83150", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "legrest_height": { + "position_pct": 69, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 6893, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 18 00 ED 1A 00", + "timestamp": 41062.506287 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 17 00 10 27 00", + "timestamp": 41062.531656 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 17 00 65 17 00", + "timestamp": 41062.55825 + } + }, + "backrest_recline": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 5104, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 08 17 00 F0 13 00", + "timestamp": 41062.584073 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41062.594504 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41062.594504 + } + }, + "captured_at": "2026-08-01T18:57:07.470496Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:57:07.554773Z", + "duration_ms": 11052 + }, + { + "id": "MOTION-M3-RELATIVE-DOWN", + "group": "motion", + "utterance": "脚托往下调10度", + "started_at": "2026-08-01T18:57:07.554839Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801185707-99882f", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 19 00 65 17 00", + "timestamp": 41065.28971 + } + }, + "backrest_recline": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 5104, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 08 19 00 F0 13 00", + "timestamp": 41065.3163 + } + }, + "legrest_height": { + "position_pct": 55, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 5487, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 1A 00 6F 15 00", + "timestamp": 41065.341663 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 19 00 10 27 00", + "timestamp": 41065.367523 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41065.377944 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41065.377944 + } + }, + "captured_at": "2026-08-01T18:57:10.253896Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:57:10.336590Z", + "duration_ms": 2782 + }, + { + "id": "MOTION-M3-RELATIVE-UP", + "group": "motion", + "utterance": "腿托向上抬十度", + "started_at": "2026-08-01T18:57:10.336647Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801185710-fd8cc5", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "backrest_recline": { + "position_pct": 51, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 2, + "value_x100": 5104, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 30 08 1B 00 F0 13 00", + "timestamp": 41068.130471 + } + }, + "legrest_height": { + "position_pct": 69, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 6893, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 1C 00 ED 1A 00", + "timestamp": 41068.155957 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 30 28 1B 00 10 27 00", + "timestamp": 41068.18173 + } + }, + "cushion_tilt": { + "position_pct": 60, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 0, + "motor_result": 3, + "motor_selector": 1, + "value_x100": 5989, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 30 08 1B 00 65 17 00", + "timestamp": 41068.20835 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41068.219949 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41068.219949 + } + }, + "captured_at": "2026-08-01T18:57:13.095860Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:57:13.181872Z", + "duration_ms": 2845 + }, + { + "id": "SAFE-RELATIVE-OVERFLOW", + "group": "safety", + "utterance": "靠背向前移动200度", + "started_at": "2026-08-01T18:57:13.181932Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801185713-d2d59a", + "physical_state_before": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 51, + "cushion_tilt": 60, + "legrest_height": 69, + "longitudinal": 100 + } + }, + "physical_state_after": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 51, + "cushion_tilt": 60, + "legrest_height": 69, + "longitudinal": 100 + } + }, + "finished_at": "2026-08-01T18:57:13.940563Z", + "duration_ms": 759 + }, + { + "id": "SAFE-RELATIVE-WRONG-UNIT", + "group": "safety", + "utterance": "坐垫向前移动10度", + "started_at": "2026-08-01T18:57:13.940615Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801185714-ddc0f5", + "physical_state_before": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 51, + "cushion_tilt": 60, + "legrest_height": 69, + "longitudinal": 100 + } + }, + "physical_state_after": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 51, + "cushion_tilt": 60, + "legrest_height": 69, + "longitudinal": 100 + } + }, + "finished_at": "2026-08-01T18:57:14.760124Z", + "duration_ms": 820 + }, + { + "id": "SAFE-RELATIVE-MISSING-AXIS", + "group": "safety", + "utterance": "向前移动10度", + "started_at": "2026-08-01T18:57:14.760207Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801185715-0bbbec", + "physical_state_before": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 51, + "cushion_tilt": 60, + "legrest_height": 69, + "longitudinal": 100 + } + }, + "physical_state_after": { + "source": "physical_can", + "complete": true, + "heating": 0, + "ventilation": 0, + "position": { + "backrest_recline": 51, + "cushion_tilt": 60, + "legrest_height": 69, + "longitudinal": 100 + } + }, + "finished_at": "2026-08-01T18:57:15.503247Z", + "duration_ms": 743 + } + ], + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风,并把水平、坐盆、靠背、腿托四轴归零", + "started_at": "2026-08-01T18:57:15.503288Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801185715-c258f7", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 1F 00 00 00 00", + "timestamp": 41127.219847 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 20 00 00 00 00", + "timestamp": 41127.245678 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 21 00 00 00 00", + "timestamp": 41127.271534 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 1E 00 00 00 00", + "timestamp": 41127.297631 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41127.305524 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 41127.305524 + } + }, + "captured_at": "2026-08-01T18:58:12.180377Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:58:12.254970Z", + "duration_ms": 56752 + }, + "finished_at": "2026-08-01T18:58:12.255010Z", + "summary": { + "total": 17, + "passed": 17, + "failed": 0, + "safety_blocked": 0, + "executed": 17, + "final_state_passed": true + } +} \ No newline at end of file diff --git a/artifacts/hil/seat_zero_gravity_regression.json b/artifacts/hil/seat_zero_gravity_regression.json new file mode 100644 index 0000000..e40a6e4 --- /dev/null +++ b/artifacts/hil/seat_zero_gravity_regression.json @@ -0,0 +1,252 @@ +{ + "suite": "t2g-seat-frontend-comprehensive-hil", + "started_at": "2026-08-01T18:23:33.171605Z", + "base_url": "http://127.0.0.1:8000", + "vehicle_id": "denza_n7", + "conversation_id": "conv-hil-full-20260801182333", + "runtime": { + "hardware_execution_allowed": true, + "firmware_profiles": [ + "combined" + ] + }, + "results": [ + { + "id": "MODE-ZERO-GRAVITY-OPEN", + "group": "mode", + "utterance": "打开零重力模式", + "started_at": "2026-08-01T18:23:33.171647Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801182333-ad87f6", + "matched_modes": [ + "zero_gravity" + ], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 28 33 01 10 27 00", + "timestamp": 39114.700574 + } + }, + "backrest_recline": { + "position_pct": 81, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 8103, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 08 34 01 A7 1F 00", + "timestamp": 39114.725999 + } + }, + "legrest_height": { + "position_pct": 94, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 9397, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 08 35 01 B5 24 00", + "timestamp": 39114.754159 + } + }, + "longitudinal": { + "position_pct": 100, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 10000, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 28 32 01 10 27 00", + "timestamp": 39114.780784 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 39114.790091 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 39114.790091 + } + }, + "captured_at": "2026-08-01T18:24:39.703780Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:24:39.790515Z", + "duration_ms": 66619 + } + ], + "final_state": { + "id": "FINAL-THERMAL-OFF", + "group": "cleanup", + "utterance": "关闭副驾座椅加热和通风,并把水平、坐盆、靠背、腿托四轴归零", + "started_at": "2026-08-01T18:24:39.790569Z", + "status": "passed", + "errors": [], + "http_status": 201, + "request_id": "req-20260801182439-328aa0", + "matched_modes": [], + "state_http_status": 200, + "physical_state": { + "position": { + "cushion_tilt": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 1, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "01 26 18 38 01 00 00 00", + "timestamp": 39185.409902 + } + }, + "backrest_recline": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 2, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "02 26 18 39 01 00 00 00", + "timestamp": 39185.435684 + } + }, + "legrest_height": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 3, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "03 26 18 3A 01 00 00 00", + "timestamp": 39185.461565 + } + }, + "longitudinal": { + "position_pct": 0, + "position_valid": true, + "motion_state": "stopped", + "fault": false, + "task_state": 6, + "motor_result": 2, + "motor_selector": 0, + "value_x100": 0, + "feedback_frame": { + "frame_id": "0x302", + "payload_size": 8, + "data_hex": "00 26 18 37 01 00 00 00", + "timestamp": 39185.487663 + } + } + }, + "ventilation": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 39185.496704 + } + }, + "heating": { + "state": "off", + "level": 0, + "feedback_value": 1, + "feedback_frame": { + "frame_id": "0x4FA", + "payload_size": 8, + "data_hex": "09 00 00 00 00 00 00 00", + "timestamp": 39185.496704 + } + }, + "captured_at": "2026-08-01T18:25:50.408971Z", + "source": "physical_can", + "target": { + "device": "seat", + "zone": "front_right", + "instance": "passenger" + }, + "complete": true, + "missing": [] + }, + "finished_at": "2026-08-01T18:25:50.490639Z", + "duration_ms": 70700 + }, + "finished_at": "2026-08-01T18:25:50.490676Z", + "summary": { + "total": 1, + "passed": 1, + "failed": 0, + "safety_blocked": 0, + "executed": 1, + "final_state_passed": true + } +} \ No newline at end of file diff --git a/config/environments/t2g_cabin_bench.example.yaml b/config/environments/t2g_cabin_bench.example.yaml new file mode 100644 index 0000000..261941e --- /dev/null +++ b/config/environments/t2g_cabin_bench.example.yaml @@ -0,0 +1,37 @@ +environment: t2g_cabin_bench +platform: t2g_cabin_bench +execution: + mode: hil + hardware_enabled_env: COGNITIVE_AGENT_HARDWARE_EXECUTION_ENABLED + approval_token_required_env: COGNITIVE_AGENT_HARDWARE_APPROVAL_TOKEN_REQUIRED + approval_token_env: COGNITIVE_AGENT_HARDWARE_APPROVAL_TOKEN + seat_firmware_probe_timeout_ms: 3500 +can_adapter: + backend: zlgcan + device: USBCANFD-200U + device_type: 41 + device_index: 0 + ownership: one_bridge_process_opens_device_once +buses: + seat_can: + channel_env: COGNITIVE_AGENT_SEAT_CAN_CHANNEL + default_channel: 0 + frame_format: classic_can_11_bit + bitrate: 500000 + termination_enabled_env: COGNITIVE_AGENT_SEAT_CAN_TERMINATION_ENABLED + termination_enabled_default: true + body_can: + enabled_env: COGNITIVE_AGENT_VEHICLE_CAN_ENABLED + channel_env: COGNITIVE_AGENT_VEHICLE_CAN_CHANNEL + default_channel: 1 + frame_format: can_fd_11_bit + arbitration_bitrate: 500000 + data_bitrate: 2000000 + iso: true + bitrate_switch: true + termination_enabled_env: COGNITIVE_AGENT_VEHICLE_CAN_TERMINATION_ENABLED + termination_enabled_default: false +safety: + channels_must_be_distinct: true + raw_can_passthrough: false + feedback_timeout_ms_env: COGNITIVE_AGENT_VEHICLE_CAN_FEEDBACK_TIMEOUT_MS diff --git a/config/environments/t2g_seat_bench.example.yaml b/config/environments/t2g_seat_bench.example.yaml index 77170e3..ca6fd73 100755 --- a/config/environments/t2g_seat_bench.example.yaml +++ b/config/environments/t2g_seat_bench.example.yaml @@ -20,7 +20,7 @@ firmware: topology: one_board_unified_seat_controller repository_project: firmware/t2g/Seat_Controller_demo/IAR/Seat_Controller_demo.ewp repository_vendor_dependencies: [firmware/t2g/common, firmware/t2g/tviibh8m] - verification: passive_301_302_303_304_305_4FA_and_max_hall + verification: passive_301_302_303_304_305_306_4FA_revision_7_and_max_hall expected_max_hall: [480, 374, 917, 647] auto_flash_enabled_env: COGNITIVE_AGENT_SEAT_AUTO_FLASH_ENABLED auto_flash_default_when_hardware_enabled: true diff --git a/config/modes/vehicles/denza_n7/dynamic_cradle.yaml b/config/modes/vehicles/denza_n7/dynamic_cradle.yaml new file mode 100644 index 0000000..606ea79 --- /dev/null +++ b/config/modes/vehicles/denza_n7/dynamic_cradle.yaml @@ -0,0 +1,82 @@ +id: dynamic_cradle +name: 动态摇篮模式 +aliases: + - 动态摇篮 + - 摇篮模式 + - cradle + - dynamic cradle +description: >- + 腾势 N7 固件原生位置闭环动态模式。Step 1先进入起始姿态;Step 2四轴同步启动并 + 以目标会合方式到达向前收拢姿态;Step 3四轴同步启动并会合返回起点,随后持续循环。 +icon: waves +scope: + vehicle_ids: + - denza_n7 +timeline: + repeat: until_stopped_or_timeout + max_runtime_ms: 600000 + entry: + id: step1 + name: 起始位置 + transition: all_targets_reached + timeout_ms: 30000 + targets: + longitudinal: {value: 172, unit: mm, hall_pulse: 391} + cushion_tilt: {value: 37.5, unit: percent, hall_pulse: 140} + backrest_recline: {value: 30, unit: degree_from_upright, hall_pulse: 405} + legrest_height: {value: 45, unit: degree, hall_pulse: 404} + phases: + - id: forward + name: Step 2 向前收拢 + completion: all_targets_reached + timeout_ms: 30000 + transition: synchronized_target_rendezvous + targets: + longitudinal: {value: 110, unit: mm, hall_pulse: 246} + cushion_tilt: {value: 75, unit: percent, hall_pulse: 281} + backrest_recline: {value: 52, unit: degree_from_upright, hall_pulse: 701} + legrest_height: {value: 55, unit: degree, hall_pulse: 494} + effects: + body_motion: {metaphor: cradle_rise, easing: smooth} + motion: + synchronized_start: true + synchronized_arrival: true + continuous_four_axis_cruise: true + cruise_duty_percent: + longitudinal: 50 + cushion_tilt: 50 + backrest_recline: 90 + legrest_height: 50 + final_approach_hall_pulses: 12 + final_duty_percent: 50 + - id: return + name: Step 3 向后回复 + completion: all_targets_reached + timeout_ms: 30000 + transition: synchronized_target_rendezvous + targets: + longitudinal: {value: 172, unit: mm, hall_pulse: 391} + cushion_tilt: {value: 37.5, unit: percent, hall_pulse: 140} + backrest_recline: {value: 30, unit: degree_from_upright, hall_pulse: 405} + legrest_height: {value: 45, unit: degree, hall_pulse: 404} + effects: + body_motion: {metaphor: cradle_sink, easing: smooth} + motion: + synchronized_start: true + synchronized_arrival: true + continuous_four_axis_cruise: true + cruise_duty_percent: + longitudinal: 50 + cushion_tilt: 50 + backrest_recline: 90 + legrest_height: 50 + final_approach_hall_pulses: 12 + final_duty_percent: 50 +operations: + - domain: seat + capability: seat.start_dynamic_mode + target_scope: passenger + operation: set + parameters: + mode_id: 2 + reason: 启动 IAR revision 13 四轴全程联动位置闭环动态摇篮,循环至停止指令或十分钟上限。 diff --git a/config/modes/vehicles/denza_n7/rocking_horse.yaml b/config/modes/vehicles/denza_n7/rocking_horse.yaml new file mode 100644 index 0000000..800243d --- /dev/null +++ b/config/modes/vehicles/denza_n7/rocking_horse.yaml @@ -0,0 +1,103 @@ +id: rocking_horse +name: 木马模式 +aliases: + - 木马模式 + - 木马 + - 摇摇马 + - 骑木马 + - rocking horse +description: >- + 腾势 N7 固件原生动态模式。座椅围绕中间姿态连续向前俯摆、向后仰摆, + 坐盆使用增强上下行程,四电机在每个半周期同步启动并以位置会合方式到达, + 形成可感知升降、无屏息、无末段追赶的木马节奏。 +icon: waves +scope: + vehicle_ids: + - denza_n7 +seat_tuning: + coordinate_space: hall_pulse + firmware_header: firmware/t2g/Seat_Controller_demo/Config/seat_dynamic_mode_config.h + calibrated_max_hall: [480, 374, 917, 647] + actual_bench_max_hall: [499, 374, 917, 647] + experience_tuning: + cushion_peak_to_peak_hall_pulses: 120 + cushion_peak_to_peak_vertical_mm: 18.0 + cushion_amplitude_gain_vs_revision_11: 2.0 + diagonal_coupling_compensation: + cushion_opposing_horizontal_mm: 16.4 + longitudinal_peak_to_peak_hall_pulses: 100 + longitudinal_peak_to_peak_mm: 44.8 + estimated_net_horizontal_mm: 28.4 + customization_rules: + - 所有目标必须位于对应轴已标定 Hall 量程内 + - 前后端点应围绕中心姿态分布,避免接近机械端点 + - 四轴占空比不得低于台架已验证的可靠起动值 + - 修改本文件后必须同步修改固件配置头并重新执行 IAR/HIL +timeline: + repeat: until_stopped_or_timeout + max_runtime_ms: 600000 + entry: + id: center + name: 木马中心姿态 + transition: all_targets_reached + timeout_ms: 30000 + targets: + longitudinal: {value: 143, unit: mm, hall_pulse: 320} + cushion_tilt: {value: 50.8, unit: percent, hall_pulse: 190} + backrest_recline: {value: 37.1, unit: degree_from_upright, hall_pulse: 500} + legrest_height: {value: 47.9, unit: degree, hall_pulse: 430} + phases: + - id: rock_forward + name: 向前俯摆 + completion: all_targets_reached + timeout_ms: 15000 + transition: synchronized_target_rendezvous + targets: + longitudinal: {value: 121, unit: mm, hall_pulse: 270} + cushion_tilt: {value: 66.8, unit: percent, hall_pulse: 250} + backrest_recline: {value: 34.1, unit: degree_from_upright, hall_pulse: 460} + legrest_height: {value: 44.5, unit: degree, hall_pulse: 400} + effects: + body_motion: {metaphor: rocking_horse_nose_down, easing: smooth} + motion: + synchronized_start: true + synchronized_arrival: true + continuous_four_axis_cruise: true + cruise_duty_percent: + longitudinal: 90 + cushion_tilt: 90 + backrest_recline: 90 + legrest_height: 50 + final_approach_hall_pulses: 8 + final_duty_percent: 50 + - id: rock_backward + name: 向后仰摆 + completion: all_targets_reached + timeout_ms: 15000 + transition: synchronized_target_rendezvous + targets: + longitudinal: {value: 166, unit: mm, hall_pulse: 370} + cushion_tilt: {value: 34.8, unit: percent, hall_pulse: 130} + backrest_recline: {value: 40.0, unit: degree_from_upright, hall_pulse: 540} + legrest_height: {value: 51.2, unit: degree, hall_pulse: 460} + effects: + body_motion: {metaphor: rocking_horse_nose_up, easing: smooth} + motion: + synchronized_start: true + synchronized_arrival: true + continuous_four_axis_cruise: true + cruise_duty_percent: + longitudinal: 90 + cushion_tilt: 90 + backrest_recline: 90 + legrest_height: 50 + final_approach_hall_pulses: 8 + final_duty_percent: 50 +operations: + - domain: seat + capability: seat.start_dynamic_mode + target_scope: passenger + operation: set + parameters: + mode_id: 1 + reason: 启动 IAR revision 13 带坐盆斜向耦合水平补偿的原生木马模式,循环至停止指令或十分钟上限。 diff --git a/config/native_can_capabilities/door.yaml b/config/native_can_capabilities/door.yaml new file mode 100644 index 0000000..718ea55 --- /dev/null +++ b/config/native_can_capabilities/door.yaml @@ -0,0 +1,21 @@ +apiVersion: cognitive-agent/v1alpha1 +kind: CapabilityCatalog +metadata: + id: door-native-can-capabilities + name: Door native CAN capabilities + version: 1.0.0 +spec: + domain: door + capabilities: + - name: door.set_rear_lock + description: Lock or unlock the second-row door lock through the verified vehicle CAN command. + target_devices: [rear_door_lock] + target_scopes: [rear] + parameters: + - name: state + type: string + required: true + allowed_values: [lock, unlock] + description: Absolute second-row lock request. + risk_level: medium + confirmation_policy: on_ambiguity diff --git a/config/native_can_capabilities/interior_light.yaml b/config/native_can_capabilities/interior_light.yaml new file mode 100644 index 0000000..d67b32e --- /dev/null +++ b/config/native_can_capabilities/interior_light.yaml @@ -0,0 +1,35 @@ +apiVersion: cognitive-agent/v1alpha1 +kind: CapabilityCatalog +metadata: + id: interior-light-native-can-capabilities + name: Interior light native CAN capabilities + version: 1.0.0 +spec: + domain: interior_light + capabilities: + - name: interior_light.set_indoor_power + description: Turn the general indoor light on or off through vehicle CAN. + target_devices: [indoor_light] + target_scopes: [vehicle] + parameters: &power_parameters + - name: state + type: string + required: true + allowed_values: ["on", "off"] + description: Absolute lamp power state. + risk_level: low + confirmation_policy: on_ambiguity + - name: interior_light.set_wall_power + description: Turn the wall lamp on or off through vehicle CAN. + target_devices: [wall_lamp] + target_scopes: [vehicle] + parameters: *power_parameters + risk_level: low + confirmation_policy: on_ambiguity + - name: interior_light.set_reading_power + description: Turn all or one supported reading-light zone on or off through vehicle CAN FD. + target_devices: [reading_light] + target_scopes: [all, front_left, front_right, middle_left, middle_right, middle_left_rotary, middle_right_rotary, rear_left, rear_right] + parameters: *power_parameters + risk_level: low + confirmation_policy: on_ambiguity diff --git a/config/native_can_capabilities/outlet.yaml b/config/native_can_capabilities/outlet.yaml new file mode 100644 index 0000000..4e3c5ee --- /dev/null +++ b/config/native_can_capabilities/outlet.yaml @@ -0,0 +1,27 @@ +apiVersion: cognitive-agent/v1alpha1 +kind: CapabilityCatalog +metadata: + id: outlet-native-can-capabilities + name: Air outlet native CAN capabilities + version: 1.0.0 +spec: + domain: outlet + capabilities: + - name: outlet.set_position_percent + description: Set both axes of one calibrated front air outlet using normalized percentages through vehicle CAN FD. + target_devices: [motorized_air_outlet] + target_scopes: [driver_left, driver_right, passenger_left, passenger_right] + parameters: + - {name: horizontal_pct, type: integer, unit: percent, minimum: 0, maximum: 100, required: true, description: Left-to-right target.} + - {name: vertical_pct, type: integer, unit: percent, minimum: 0, maximum: 100, required: true, description: Down-to-up target.} + risk_level: medium + confirmation_policy: on_ambiguity + - name: outlet.set_calibrated_position + description: Set both raw calibrated axes of one front air outlet. + target_devices: [motorized_air_outlet] + target_scopes: [driver_left, driver_right, passenger_left, passenger_right] + parameters: + - {name: horizontal_value, type: integer, minimum: -128, maximum: 126, required: true, description: Calibrated left-to-right coordinate.} + - {name: vertical_value, type: integer, minimum: -128, maximum: 126, required: true, description: Calibrated down-to-up coordinate.} + risk_level: medium + confirmation_policy: on_ambiguity diff --git a/config/native_can_capabilities/window.yaml b/config/native_can_capabilities/window.yaml new file mode 100644 index 0000000..f46f9d9 --- /dev/null +++ b/config/native_can_capabilities/window.yaml @@ -0,0 +1,35 @@ +apiVersion: cognitive-agent/v1alpha1 +kind: CapabilityCatalog +metadata: + id: window-native-can-capabilities + name: Window native CAN capabilities + version: 1.0.0 +spec: + domain: window + capabilities: + - name: window.set_motion + description: Open, close, or stop one or more windows through vehicle CAN FD. + target_devices: [window] + target_scopes: [all, front, rear, front_left, front_right, rear_left, rear_right] + parameters: + - name: motion + type: string + required: true + allowed_values: [open, close, stop] + description: Explicit window motion command. + risk_level: high + confirmation_policy: on_ambiguity + - name: window.set_position + description: Set one window to an absolute opening percentage using position feedback and a stop command. + target_devices: [window] + target_scopes: [front_left, front_right, rear_left, rear_right] + parameters: + - name: position_pct + type: integer + unit: percent + minimum: 0 + maximum: 100 + required: true + description: Absolute window opening percentage. + risk_level: high + confirmation_policy: on_ambiguity diff --git a/contracts/schemas/command-plan.schema.json b/contracts/schemas/command-plan.schema.json index fb8ef22..f8d1f7c 100755 --- a/contracts/schemas/command-plan.schema.json +++ b/contracts/schemas/command-plan.schema.json @@ -66,6 +66,13 @@ "operator": {"type": "string", "enum": ["eq", "neq", "gte", "lte", "within"]}, "value": {"type": ["number", "integer", "boolean", "string"]}, "tolerance": {"type": "number", "minimum": 0}, + "state_signal": {"type": "string", "minLength": 1}, + "accepted_states": { + "type": "array", + "minItems": 1, + "uniqueItems": true, + "items": {"type": "integer", "minimum": 0, "maximum": 255} + }, "timeout_ms": {"type": "integer", "minimum": 1, "maximum": 3600000} } }, @@ -94,6 +101,13 @@ "operator": {"type": "string", "enum": ["eq", "neq", "gte", "lte", "within"]}, "value": {"type": ["number", "integer", "boolean", "string"]}, "tolerance": {"type": "number", "minimum": 0}, + "state_signal": {"type": "string", "minLength": 1}, + "accepted_states": { + "type": "array", + "minItems": 1, + "uniqueItems": true, + "items": {"type": "integer", "minimum": 0, "maximum": 255} + }, "timeout_ms": {"type": "integer", "minimum": 1, "maximum": 3600000} } } diff --git a/docs/workflows/t2g-cabin-dual-channel-can.md b/docs/workflows/t2g-cabin-dual-channel-can.md new file mode 100644 index 0000000..e990c64 --- /dev/null +++ b/docs/workflows/t2g-cabin-dual-channel-can.md @@ -0,0 +1,53 @@ +# T2G 座椅与车身双通道 CAN 联动 + +## 集成基线 + +- 座椅控制沿用当前仓库的 IAR `Seat_Controller_demo` 协议与闭环回读。 +- 车身控制从 `https://git.kendeji.fun/dev-team/project-code` 的 `CAN_DEV` 分支导入,固定基线为提交 `6e7ed04a468dfcde7efda9e30bc15144bf02faf9`。 +- 不允许自然语言直接提供 CAN ID 或原始载荷;只有能力目录中命名、经过范围校验的动作可以编译到车身 CAN。 + +## 适配器和通道 + +一个 `USBCANFD-200U` 只由一个 32 位桥接进程打开一次,再向应用暴露两个通道视图: + +| 通道 | 用途 | 帧格式 | 仲裁速率 | 数据速率 | +|---|---|---|---:|---:| +| CH0 | T2G 副驾座椅控制器 | 11-bit Classic CAN | 500 kbit/s | — | +| CH1 | 空调、车窗、门锁、灯光、遮阳帘和电动风口 | 11-bit ISO CAN FD;按报文选择 BRS | 500 kbit/s | 2 Mbit/s | + +车身通道使用 60 MHz CAN 时钟。仲裁段为 `tseg1=14, tseg2=3, sjw=2, smp=0, brp=5`,20 TQ、80% 采样点;数据段为 `tseg1=10, tseg2=2, sjw=2, smp=0, brp=1`,15 TQ、80% 采样点。ZLG 运行时使用驱动内置的 `500000`/`2000000`、80% 参数项,并显式选择 Normal、ISO CAN FD。 + +## 服务端配置 + +```powershell +$env:COGNITIVE_AGENT_HARDWARE_EXECUTION_ENABLED = "true" +$env:COGNITIVE_AGENT_VEHICLE_CAN_ENABLED = "true" +$env:COGNITIVE_AGENT_SEAT_CAN_BACKEND = "zlgcan" +$env:COGNITIVE_AGENT_VEHICLE_CAN_BACKEND = "zlgcan" +$env:COGNITIVE_AGENT_SEAT_CAN_CHANNEL = "0" +$env:COGNITIVE_AGENT_VEHICLE_CAN_CHANNEL = "1" +$env:COGNITIVE_AGENT_VEHICLE_CAN_ARBITRATION_BITRATE = "500000" +$env:COGNITIVE_AGENT_VEHICLE_CAN_DATA_BITRATE = "2000000" +$env:COGNITIVE_AGENT_SEAT_CAN_TERMINATION_ENABLED = "true" +$env:COGNITIVE_AGENT_VEHICLE_CAN_TERMINATION_ENABLED = "false" +$env:COGNITIVE_AGENT_SEAT_FIRMWARE_PROFILES = "combined" +$env:COGNITIVE_AGENT_HARDWARE_APPROVAL_TOKEN = "" +``` + +真实执行会拒绝以下情况:两个逻辑总线配置为同一通道、CAN FD 时序不等于已验证值、ZLG 32 位运行时缺失、座椅固件未通过被动签名检查、车身动作不在可信能力目录内,或需要反馈的车身指令未收到对应状态帧。 + +## 一句话联动示例 + +`副驾座椅通风3档,同时打开空调,温度设为24度,风量3档` + +该请求生成独立的 `seat` 与 `native_climate` FunctionConfig/CommandPlan。真实执行时,两组执行器在独立线程中使用 CH0/CH1 通道视图;底层桥接仍统一串行化 SDK 调用,并将长时间接收切成不超过 20 ms 的时间片,以便两个通道交替收发。 + +## 验证要求 + +1. 先运行 `zlgcan_bridge.py --self-test`,确认经典 CAN 与 CAN FD API 导出及 ABI 结构尺寸。 +2. 在 ZCANPRO 确认 CH0/CH1 接线、终端电阻和总线状态正常,然后关闭其在线通道,避免与服务争用设备。 +3. 用 dry-run 核对两份计划:座椅报文位于 `seat_can`,车身报文位于 `body_can`;空调控制 ID 为 `0x1DE`。 +4. 以 hardware 模式执行低风险联动句,要求座椅板端反馈成功,且车身通道观测到对应状态反馈(空调为 `0x404`)。仅发送成功而无状态帧不能记为通过。 +5. 验证完成后关闭座椅热舒适功能、发送座椅 `STOP_ALL`,并按测试前状态恢复车身设备。 + +相关机器可读配置位于 `platforms/t2g_cabin_bench/` 与 `config/environments/t2g_cabin_bench.example.yaml`。 diff --git a/docs/workflows/t2g-seat-hardware-bench.md b/docs/workflows/t2g-seat-hardware-bench.md index dd3cf51..b794d74 100755 --- a/docs/workflows/t2g-seat-hardware-bench.md +++ b/docs/workflows/t2g-seat-hardware-bench.md @@ -42,13 +42,13 @@ powershell -ExecutionPolicy Bypass -File .\tools\build_seat_firmware.ps1 - 热管理命令:`0x29E/0x3CE`;档位反馈:`0x4FA`。 - 移动命令:`0x300`;系统 ACK:`0x301`;归一化位置:`0x302`;Hall/量程:`0x303`。 -- 电流诊断:`0x304` 四轴轮询,`0x305` 通风/加热;这些值用于台架可见性,当前保守阈值不能替代外部限流或量产保护。 +- 电流诊断:`0x304` 四轴轮询,`0x305` 通风/加热;动态模式:`0x306` 以100 ms周期报告模式、阶段、循环和活动轴。这些诊断值用于台架可见性,当前保守阈值不能替代外部限流或量产保护。 - Opcode 1 的 `ParamA` 为 1–10000 绝对位置;后端显式发送 30 s 超时覆盖值。 - 前端目标 `0%`/“归零”不是普通绝对位置,而是 `HOME_KNOWN_RANGE (0x0B)`;只有收到 `COMPLETE/OK`、Near、Hall≤2 和 PositionValid 才算成功。 - Opcode 3 的 `ParamA` 为持续时间,`ParamB` 为驱动等级×10(默认 90%)。 - `STOP_ALL` 的专用 ACK 为 4;完成/故障 TaskState 分别为 6/7。 -新版固件把 `0x304/0x305` 用于电流诊断,不能继续发送旧版身份请求。后端在任何控制帧之前被动观察 `0x301–0x305`、`0x4FA`、四个 MotorID、固件 revision 6 和各轴标称 MaxHall(允许 5% 台架差异);真实硬件执行启用后,未观察到完整签名会自动使用仓库内 IAR 镜像烧写,重新被动验证成功后继续原请求。烧写或复验失败时禁止发送座椅控制帧。 +新版固件把 `0x304/0x305` 用于电流诊断,并用`0x306`报告原生动态模式,不能继续发送旧版身份请求。后端在任何控制帧之前被动观察 `0x301–0x306`、`0x4FA`、四个 MotorID、固件 revision 13 和各轴标称 MaxHall(允许 5% 台架差异);真实硬件执行启用后,未观察到完整签名会自动使用仓库内 IAR 镜像烧写,重新被动验证成功后继续原请求。烧写或复验失败时禁止发送座椅控制帧。 ## 启用配置 @@ -99,6 +99,20 @@ COGNITIVE_AGENT_SEAT_HOME_TIMEOUT_S=120 2026-08-01 长序列中记录到的 M0/M2 无 Hall、M1 高电流无 Hall 故障,后续确认由水平、坐盆和靠背 Hall 地线断开引起,并非软件标定或堵转阈值问题。2026-08-02 重新接好地线并用手工 HIL GUI 验证后,仓库 revision 6 自动烧写成功,四轴均从机械零位以 `PositionValid=1` 启动;自动前端 HIL 的 33 条热功能、单轴、四轴归零、组合和预设模式用例全部通过。因此测试清单中的临时 `safety_blocked` 已撤销。若以后再次出现同类现象,仍应以命令期间 `0x303` Hall 与 `0x304` 电流联合诊断,不能通过提高 Duty 或阈值掩盖线路故障。 +2026-08-03 revision 7加入`START_DYNAMIC_MODE(0x0E)`、`STOP_DYNAMIC_MODE(0x0F)`和`0x306`;revision 8验证了连续循环、循环中停止、堵转/无运动保护和ECU启动累计600 s自动停止的公共动态模式运行时。旧ModeID 1轨迹现已从固件、长期库和前端能力中移除,revision 11复用ModeID 1实现木马模式。 + +2026-08-04 revision 8复测时,公共动态运行时曾单次连续运行600.024 s并自动返回全零IDLE且无FAULT;循环中`STOP_DYNAMIC`也通过。同期动态摇篮被实台M1坐盆轴的真实STALL阻断,独立单轴复测同样在Hall约169失速;后续已恢复机构运动并保留安全全停,未通过降低目标或屏蔽堵转保护改判。 + +同日revision 9把摇篮改为位置闭环会合,不再使用固定30 s阶段。M1以`0x0B`从Hall 169连续回近端0且保持MaxHall=374后,Step 1→2实测17.329 s、启动/到位离散0.077/0.338 s;Step 2→3实测15.155 s、离散0.079/0.495 s;目标精确、CycleIndex进入1、下一轮四轴启动离散0.082 s、停止全零,PASS。证据见`artifacts/hil/dynamic_cradle_rev9_20260804.json`。Step 3和Step 1坐标相同,其边界是零位移原子换轮;可观测同步动作是紧随其后的下一轮Step 1→2四轴启动。 + +同日revision 10移除revision 9中“M1先走10 Hall、等待其他轴预备到位后再单独追赶”的临时避让。正向/返回四轴从阶段开始即全程联动;水平/靠背达到约25%行程时,坐盆已分别完成44.0%/39.0%,启动离散0.070/0.050 s,到位离散0.342/0.339 s,下一轮启动离散0.051 s,无FAULT并可正常停止。证据见`artifacts/hil/dynamic_cradle_rev10_continuous_cruise_20260804.json`。 + +同日revision 11移除旧ModeID 1轨迹并加入木马模式。入口为`[320,190,500,430]`,连续端点为前俯`[290,220,460,400]`与后仰`[350,160,540,460]`;稳态完整循环约9.0 s。实测两个稳态半周期四轴启动离散0.080/0.079 s、到位离散0.234/0.232 s;水平轴到25%时坐盆已达41.7%/36.7%,目标误差不超过1 Hall,自动续环与循环中停止均PASS。证据见`artifacts/hil/rocking_horse_rev11_20260804.json`。 + +同日revision 12把木马坐盆端点由`220↔160`扩大为`250↔130` Hall,并把M1巡航占空比由50%提升为90%。峰峰上下行程由60增至120 Hall,折算垂直分量约由9 mm增至18 mm;稳态前俯/后仰启动离散0.054/0.081 s,到位离散0.389/0.182 s,水平轴到25%时坐盆已完成46.6%/35.8%,完整循环约9.2 s。目标误差不超过2 Hall、无FAULT、自动续环与停止全零均PASS。证据见`artifacts/hil/rocking_horse_rev12_cushion_amplitude_20260804.json`。 + +同日revision 13加入坐盆斜向运动的水平前馈补偿:木马M0端点由`290↔350`扩大为`270↔370` Hall,峰峰行程100 Hall,巡航Duty由50%提升为90%。按台架M0 MaxHall=499换算水平峰峰行程约43.1 mm,扣除M1斜向行程估算的16.4 mm反向水平分量后,净水平摆幅约26.7 mm。稳态前俯/后仰启动离散0.077/0.052 s,到位离散0.337/0.182 s;巡航检查点四轴均持续推进,目标误差不超过1 Hall、无FAULT、自动续环与停止全零均PASS。证据见`artifacts/hil/rocking_horse_rev13_horizontal_compensation_20260804.json`。 + 2026-08-02 时长/超量程规则完成后,扩充清单的真实回归结果为 161/161 通过、0 失败、0 `safety_blocked`,最终清理和独立物理复核均通过。报告位于 `artifacts/hil/seat_frontend_hil_20260802_full_timed_overflow.json`;复核时加热/通风为 0 档,M0/M1/M2/M3 均为 0%,全部 `Position_Valid=1`。 2026-08-02 增加 GPT-5.6-sol 模糊意图与位置记忆同步后,完整回归为 162/162 通过;“前舱空间太挤了,把座椅调整到舒服的位置”明确记录 `provider_used=openai:gpt-5.6-sol`,物理目标为 M0/M1/M2/M3=`80/30/35/10%`。报告位于 `artifacts/hil/seat_frontend_hil_20260802_full_gpt56_position_sync.json`;最终独立复核仍为热管理关闭、四轴 0% 且全部 `Position_Valid=1`。 diff --git a/domains/climate/config/capabilities.yaml b/domains/climate/config/capabilities.yaml index a6666b3..55089ec 100755 --- a/domains/climate/config/capabilities.yaml +++ b/domains/climate/config/capabilities.yaml @@ -71,14 +71,14 @@ spec: risk_level: low confirmation_policy: on_ambiguity - name: climate.set_outlet_mode - description: Direct a zone outlet toward the face or feet. + description: Select a whole-cabin vehicle CAN airflow mode; face and feet remain valid zone-level virtual controls. target_devices: [hvac] - target_scopes: [driver, passenger, rear_left, rear_right] + target_scopes: [driver, passenger, rear_left, rear_right, vehicle] parameters: - name: mode type: string required: true - allowed_values: [face, feet] + allowed_values: [face, face_feet, feet, feet_defrost, defrost, face_feet_defrost, face_defrost] description: Absolute outlet direction. risk_level: low confirmation_policy: on_ambiguity @@ -94,3 +94,15 @@ spec: description: Absolute front defrost state. risk_level: medium confirmation_policy: on_ambiguity + - name: climate.set_control_mode + description: Select manual or automatic HVAC control through the verified vehicle CAN command. + target_devices: [hvac] + target_scopes: [vehicle] + parameters: + - name: mode + type: string + required: true + allowed_values: [manual, auto] + description: Absolute HVAC control strategy. + risk_level: low + confirmation_policy: on_ambiguity diff --git a/domains/climate/schemas/function-parameters.schema.json b/domains/climate/schemas/function-parameters.schema.json index 226e937..60c09d1 100755 --- a/domains/climate/schemas/function-parameters.schema.json +++ b/domains/climate/schemas/function-parameters.schema.json @@ -63,7 +63,30 @@ "type": "object", "additionalProperties": false, "required": ["mode"], - "properties": {"mode": {"enum": ["face", "feet"]}} + "properties": { + "mode": { + "enum": [ + "face", + "face_feet", + "feet", + "feet_defrost", + "defrost", + "face_feet_defrost", + "face_defrost" + ] + } + } + } + } + }, + { + "properties": { + "capability": {"const": "climate.set_control_mode"}, + "parameters": { + "type": "object", + "additionalProperties": false, + "required": ["mode"], + "properties": {"mode": {"enum": ["manual", "auto"]}} } } } diff --git a/domains/roof/config/capabilities.yaml b/domains/roof/config/capabilities.yaml index 1b62af4..c3e87d4 100755 --- a/domains/roof/config/capabilities.yaml +++ b/domains/roof/config/capabilities.yaml @@ -7,6 +7,18 @@ metadata: spec: domain: roof capabilities: + - name: roof.set_shade_motion + description: Open, close, half-open, or stop the panoramic roof shade through vehicle CAN. + target_devices: [roof_shade] + target_scopes: [vehicle] + parameters: + - name: motion + type: string + required: true + allowed_values: [open, close, half, stop] + description: Explicit shade motion command. + risk_level: high + confirmation_policy: on_ambiguity - name: roof.set_shade_position description: Set the rear panoramic roof shade to an absolute position, 0 closed and 100 open. target_devices: [roof_shade] diff --git a/domains/roof/schemas/function-parameters.schema.json b/domains/roof/schemas/function-parameters.schema.json index 6dd2bb1..c421996 100755 --- a/domains/roof/schemas/function-parameters.schema.json +++ b/domains/roof/schemas/function-parameters.schema.json @@ -23,6 +23,17 @@ } } }, + { + "properties": { + "capability": {"const": "roof.set_shade_motion"}, + "parameters": { + "type": "object", + "additionalProperties": false, + "required": ["motion"], + "properties": {"motion": {"enum": ["open", "close", "half", "stop"]}} + } + } + }, { "properties": { "capability": {"const": "roof.set_transmittance"}, diff --git a/domains/seat/can/seat-motion-hardware-matrix.yaml b/domains/seat/can/seat-motion-hardware-matrix.yaml index 8c56694..bd24215 100755 --- a/domains/seat/can/seat-motion-hardware-matrix.yaml +++ b/domains/seat/can/seat-motion-hardware-matrix.yaml @@ -89,6 +89,18 @@ messages: - {name: Current_Raw, start_bit: 16, bit_length: 16} - {name: Current_Baseline_Raw, start_bit: 32, bit_length: 16} - {name: Stall_Current_Delta_Threshold_Raw, start_bit: 48, bit_length: 16} + - name: T2G_Seat_Dynamic_Mode_Status_306 + frame_id: 0x306 + role: feedback + minimum_payload_bytes: 8 + signals: + - {name: Dynamic_Mode_ID, start_bit: 0, bit_length: 8} + - {name: Dynamic_State, start_bit: 8, bit_length: 8} + - {name: Dynamic_Phase, start_bit: 16, bit_length: 8} + - {name: Dynamic_Active_Mask, start_bit: 24, bit_length: 4} + - {name: Dynamic_Fault_Mask, start_bit: 28, bit_length: 4} + - {name: Dynamic_Cycle_Index, start_bit: 32, bit_length: 16} + - {name: Dynamic_Phase_Elapsed_Ms, start_bit: 48, bit_length: 16} - name: T2G_Seat_Thermal_Current_Diagnostic_305 frame_id: 0x305 role: feedback diff --git a/domains/seat/can/signal-mapping.hardware.yaml b/domains/seat/can/signal-mapping.hardware.yaml index 90190ce..9dd0b34 100755 --- a/domains/seat/can/signal-mapping.hardware.yaml +++ b/domains/seat/can/signal-mapping.hardware.yaml @@ -3,7 +3,7 @@ kind: SignalMapping metadata: id: seat-t2g-bench-hardware-mapping name: Verified T2G seat bench mapping - version: 3.0.0 + version: 3.1.0 description: Front-passenger-only mapping implemented by the unified Seat_Controller_demo IAR firmware. spec: domain: seat @@ -80,3 +80,23 @@ spec: feedback_signal: Value_X100 calibration_ref: ../../../platforms/t2g_seat_bench/calibration/seat.yaml unit: percent + - capability: seat.start_dynamic_mode + parameter: mode_id + target_zone: front_right + physical_target_alias: t2g_primary_seat + compiler_handler: compile_t2g_dynamic_mode + bus: seat_can + message: T2G_Seat_Move_Command_300 + signal: Param_A + feedback_message: T2G_Seat_Dynamic_Mode_Status_306 + feedback_signal: Dynamic_Mode_ID + unit: enum + - capability: seat.stop_dynamic_mode + target_zone: front_right + physical_target_alias: t2g_primary_seat + compiler_handler: compile_t2g_dynamic_mode + bus: seat_can + message: T2G_Seat_Move_Command_300 + feedback_message: T2G_Seat_Dynamic_Mode_Status_306 + feedback_signal: Dynamic_State + unit: enum diff --git a/domains/seat/config/capabilities.yaml b/domains/seat/config/capabilities.yaml index 48a2de8..3f7d862 100755 --- a/domains/seat/config/capabilities.yaml +++ b/domains/seat/config/capabilities.yaml @@ -3,7 +3,7 @@ kind: CapabilityCatalog metadata: id: seat-capabilities name: Seat capabilities - version: 1.3.0 + version: 1.4.0 spec: domain: seat capabilities: @@ -27,11 +27,13 @@ spec: - name: level type: integer required: false - description: Desired 1-3 comfort level; simulated until a level command signal is supplied. + description: Desired 1-5 comfort level; levels 4-5 require the vehicle native-CAN backend. allowed_values: - 1 - 2 - 3 + - 4 + - 5 risk_level: medium confirmation_policy: on_ambiguity - name: seat.set_heating @@ -53,11 +55,13 @@ spec: - name: level type: integer required: false - description: Desired 1-3 comfort level; simulated until a level command signal is supplied. + description: Desired 1-5 comfort level; levels 4-5 require the vehicle native-CAN backend. allowed_values: - 1 - 2 - 3 + - 4 + - 5 risk_level: medium confirmation_policy: on_ambiguity - name: seat.set_longitudinal_position @@ -198,6 +202,38 @@ spec: description: Absolute normalized leg-rest extension target. risk_level: high confirmation_policy: on_ambiguity + - name: seat.start_dynamic_mode + description: >- + Start a firmware-owned cyclic four-axis trajectory on the front-passenger seat. + Mode 1 is the short-travel rocking-horse pitch cycle; mode 2 is the long-travel + dynamic cradle. Both use four-axis target rendezvous, repeat until explicitly + stopped, and stop automatically when the firmware-enforced ten-minute runtime + limit expires. A target phase faults safely if it cannot finish within its limit. + target_devices: + - seat_motion_controller + target_scopes: + - passenger + parameters: + - name: mode_id + type: integer + required: true + description: Native dynamic mode identifier implemented by Seat_Controller_demo. + allowed_values: + - 1 + - 2 + risk_level: high + confirmation_policy: on_ambiguity + - name: seat.stop_dynamic_mode + description: >- + Stop whichever firmware-owned dynamic trajectory is currently running on the + front-passenger seat. Use for natural-language stop, close, cancel, or end requests. + target_devices: + - seat_motion_controller + target_scopes: + - passenger + parameters: [] + risk_level: low + confirmation_policy: never - name: seat.save_posture_preset description: >- Save the current five-axis posture of the front-passenger seat as a conversation-owned named preset. diff --git a/domains/seat/schemas/function-parameters.schema.json b/domains/seat/schemas/function-parameters.schema.json index 76dc051..5a343d1 100755 --- a/domains/seat/schemas/function-parameters.schema.json +++ b/domains/seat/schemas/function-parameters.schema.json @@ -22,7 +22,7 @@ "required": ["state"], "properties": { "state": {"type": "string", "enum": ["on", "off"]}, - "level": {"type": "integer", "minimum": 1, "maximum": 3} + "level": {"type": "integer", "minimum": 1, "maximum": 5} } } } @@ -37,7 +37,7 @@ "required": ["state"], "properties": { "state": {"type": "string", "enum": ["on", "off"]}, - "level": {"type": "integer", "minimum": 1, "maximum": 3} + "level": {"type": "integer", "minimum": 1, "maximum": 5} } } } @@ -65,6 +65,31 @@ } } } + }, + { + "type": "object", + "properties": { + "capability": {"const": "seat.start_dynamic_mode"}, + "parameters": { + "type": "object", + "additionalProperties": false, + "required": ["mode_id"], + "properties": { + "mode_id": {"type": "integer", "enum": [1, 2]} + } + } + } + }, + { + "type": "object", + "properties": { + "capability": {"const": "seat.stop_dynamic_mode"}, + "parameters": { + "type": "object", + "additionalProperties": false, + "maxProperties": 0 + } + } } ] } diff --git a/domains/seat/src/seat_domain/compiler.py b/domains/seat/src/seat_domain/compiler.py index 84dcc53..29e4d6c 100755 --- a/domains/seat/src/seat_domain/compiler.py +++ b/domains/seat/src/seat_domain/compiler.py @@ -24,7 +24,7 @@ MOTION_STATUS_MESSAGES = { class SeatCompiler: - version = "1.1.0" + version = "1.2.0" def __init__(self, mapping_path: Path): self.mapping = yaml.safe_load(mapping_path.read_text(encoding="utf-8")) @@ -42,6 +42,49 @@ class SeatCompiler: motion_index = 0 for operation in function_config["spec"]["operations"]: + if operation["capability"] == "seat.start_dynamic_mode": + mode_id = int(operation["parameters"]["mode_id"]) + if mode_id not in {1, 2}: + raise ValueError("dynamic seat mode_id must be 1 or 2") + motion_commands.append( + { + "id": f"dynamic_{operation['id']}", + "operation_ref": operation["id"], + "bus": "seat_can", + "message": "Seat_Dynamic_Mode_Virtual", + "signals": {"Dynamic_Mode_ID": mode_id}, + "send_offset_ms": motion_index * 50, + "completion": { + "message": "Seat_Dynamic_Mode_Status_Virtual", + "signal": "Dynamic_Mode_ID", + "operator": "eq", + "value": mode_id, + "timeout_ms": int(operation.get("timeout_ms", 5000)), + }, + } + ) + motion_index += 1 + continue + if operation["capability"] == "seat.stop_dynamic_mode": + motion_commands.append( + { + "id": f"dynamic_stop_{operation['id']}", + "operation_ref": operation["id"], + "bus": "seat_can", + "message": "Seat_Dynamic_Mode_Stop_Virtual", + "signals": {"Dynamic_State": 0}, + "send_offset_ms": motion_index * 50, + "completion": { + "message": "Seat_Dynamic_Mode_Status_Virtual", + "signal": "Dynamic_State", + "operator": "eq", + "value": 0, + "timeout_ms": int(operation.get("timeout_ms", 5000)), + }, + } + ) + motion_index += 1 + continue mapping = self._mapping_for(operation["capability"], operation["target"]["zone"]) handler = mapping["compiler_handler"] if handler == "compile_binary_control": diff --git a/domains/seat/src/seat_domain/executor.py b/domains/seat/src/seat_domain/executor.py index 8fd7505..c7161b7 100755 --- a/domains/seat/src/seat_domain/executor.py +++ b/domains/seat/src/seat_domain/executor.py @@ -58,6 +58,15 @@ class VirtualSeatExecutor: operations = [operation_by_id[item] for item in operation_ids] if command["message"] == "Seat_Thermal_Control_42A": results.extend(self._execute_thermal(command, operations)) + elif command["message"] in { + "Seat_Dynamic_Mode_Virtual", + "Seat_Dynamic_Mode_Stop_Virtual", + }: + if len(operations) != 1: + raise ValueError( + "A dynamic-mode command must reference exactly one operation" + ) + results.append(self._execute_dynamic_mode(command, operations[0])) else: if len(operations) != 1: raise ValueError("A motion command must reference exactly one operation") @@ -134,6 +143,62 @@ class VirtualSeatExecutor: ) return results + @staticmethod + def _execute_dynamic_mode( + command: dict[str, Any], operation: dict[str, Any] + ) -> dict[str, Any]: + if operation["capability"] == "seat.stop_dynamic_mode": + return { + "ref": operation["id"], + "domain": "seat", + "status": "succeeded", + "message": "虚拟控制器已停止动态座椅模式", + "telemetry": { + "dynamic_mode_id": 0, + "dynamic_mode_name": "", + "dynamic_state": "idle", + "repeat": "none", + "max_runtime_ms": 600_000, + "command_frame": { + "frame_id": "virtual", + "data_hex": "dynamic-stop", + }, + "feedback_frame": { + "frame_id": "virtual", + "data_hex": "dynamic-idle", + }, + "simulated": True, + }, + } + mode_id = int(operation["parameters"]["mode_id"]) + cycle_ms = None + mode_name = "木马模式" if mode_id == 1 else "动态摇篮模式" + return { + "ref": operation["id"], + "domain": "seat", + "status": "succeeded", + "message": ( + f"虚拟控制器已启动{mode_name},持续循环至停止指令或十分钟上限" + ), + "telemetry": { + "dynamic_mode_id": mode_id, + "dynamic_mode_name": mode_name, + "dynamic_state": "running", + "repeat": "until_stopped_or_timeout", + "max_runtime_ms": 600_000, + "cycle_duration_ms": cycle_ms, + "command_frame": { + "frame_id": "virtual", + "data_hex": f"dynamic-mode-{mode_id}", + }, + "feedback_frame": { + "frame_id": "virtual", + "data_hex": f"dynamic-running-{mode_id}", + }, + "simulated": True, + }, + } + def _execute_motion( self, command: dict[str, Any], diff --git a/domains/seat/src/seat_domain/generator.py b/domains/seat/src/seat_domain/generator.py index d67e875..d52ca63 100755 --- a/domains/seat/src/seat_domain/generator.py +++ b/domains/seat/src/seat_domain/generator.py @@ -20,6 +20,9 @@ MOTION_CAPABILITIES = { "legrest_height": "seat.set_legrest_height", "legrest_extension": "seat.set_legrest_extension", } +DYNAMIC_MODE_CAPABILITY = "seat.start_dynamic_mode" +DYNAMIC_MODE_STOP_CAPABILITY = "seat.stop_dynamic_mode" +DYNAMIC_MODE_MAX_RUNTIME_MS = 600_000 def _now() -> str: @@ -31,6 +34,36 @@ def build_intent_ir( ) -> dict[str, Any]: requests = [] for action in parsed["actions"]: + if action.get("action_type") == "dynamic_mode_stop": + requests.append( + { + "domain": "seat", + "goal": f"Stop the active dynamic seat mode on {action['target']}", + "target": TARGETS[action["target"]], + "parameters": {"capability": DYNAMIC_MODE_STOP_CAPABILITY}, + "source_span": utterance, + } + ) + continue + if action.get("action_type") == "dynamic_mode": + requests.append( + { + "domain": "seat", + "goal": ( + f"Start bounded cyclic dynamic seat mode {action['mode_name']} " + f"on {action['target']}" + ), + "target": TARGETS[action["target"]], + "parameters": { + "capability": DYNAMIC_MODE_CAPABILITY, + "mode_id": action["mode_id"], + "repeat": "until_stopped_or_timeout", + "max_runtime_ms": DYNAMIC_MODE_MAX_RUNTIME_MS, + }, + "source_span": utterance, + } + ) + continue if action.get("action_type") == "position": parameters = { "axis": action["axis"], @@ -158,6 +191,42 @@ def build_function_config( "The supplied matrix is partial; this configuration is eligible for virtual execution only." ] for index, action in enumerate(parsed["actions"], start=1): + if action.get("action_type") == "dynamic_mode_stop": + operation_id = f"{action['target']}_dynamic_mode_stop" + operations.append( + { + "id": operation_id, + "capability": DYNAMIC_MODE_STOP_CAPABILITY, + "target": TARGETS[action["target"]], + "parameters": {}, + "timeout_ms": 5000, + "failure_policy": "abort", + } + ) + assumptions.append( + f"Operation {operation_id} stops the firmware-owned loop and " + "requires 0x306 to return IDLE." + ) + continue + if action.get("action_type") == "dynamic_mode": + operation_id = f"{action['target']}_dynamic_mode_{action['mode_id']}" + operations.append( + { + "id": operation_id, + "capability": DYNAMIC_MODE_CAPABILITY, + "target": TARGETS[action["target"]], + "parameters": {"mode_id": int(action["mode_id"])}, + "timeout_ms": 5000, + "failure_policy": "abort", + } + ) + assumptions.append( + f"Operation {operation_id} starts a firmware-owned cyclic loop with " + f"a {DYNAMIC_MODE_MAX_RUNTIME_MS} ms safety cap; " + "completion means that the controller acknowledged the mode and " + "reported it through 0x306, not that the loop terminated." + ) + continue if action.get("action_type") == "position": operation_id = ( f"{action['target']}_{action['axis']}_{action['position_pct']}pct" diff --git a/domains/seat/src/seat_domain/hardware_compiler.py b/domains/seat/src/seat_domain/hardware_compiler.py index 2bb0ef0..318f9cd 100755 --- a/domains/seat/src/seat_domain/hardware_compiler.py +++ b/domains/seat/src/seat_domain/hardware_compiler.py @@ -16,7 +16,7 @@ STATE_VALUES = {"on": 1, "off": 2} class T2GSeatCompiler: """Deterministic compiler for the HIL-verified T2G seat bench protocol.""" - version = "2.0.0" + version = "2.1.0" def __init__(self, mapping_path: Path, calibration_path: Path): self.mapping = yaml.safe_load(mapping_path.read_text(encoding="utf-8")) @@ -41,13 +41,29 @@ class T2GSeatCompiler: for item in operations if item["capability"] in {"seat.set_ventilation", "seat.set_heating"} ] - motion_operations = [item for item in operations if item not in thermal_operations] + dynamic_operations = [ + item + for item in operations + if item["capability"] in { + "seat.start_dynamic_mode", + "seat.stop_dynamic_mode", + } + ] + motion_operations = [ + item + for item in operations + if item not in thermal_operations and item not in dynamic_operations + ] commands: list[dict[str, Any]] = [] if thermal_operations: commands.extend( self._compile_thermal(thermal_operations, actuator_state or {}) ) + if dynamic_operations: + commands.extend( + self._compile_dynamic_mode(dynamic_operations, len(commands)) + ) commands.extend(self._compile_motion(motion_operations, len(commands))) canonical = json.dumps( @@ -257,6 +273,55 @@ class T2GSeatCompiler: commands.append(command) return commands + def _compile_dynamic_mode( + self, + operations: list[dict[str, Any]], + command_offset: int, + ) -> list[dict[str, Any]]: + if len(operations) != 1: + raise ValueError("one command may start or stop only one dynamic seat mode") + operation = operations[0] + self._require_supported(operation) + stopping = operation["capability"] == "seat.stop_dynamic_mode" + mode_id = 0 if stopping else int(operation["parameters"]["mode_id"]) + if not stopping and mode_id not in {1, 2}: + raise ValueError("T2G dynamic mode_id must be 1 or 2") + return [ + { + "id": f"t2g_dynamic_{operation['id']}", + "operation_ref": operation["id"], + "bus": "seat_can", + "message": "T2G_Seat_Move_Command_300", + "signals": { + "Direction": 0, + "Motor_Selector": 0, + "Opcode": int( + self.protocol[ + "stop_dynamic_mode_opcode" + if stopping + else "start_dynamic_mode_opcode" + ] + ), + "Param_A": mode_id, + "Param_B": 0, + "Protocol_Version": int(self.protocol["version"]), + "Sequence": 0, + }, + "send_offset_ms": ( + command_offset * int(self.protocol["inter_axis_settle_ms"]) + ), + "completion": { + "message": "T2G_Seat_Dynamic_Mode_Status_306", + "signal": "Dynamic_State" if stopping else "Dynamic_Mode_ID", + "operator": "eq", + "value": 0 if stopping else mode_id, + "state_signal": "Dynamic_State", + "accepted_states": [0] if stopping else [1, 2], + "timeout_ms": max(int(operation.get("timeout_ms", 0)), 5000), + }, + } + ] + def _compile_timed_motion( self, operation: dict[str, Any], diff --git a/domains/seat/src/seat_domain/hardware_executor.py b/domains/seat/src/seat_domain/hardware_executor.py index 51b8b99..2ecde57 100755 --- a/domains/seat/src/seat_domain/hardware_executor.py +++ b/domains/seat/src/seat_domain/hardware_executor.py @@ -156,7 +156,11 @@ class HardwareSeatExecutor: } results: list[dict[str, Any]] = [] commands = command_plan["spec"]["commands"] - has_motion = any(item["message"] == "T2G_Seat_Move_Command_300" for item in commands) + has_motion = any( + item["message"] == "T2G_Seat_Move_Command_300" + and int(item.get("signals", {}).get("Opcode", 0)) not in {0x09, 0x0F} + for item in commands + ) bus: CanBus | None = None motion_armed = False position_sync_required = False @@ -249,7 +253,12 @@ class HardwareSeatExecutor: elif command["message"] == "T2G_Seat_Thermal_Control_29E": results.extend(self._execute_thermal(bus, command, referenced)) elif command["message"] == "T2G_Seat_Move_Command_300": - results.extend(self._execute_motion(bus, command, referenced)) + if int(command["signals"]["Opcode"]) in {0x0E, 0x0F}: + results.extend( + self._execute_dynamic_mode(bus, command, referenced) + ) + else: + results.extend(self._execute_motion(bus, command, referenced)) else: raise HardwareExecutionError( f"hardware executor refuses unknown message {command['message']}" @@ -697,6 +706,94 @@ class HardwareSeatExecutor: ) return output + def _execute_dynamic_mode( + self, + bus: CanBus, + command: dict[str, Any], + operations: list[dict[str, Any]], + ) -> list[dict[str, Any]]: + if len(operations) != 1: + raise HardwareExecutionError( + "a T2G dynamic-mode frame must reference exactly one operation" + ) + operation = operations[0] + stopping = operation["capability"] == "seat.stop_dynamic_mode" + mode_id = 0 if stopping else int(operation["parameters"]["mode_id"]) + if not stopping and mode_id not in {1, 2}: + raise HardwareExecutionError("T2G dynamic mode_id must be 1 or 2") + + signals = dict(command["signals"]) + sequence = self._next_sequence() + signals["Sequence"] = sequence + command_frame = self._send_encoded(bus, command["message"], signals) + ack_values, ack_frame = self._wait_ack( + bus, sequence, 0x0F if stopping else 0x0E + ) + + completion = command["completion"] + + def matches(values: dict[str, int], _: CanFrame) -> bool: + if stopping: + return ( + values["Dynamic_Mode_ID"] == 0 + and values["Dynamic_State"] == 0 + ) + return ( + values["Dynamic_Mode_ID"] == mode_id + and values["Dynamic_State"] in set( + completion.get("accepted_states", [1, 2]) + ) + ) + + status_values, status_frame = self._receive_until( + bus, + 0x306, + int(completion["timeout_ms"]), + matches, + ) + mode_name = ( + "" + if stopping + else "木马模式" + if mode_id == 1 + else "动态摇篮模式" + ) + return [ + { + "ref": operation["id"], + "domain": "seat", + "status": "succeeded", + "message": ( + "physical 0x301/0x306 confirmed the dynamic seat mode is stopped" + if stopping + else ( + f"physical 0x301/0x306 confirmed {mode_name} is active; " + "firmware will repeat it until stopped or the ten-minute cap" + ) + ), + "telemetry": { + "dynamic_mode_id": mode_id, + "dynamic_mode_name": mode_name, + "dynamic_state": status_values["Dynamic_State"], + "dynamic_phase": status_values["Dynamic_Phase"], + "dynamic_cycle_index": status_values["Dynamic_Cycle_Index"], + "dynamic_phase_elapsed_ms": status_values[ + "Dynamic_Phase_Elapsed_Ms" + ], + "repeat": ( + "none" if stopping else "until_stopped_or_timeout" + ), + "max_runtime_ms": 600_000, + "command_frame": command_frame.public(), + "ack_frame": ack_frame.public(), + "ack_values": ack_values, + "feedback_frame": status_frame.public(), + "hardware_feedback": True, + "simulated": False, + }, + } + ] + def _execute_motion( self, bus: CanBus, diff --git a/domains/seat/src/seat_domain/validator.py b/domains/seat/src/seat_domain/validator.py index d1b05dd..65cdd55 100755 --- a/domains/seat/src/seat_domain/validator.py +++ b/domains/seat/src/seat_domain/validator.py @@ -82,6 +82,21 @@ def validate_semantics( "message": "当前所有座椅能力仅支持前排副驾。", } ) + if action.get("action_type") == "dynamic_mode_stop": + has_motion = True + continue + if action.get("action_type") == "dynamic_mode": + has_motion = True + if action.get("mode_id") not in {1, 2}: + issues.append( + { + "severity": "error", + "code": "UNSUPPORTED_DYNAMIC_MODE", + "path": f"{path}.mode_id", + "message": "动态座椅模式编号必须是 1 或 2。", + } + ) + continue if action.get("action_type") == "position": has_motion = True axis = action.get("axis") diff --git a/domains/seat/tests/integration/test_seat_service.py b/domains/seat/tests/integration/test_seat_service.py index 7b26b6e..760823d 100755 --- a/domains/seat/tests/integration/test_seat_service.py +++ b/domains/seat/tests/integration/test_seat_service.py @@ -32,6 +32,41 @@ class SeatServiceIntegrationTests(unittest.TestCase): for event in result["trace_events"]: self.assertEqual(self.service.contracts.validate(event), []) + def test_dynamic_mode_runs_until_explicit_natural_language_stop(self) -> None: + conversation_id = "conv-dynamic-stop" + started = self.service.process( + "\u5f00\u542f\u52a8\u6001\u6447\u7bee\u6a21\u5f0f", + provider="local", + conversation_id=conversation_id, + vehicle_id="denza_n7", + ) + stopped = self.service.process( + "\u5173\u95ed\u52a8\u6001\u6447\u7bee\u6a21\u5f0f", + provider="local", + conversation_id=conversation_id, + vehicle_id="denza_n7", + ) + + self.assertEqual(started["status"], "succeeded") + self.assertEqual( + started["actuator_state"]["passenger"]["dynamic_mode"], + { + "mode_id": 2, + "name": "\u52a8\u6001\u6447\u7bee\u6a21\u5f0f", + "state": "running", + "repeat": "until_stopped_or_timeout", + "max_runtime_ms": 600_000, + }, + ) + self.assertEqual(stopped["status"], "succeeded") + operation = stopped["function_config"]["spec"]["operations"][0] + self.assertEqual(operation["capability"], "seat.stop_dynamic_mode") + self.assertEqual(operation["parameters"], {}) + self.assertEqual( + stopped["actuator_state"]["passenger"]["dynamic_mode"]["state"], + "idle", + ) + def test_gear_request_is_preserved_and_simulated(self) -> None: result = self.service.process("副驾座椅加热开到三档", provider="local") diff --git a/domains/seat/tests/unit/test_t2g_hardware.py b/domains/seat/tests/unit/test_t2g_hardware.py index cc04139..d41454e 100755 --- a/domains/seat/tests/unit/test_t2g_hardware.py +++ b/domains/seat/tests/unit/test_t2g_hardware.py @@ -16,6 +16,7 @@ if str(SEAT_SOURCE) not in sys.path: from cognitive_agent.infrastructure.can.gateway import CanFrame, CanGatewayError # noqa: E402 from cognitive_agent.application.seat_service import SeatDemoService # noqa: E402 +from cognitive_agent.runtime.contracts import ContractValidator # noqa: E402 from cognitive_agent.infrastructure.can.hardware import ( # noqa: E402 HardwareSafetyError, SeatHardwareSettings, @@ -242,6 +243,34 @@ class ReactiveFakeBus: }, ) ) + if opcode == 14: + self.received.append( + self._frame( + "T2G_Seat_Dynamic_Mode_Status_306", + { + "Dynamic_Mode_ID": command["Param_A"], + "Dynamic_State": 2, + "Dynamic_Phase": 2 if command["Param_A"] == 1 else 5, + "Dynamic_Active_Mask": 0x0F, + "Dynamic_Cycle_Index": 0, + "Dynamic_Phase_Elapsed_Ms": 100, + }, + ) + ) + if opcode == 15: + self.received.append( + self._frame( + "T2G_Seat_Dynamic_Mode_Status_306", + { + "Dynamic_Mode_ID": 0, + "Dynamic_State": 0, + "Dynamic_Phase": 0, + "Dynamic_Active_Mask": 0, + "Dynamic_Cycle_Index": 0, + "Dynamic_Phase_Elapsed_Ms": 0, + }, + ) + ) if opcode == 0x0B and self.complete_motion: motor = command["Motor_Selector"] self.position_valid = True @@ -447,7 +476,7 @@ class ProtocolSignatureFakeBus: self.received: deque[CanFrame] = deque() self.closed = False if signature: - self.received.append(CanFrame(0x301, bytes.fromhex("10 00 00 00 00 00 F0 60"))) + self.received.append(CanFrame(0x301, bytes.fromhex("10 00 00 00 00 00 F0 D0"))) for motor in range(4): self.received.append( CanFrame(0x302, bytes([motor, 0, 0x08, 0, 0, 0, 0, 0])) @@ -464,6 +493,7 @@ class ProtocolSignatureFakeBus: CanFrame(0x304, bytes([motor, 3, 0, 0, 0, 0, 0xF4, 0x01])) ) self.received.append(CanFrame(0x305, bytes(8))) + self.received.append(CanFrame(0x306, bytes(8))) self.received.append(CanFrame(0x4FA, bytes.fromhex("09 00 00 00 00 00 00 00"))) def send(self, arbitration_id: int, data: bytes) -> CanFrame: @@ -485,6 +515,29 @@ class FailingProtocolSignatureBus(ProtocolSignatureFakeBus): raise RuntimeError("CAN receive failed during passive protocol probe") +class LegacyProtocolSignatureFakeBus(ProtocolSignatureFakeBus): + def __init__(self): + super().__init__(False) + self.received.append(CanFrame(0x301, bytes.fromhex("10 00 00 00 00 00 F0 00"))) + for motor in range(4): + self.received.append( + CanFrame(0x302, bytes([motor, 0, 0x08, 0, 0, 0, 0, 0])) + ) + for motor, maximum in enumerate((480, 374, 917, 647)): + self.received.append( + CanFrame( + 0x303, + bytes([motor, 0, 0, 0, maximum & 0xFF, maximum >> 8, 0, 0]), + ) + ) + for motor in range(4): + self.received.append( + CanFrame(0x304, bytes([motor, 3, 0, 0, 0, 0, 0xF4, 0x01])) + ) + self.received.append(CanFrame(0x305, bytes(8))) + self.received.append(CanFrame(0x4FA, bytes(8))) + + class FakeProgrammer: def __init__(self): self.calls = 0 @@ -511,6 +564,7 @@ class T2GHardwareTests(unittest.TestCase): ROOT / "domains" / "seat" / "can" / "signal-mapping.hardware.yaml", ROOT / "platforms" / "t2g_seat_bench" / "calibration" / "seat.yaml", ) + self.contracts = ContractValidator(ROOT) def test_compiler_emits_verified_heating_payload(self) -> None: config = function_config( @@ -569,6 +623,34 @@ class T2GHardwareTests(unittest.TestCase): self.assertEqual(fallback["signals"]["Param_B"], 900) self.assertEqual(fallback["completion"]["signal"], "Task_State") + def test_compiler_emits_native_dynamic_mode_command(self) -> None: + config = function_config( + operation("seat.start_dynamic_mode", {"mode_id": 1}) + ) + + plan = self.compiler.compile(config, {}) + command = plan["spec"]["commands"][0] + frame = self.matrix.encode(command["message"], command["signals"]) + + self.assertEqual(frame["frame_id"], "0x300") + self.assertEqual(frame["data_hex"], "0E 10 00 00 01 00 00 00") + self.assertEqual(command["completion"]["message"], "T2G_Seat_Dynamic_Mode_Status_306") + self.assertEqual(command["completion"]["accepted_states"], [1, 2]) + self.assertEqual(self.contracts.validate(plan), []) + + def test_compiler_emits_native_dynamic_mode_stop_command(self) -> None: + config = function_config(operation("seat.stop_dynamic_mode", {})) + + plan = self.compiler.compile(config, {}) + command = plan["spec"]["commands"][0] + frame = self.matrix.encode(command["message"], command["signals"]) + + self.assertEqual(frame["frame_id"], "0x300") + self.assertEqual(frame["data_hex"], "0F 10 00 00 00 00 00 00") + self.assertEqual(command["completion"]["signal"], "Dynamic_State") + self.assertEqual(command["completion"]["accepted_states"], [0]) + self.assertEqual(self.contracts.validate(plan), []) + def test_compiler_maps_large_relative_backrest_request_to_absolute_target(self) -> None: config = function_config( operation( @@ -696,6 +778,46 @@ class T2GHardwareTests(unittest.TestCase): self.assertEqual([item.data[0] for item in bus.sent], [9, 1]) self.assertTrue(bus.closed) + def test_executor_waits_for_native_dynamic_mode_feedback(self) -> None: + config = function_config( + operation("seat.start_dynamic_mode", {"mode_id": 2}) + ) + plan = self.compiler.compile(config, {}) + bus = ReactiveFakeBus(self.matrix) + + report = HardwareSeatExecutor( + self.matrix, lambda: bus, ack_timeout_ms=20 + ).execute(plan, config) + + self.assertEqual(report["spec"]["status"], "succeeded") + telemetry = report["spec"]["results"][0]["telemetry"] + self.assertEqual(telemetry["dynamic_mode_id"], 2) + self.assertEqual(telemetry["dynamic_state"], 2) + self.assertEqual(telemetry["dynamic_phase"], 5) + self.assertEqual([item.data[0] for item in bus.sent], [9, 14]) + self.assertTrue(bus.closed) + + def test_executor_stops_dynamic_mode_without_homing_or_pre_stop(self) -> None: + config = function_config(operation("seat.stop_dynamic_mode", {})) + plan = self.compiler.compile(config, {}) + bus = ReactiveFakeBus(self.matrix) + + report = HardwareSeatExecutor( + self.matrix, + lambda: bus, + ack_timeout_ms=20, + synchronize_position_before_first_motion=True, + position_sync_state={"synchronized": False}, + ).execute(plan, config) + + self.assertEqual(report["spec"]["status"], "succeeded") + telemetry = report["spec"]["results"][0]["telemetry"] + self.assertEqual(telemetry["dynamic_mode_id"], 0) + self.assertEqual(telemetry["dynamic_state"], 0) + self.assertEqual(telemetry["repeat"], "none") + self.assertEqual([item.data[0] for item in bus.sent], [15]) + self.assertTrue(bus.closed) + def test_firmware_replacement_forces_four_axis_position_memory_sync(self) -> None: config = function_config( operation("seat.set_backrest_recline", {"position_pct": 50}) @@ -1453,6 +1575,9 @@ class T2GHardwareTests(unittest.TestCase): settings.validate_function_config( function_config(operation("seat.set_cushion_tilt", {"position_pct": 40})) ) + settings.validate_function_config( + function_config(operation("seat.stop_dynamic_mode", {})) + ) with self.assertRaises(HardwareSafetyError): settings.validate_function_config( function_config( @@ -1559,7 +1684,7 @@ class T2GHardwareTests(unittest.TestCase): self.assertIs(prepared, bus) self.assertFalse(telemetry["programmed_this_request"]) - self.assertEqual(telemetry["firmware_revision"], 6) + self.assertEqual(telemetry["firmware_revision"], 13) self.assertEqual(bus.sent, []) self.assertEqual(telemetry["max_hall_counts"], [480, 374, 917, 647]) self.assertFalse(bus.closed) @@ -1617,6 +1742,24 @@ class T2GHardwareTests(unittest.TestCase): guard.prepare_bus() self.assertTrue(bus.closed) + def test_firmware_guard_reports_legacy_revision_and_missing_dynamic_status(self) -> None: + bus = LegacyProtocolSignatureFakeBus() + guard = T2GFirmwareGuard( + lambda: bus, + None, + auto_flash=False, + probe_timeout_ms=20, + ) + + with self.assertRaises(FirmwareProgrammingError) as raised: + guard.prepare_bus() + + message = str(raised.exception) + self.assertIn("firmware_revision=0 (expected 13)", message) + self.assertIn("missing_frame_ids=0x306", message) + self.assertIn("max_hall_counts=480,374,917,647", message) + self.assertTrue(bus.closed) + def test_programmer_command_downloads_and_hands_off_to_running_target(self) -> None: firmware_root = ROOT / "firmware" / "t2g" / "Seat_Controller_demo" output_image = ( diff --git a/firmware/t2g/Seat_Controller_demo/App/seat_dynamic_mode.c b/firmware/t2g/Seat_Controller_demo/App/seat_dynamic_mode.c new file mode 100644 index 0000000..771957f --- /dev/null +++ b/firmware/t2g/Seat_Controller_demo/App/seat_dynamic_mode.c @@ -0,0 +1,679 @@ +#include "seat_dynamic_mode.h" + +#include +#include + +#include "motor_control.h" +#include "seat_dynamic_mode_config.h" +#include "seat_motor_manager.h" +#include "seat_move_config.h" + +#define SEAT_DYNAMIC_TARGET_TOLERANCE_PULSES (3u) +#define SEAT_DYNAMIC_ENTRY_TIMEOUT_MS (30000u) +#define SEAT_DYNAMIC_ENTRY_DUTY_PERCENT (90u) +#define SEAT_DYNAMIC_CRADLE_PHASE_TIMEOUT_MS (30000u) +#define SEAT_DYNAMIC_CRADLE_RENDEZVOUS_PULSES (12u) +#define SEAT_DYNAMIC_CRADLE_FINAL_DUTY_PERCENT (50u) + +typedef enum +{ + SEAT_DYNAMIC_CONTROL_TIMED_ARRIVAL = 0u, + SEAT_DYNAMIC_CONTROL_HOLD, + SEAT_DYNAMIC_CONTROL_TARGET_RENDEZVOUS +} seat_dynamic_control_t; + +typedef struct +{ + uint8_t phase; + uint32_t durationMs; + uint32_t timeoutMs; + uint16_t targetHall[SEAT_MOVE_MOTOR_COUNT]; + seat_dynamic_control_t control; +} seat_dynamic_phase_definition_t; + +typedef struct +{ + uint8_t modeId; + const uint16_t *entryTargetHall; + const seat_dynamic_phase_definition_t *phases; + uint8_t phaseCount; + const uint8_t *cruiseDutyPercent; + uint16_t rendezvousPulses; + uint8_t finalDutyPercent; +} seat_dynamic_mode_definition_t; + +typedef struct +{ + uint8_t modeId; + uint8_t state; + uint8_t phase; + uint8_t phaseIndex; + uint8_t faultMask; + uint16_t cycleIndex; + uint16_t internalSequence; + uint32_t modeStartedMs; + uint32_t phaseStartedMs; + uint32_t phaseDurationMs; + uint8_t rendezvousStage; + uint16_t targetHall[SEAT_MOVE_MOTOR_COUNT]; + uint16_t stagingTargetHall[SEAT_MOVE_MOTOR_COUNT]; + uint16_t finalTargetHall[SEAT_MOVE_MOTOR_COUNT]; +} seat_dynamic_context_t; + +static const motor_mode_t s_dynamicLogicalToPhysical[SEAT_MOVE_MOTOR_COUNT] = +{ + (motor_mode_t)SEAT_MOVE_LOGICAL_M0_PHYSICAL_MODE, + (motor_mode_t)SEAT_MOVE_LOGICAL_M1_PHYSICAL_MODE, + (motor_mode_t)SEAT_MOVE_LOGICAL_M2_PHYSICAL_MODE, + (motor_mode_t)SEAT_MOVE_LOGICAL_M3_PHYSICAL_MODE +}; + +/* A cradle must feel like one coordinated body movement. All four axes move + * toward their staging poses in the same scheduler pass; no axis is held back + * for a late catch-up. M0/M1/M3 use the proven breakaway duty while M2 runs + * at loaded duty. After every axis reaches a point exactly 12 Hall pulses + * before the requested pose, they execute an equal-distance 50% final + * approach. This keeps both the visible start and final arrival coordinated + * while making completion independent of an arbitrary 30-second timer. */ +static const uint8_t s_cradleCruiseDuty[SEAT_MOVE_MOTOR_COUNT] = +{ + 50u, 50u, 90u, 50u +}; + +static const uint8_t s_horseCruiseDuty[SEAT_MOVE_MOTOR_COUNT] = +{ + SEAT_DYNAMIC_HORSE_M0_DUTY_PERCENT, + SEAT_DYNAMIC_HORSE_M1_DUTY_PERCENT, + SEAT_DYNAMIC_HORSE_M2_DUTY_PERCENT, + SEAT_DYNAMIC_HORSE_M3_DUTY_PERCENT +}; + +/* Targets are the N7 Hall coordinates supplied for the connected seat bench. + * They are intentionally stored as pulses rather than rounded percentages. */ +static const uint16_t s_rockingHorseEntry[SEAT_MOVE_MOTOR_COUNT] = +{ + SEAT_DYNAMIC_HORSE_ENTRY_M0_HALL, + SEAT_DYNAMIC_HORSE_ENTRY_M1_HALL, + SEAT_DYNAMIC_HORSE_ENTRY_M2_HALL, + SEAT_DYNAMIC_HORSE_ENTRY_M3_HALL +}; +static const seat_dynamic_phase_definition_t s_rockingHorsePhases[] = +{ + { + SEAT_DYNAMIC_PHASE_HORSE_FORWARD, + 0u, + SEAT_DYNAMIC_HORSE_PHASE_TIMEOUT_MS, + { + SEAT_DYNAMIC_HORSE_FORWARD_M0_HALL, + SEAT_DYNAMIC_HORSE_FORWARD_M1_HALL, + SEAT_DYNAMIC_HORSE_FORWARD_M2_HALL, + SEAT_DYNAMIC_HORSE_FORWARD_M3_HALL + }, + SEAT_DYNAMIC_CONTROL_TARGET_RENDEZVOUS + }, + { + SEAT_DYNAMIC_PHASE_HORSE_BACKWARD, + 0u, + SEAT_DYNAMIC_HORSE_PHASE_TIMEOUT_MS, + { + SEAT_DYNAMIC_HORSE_BACKWARD_M0_HALL, + SEAT_DYNAMIC_HORSE_BACKWARD_M1_HALL, + SEAT_DYNAMIC_HORSE_BACKWARD_M2_HALL, + SEAT_DYNAMIC_HORSE_BACKWARD_M3_HALL + }, + SEAT_DYNAMIC_CONTROL_TARGET_RENDEZVOUS + } +}; + +static const uint16_t s_cradleEntry[SEAT_MOVE_MOTOR_COUNT] = +{ + 391u, 140u, 405u, 404u +}; +static const seat_dynamic_phase_definition_t s_cradlePhases[] = +{ + { + SEAT_DYNAMIC_PHASE_CRADLE_FORWARD, + 0u, + SEAT_DYNAMIC_CRADLE_PHASE_TIMEOUT_MS, + { 246u, 281u, 701u, 494u }, + SEAT_DYNAMIC_CONTROL_TARGET_RENDEZVOUS + }, + { + SEAT_DYNAMIC_PHASE_CRADLE_RETURN, + 0u, + SEAT_DYNAMIC_CRADLE_PHASE_TIMEOUT_MS, + { 391u, 140u, 405u, 404u }, + SEAT_DYNAMIC_CONTROL_TARGET_RENDEZVOUS + } +}; + +static const seat_dynamic_mode_definition_t s_dynamicModes[] = +{ + { + SEAT_DYNAMIC_MODE_ROCKING_HORSE, + s_rockingHorseEntry, + s_rockingHorsePhases, + (uint8_t)(sizeof(s_rockingHorsePhases) / + sizeof(s_rockingHorsePhases[0])), + s_horseCruiseDuty, + SEAT_DYNAMIC_HORSE_RENDEZVOUS_PULSES, + SEAT_DYNAMIC_HORSE_FINAL_DUTY_PERCENT + }, + { + SEAT_DYNAMIC_MODE_CRADLE, + s_cradleEntry, + s_cradlePhases, + (uint8_t)(sizeof(s_cradlePhases) / sizeof(s_cradlePhases[0])), + s_cradleCruiseDuty, + SEAT_DYNAMIC_CRADLE_RENDEZVOUS_PULSES, + SEAT_DYNAMIC_CRADLE_FINAL_DUTY_PERCENT + } +}; + +static seat_dynamic_context_t s_dynamic; + +static bool SeatDynamic_TimeReached(uint32_t now, uint32_t deadline); +static uint32_t SeatDynamic_ElapsedMs(uint32_t now, uint32_t started); +static const seat_dynamic_mode_definition_t *SeatDynamic_Definition( + uint8_t modeId); +static uint8_t SeatDynamic_ActiveMask(void); +static bool SeatDynamic_StatusFailed(const seat_motor_status_t *status); +static bool SeatDynamic_TargetsReached(bool *failed); +static bool SeatDynamic_TargetsWithinTolerance(void); +static bool SeatDynamic_StartEntry( + const seat_dynamic_mode_definition_t *definition, + uint32_t now); +static bool SeatDynamic_StartPhase( + const seat_dynamic_mode_definition_t *definition, + uint8_t phaseIndex, + uint32_t now); +static bool SeatDynamic_StartRendezvousFinal( + const seat_dynamic_mode_definition_t *definition); +static void SeatDynamic_Fail(void); +static void SeatDynamic_Advance( + const seat_dynamic_mode_definition_t *definition, + uint32_t now); + +void SeatDynamicMode_Init(void) +{ + (void)memset(&s_dynamic, 0, sizeof(s_dynamic)); + s_dynamic.state = SEAT_DYNAMIC_STATE_IDLE; +} + +bool SeatDynamicMode_Start(uint8_t modeId, uint16_t commandSequence) +{ + const seat_dynamic_mode_definition_t *definition = + SeatDynamic_Definition(modeId); + uint8_t motor; + + if((definition == NULL) || SeatDynamicMode_IsActive() || + SeatMotorManager_IsAnyActive()) + { + return false; + } + for(motor = 0u; motor < SEAT_MOVE_MOTOR_COUNT; motor++) + { + seat_motor_status_t status; + + if(!SeatMotorManager_GetStatus(s_dynamicLogicalToPhysical[motor], + &status) || + !status.positionValid || + (definition->entryTargetHall[motor] > status.maxHallCount)) + { + return false; + } + } + + (void)memset(&s_dynamic, 0, sizeof(s_dynamic)); + s_dynamic.modeId = modeId; + s_dynamic.state = SEAT_DYNAMIC_STATE_ENTRY; + s_dynamic.phase = SEAT_DYNAMIC_PHASE_ENTRY; + s_dynamic.internalSequence = commandSequence; + s_dynamic.modeStartedMs = Motor_GetTimeMs(); + if(!SeatDynamic_StartEntry(definition, s_dynamic.modeStartedMs)) + { + SeatDynamic_Fail(); + return false; + } + return true; +} + +void SeatDynamicMode_Service(void) +{ + const seat_dynamic_mode_definition_t *definition; + uint32_t now; + uint32_t elapsed; + bool failed = false; + bool reached; + const seat_dynamic_phase_definition_t *phase; + + if(!SeatDynamicMode_IsActive()) + { + return; + } + definition = SeatDynamic_Definition(s_dynamic.modeId); + if(definition == NULL) + { + SeatDynamic_Fail(); + return; + } + + now = Motor_GetTimeMs(); + if(SeatDynamic_TimeReached( + now, s_dynamic.modeStartedMs + SEAT_MOVE_DYNAMIC_MAX_RUNTIME_MS)) + { + /* The ten-minute safety cap is owned by the ECU, not by a frontend + * lease or a host-side timer. Reuse the normal stop path so every + * bridge is de-energized and 0x306 returns to all-zero IDLE. */ + SeatDynamicMode_Stop((uint16_t)(s_dynamic.internalSequence + 1u)); + return; + } + reached = SeatDynamic_TargetsReached(&failed); + if(failed) + { + SeatDynamic_Fail(); + return; + } + + if(s_dynamic.state == SEAT_DYNAMIC_STATE_ENTRY) + { + if(reached) + { + if(!SeatDynamic_StartPhase(definition, 0u, now)) + { + SeatDynamic_Fail(); + } + return; + } + if(SeatDynamic_TimeReached( + now, s_dynamic.phaseStartedMs + SEAT_DYNAMIC_ENTRY_TIMEOUT_MS)) + { + SeatDynamic_Fail(); + } + return; + } + + phase = &definition->phases[s_dynamic.phaseIndex]; + elapsed = SeatDynamic_ElapsedMs(now, s_dynamic.phaseStartedMs); + if(phase->control == SEAT_DYNAMIC_CONTROL_TARGET_RENDEZVOUS) + { + if(reached) + { + if(s_dynamic.rendezvousStage == 0u) + { + if(!SeatDynamic_StartRendezvousFinal(definition)) + { + SeatDynamic_Fail(); + } + } + else + { + SeatDynamic_Advance(definition, now); + } + return; + } + if(elapsed > phase->timeoutMs) + { + SeatDynamic_Fail(); + } + return; + } + if(elapsed < s_dynamic.phaseDurationMs) + { + return; + } + if(reached) + { + SeatDynamic_Advance(definition, now); + return; + } + if(SeatDynamic_TargetsWithinTolerance()) + { + /* At the exact phase boundary an adaptive task may still be active + * while every Hall position is already inside the accepted discrete + * target band. Stop all bridges before entering the hold or opposite + * direction phase; waiting for mathematical equality creates a false + * timeout and can extend the requested phase. */ + SeatMotorManager_StopAll(s_dynamic.internalSequence); + SeatDynamic_Advance(definition, now); + return; + } + if(elapsed > (s_dynamic.phaseDurationMs + + SEAT_MOVE_DYNAMIC_ARRIVAL_GRACE_MS)) + { + SeatDynamic_Fail(); + } +} + +void SeatDynamicMode_Stop(uint16_t commandSequence) +{ + if(SeatDynamicMode_IsActive()) + { + Motor_RequestAbortAllFromIsr(commandSequence); + Motor_ServiceAll(); + SeatMotorManager_StopAll(commandSequence); + } + (void)memset(&s_dynamic, 0, sizeof(s_dynamic)); + s_dynamic.state = SEAT_DYNAMIC_STATE_IDLE; +} + +bool SeatDynamicMode_IsActive(void) +{ + return (s_dynamic.state == SEAT_DYNAMIC_STATE_ENTRY) || + (s_dynamic.state == SEAT_DYNAMIC_STATE_RUNNING); +} + +bool SeatDynamicMode_GetStatus(seat_dynamic_mode_status_t *status) +{ + uint32_t elapsed; + + if(status == NULL) + { + return false; + } + elapsed = SeatDynamicMode_IsActive() ? + SeatDynamic_ElapsedMs(Motor_GetTimeMs(), + s_dynamic.phaseStartedMs) : 0u; + status->modeId = s_dynamic.modeId; + status->state = s_dynamic.state; + status->phase = s_dynamic.phase; + status->activeMask = (uint8_t) + (SeatDynamic_ActiveMask() | (uint8_t)(s_dynamic.faultMask << 4u)); + status->cycleIndex = s_dynamic.cycleIndex; + status->phaseElapsedMs = (elapsed > UINT16_MAX) ? + UINT16_MAX : (uint16_t)elapsed; + return true; +} + +static bool SeatDynamic_TimeReached(uint32_t now, uint32_t deadline) +{ + return ((int32_t)(now - deadline) >= 0); +} + +static uint32_t SeatDynamic_ElapsedMs(uint32_t now, uint32_t started) +{ + return now - started; +} + +static const seat_dynamic_mode_definition_t *SeatDynamic_Definition( + uint8_t modeId) +{ + uint8_t index; + + for(index = 0u; + index < (uint8_t)(sizeof(s_dynamicModes) / sizeof(s_dynamicModes[0])); + index++) + { + if(s_dynamicModes[index].modeId == modeId) + { + return &s_dynamicModes[index]; + } + } + return NULL; +} + +static uint8_t SeatDynamic_ActiveMask(void) +{ + uint8_t motor; + uint8_t mask = 0u; + + for(motor = 0u; motor < SEAT_MOVE_MOTOR_COUNT; motor++) + { + seat_motor_status_t status; + + if(SeatMotorManager_GetStatus(s_dynamicLogicalToPhysical[motor], + &status) && status.active) + { + mask |= (uint8_t)(1u << motor); + } + } + return mask; +} + +static bool SeatDynamic_StatusFailed(const seat_motor_status_t *status) +{ + return (status->taskState == SEAT_MOTOR_TASK_FAILED) || + (status->result == SEAT_MOTOR_RESULT_STALL) || + (status->result == SEAT_MOTOR_RESULT_TIMEOUT) || + (status->result == SEAT_MOTOR_RESULT_DRIVER_FAULT) || + (status->result == SEAT_MOTOR_RESULT_INVALID) || + (status->result == SEAT_MOTOR_RESULT_CALIBRATION_FAILED); +} + +static bool SeatDynamic_TargetsReached(bool *failed) +{ + uint8_t motor; + bool reached = true; + + if(failed == NULL) + { + return false; + } + *failed = false; + for(motor = 0u; motor < SEAT_MOVE_MOTOR_COUNT; motor++) + { + seat_motor_status_t status; + uint32_t target = s_dynamic.targetHall[motor]; + uint32_t delta; + + if(!SeatMotorManager_GetStatus(s_dynamicLogicalToPhysical[motor], + &status)) + { + s_dynamic.faultMask |= (uint8_t)(1u << motor); + *failed = true; + return false; + } + if(SeatDynamic_StatusFailed(&status)) + { + s_dynamic.faultMask |= (uint8_t)(1u << motor); + *failed = true; + return false; + } + delta = (status.hallCount >= target) ? + (status.hallCount - target) : (target - status.hallCount); + if(status.active || + (delta > SEAT_DYNAMIC_TARGET_TOLERANCE_PULSES)) + { + reached = false; + } + } + return reached; +} + +static bool SeatDynamic_TargetsWithinTolerance(void) +{ + uint8_t motor; + + for(motor = 0u; motor < SEAT_MOVE_MOTOR_COUNT; motor++) + { + seat_motor_status_t status; + uint32_t target = s_dynamic.targetHall[motor]; + uint32_t delta; + + if(!SeatMotorManager_GetStatus(s_dynamicLogicalToPhysical[motor], + &status) || + SeatDynamic_StatusFailed(&status)) + { + return false; + } + delta = (status.hallCount >= target) ? + (status.hallCount - target) : (target - status.hallCount); + if(delta > SEAT_DYNAMIC_TARGET_TOLERANCE_PULSES) + { + return false; + } + } + return true; +} + +static bool SeatDynamic_StartEntry( + const seat_dynamic_mode_definition_t *definition, + uint32_t now) +{ + uint8_t motor; + + s_dynamic.internalSequence++; + s_dynamic.phaseStartedMs = now; + s_dynamic.phaseDurationMs = SEAT_DYNAMIC_ENTRY_TIMEOUT_MS; + for(motor = 0u; motor < SEAT_MOVE_MOTOR_COUNT; motor++) + { + s_dynamic.targetHall[motor] = definition->entryTargetHall[motor]; + if(!SeatMotor_MoveAbsoluteHallDuty( + s_dynamicLogicalToPhysical[motor], + definition->entryTargetHall[motor], + SEAT_DYNAMIC_ENTRY_DUTY_PERCENT, + s_dynamic.internalSequence)) + { + return false; + } + } + return true; +} + +static bool SeatDynamic_StartPhase( + const seat_dynamic_mode_definition_t *definition, + uint8_t phaseIndex, + uint32_t now) +{ + const seat_dynamic_phase_definition_t *phase; + uint8_t motor; + + if((definition == NULL) || (phaseIndex >= definition->phaseCount)) + { + return false; + } + phase = &definition->phases[phaseIndex]; + s_dynamic.state = SEAT_DYNAMIC_STATE_RUNNING; + s_dynamic.phaseIndex = phaseIndex; + s_dynamic.phase = phase->phase; + s_dynamic.phaseStartedMs = now; + s_dynamic.phaseDurationMs = phase->durationMs; + s_dynamic.rendezvousStage = 0u; + s_dynamic.internalSequence++; + for(motor = 0u; motor < SEAT_MOVE_MOTOR_COUNT; motor++) + { + s_dynamic.targetHall[motor] = phase->targetHall[motor]; + s_dynamic.finalTargetHall[motor] = phase->targetHall[motor]; + } + if(phase->control == SEAT_DYNAMIC_CONTROL_HOLD) + { + return true; + } + if(phase->control == SEAT_DYNAMIC_CONTROL_TARGET_RENDEZVOUS) + { + for(motor = 0u; motor < SEAT_MOVE_MOTOR_COUNT; motor++) + { + seat_motor_status_t status; + uint16_t target = phase->targetHall[motor]; + uint16_t current; + + if(!SeatMotorManager_GetStatus(s_dynamicLogicalToPhysical[motor], + &status)) + { + return false; + } + current = (uint16_t)status.hallCount; + if(target > current + definition->rendezvousPulses) + { + s_dynamic.stagingTargetHall[motor] = (uint16_t) + (target - definition->rendezvousPulses); + } + else if(current > target + + definition->rendezvousPulses) + { + s_dynamic.stagingTargetHall[motor] = (uint16_t) + (target + definition->rendezvousPulses); + } + else + { + s_dynamic.stagingTargetHall[motor] = target; + } + s_dynamic.targetHall[motor] = + s_dynamic.stagingTargetHall[motor]; + } + for(motor = 0u; motor < SEAT_MOVE_MOTOR_COUNT; motor++) + { + if(!SeatMotor_MoveAbsoluteHallDuty( + s_dynamicLogicalToPhysical[motor], + s_dynamic.targetHall[motor], + definition->cruiseDutyPercent[motor], + s_dynamic.internalSequence)) + { + return false; + } + } + return true; + } + for(motor = 0u; motor < SEAT_MOVE_MOTOR_COUNT; motor++) + { + if(!SeatMotor_MoveAbsoluteHallInTimeWithGrace( + s_dynamicLogicalToPhysical[motor], + phase->targetHall[motor], + phase->durationMs, + SEAT_MOVE_DYNAMIC_ARRIVAL_GRACE_MS, + s_dynamic.internalSequence)) + { + return false; + } + } + return true; +} + +static bool SeatDynamic_StartRendezvousFinal( + const seat_dynamic_mode_definition_t *definition) +{ + uint8_t motor; + + if(definition == NULL) + { + return false; + } + + s_dynamic.internalSequence++; + s_dynamic.rendezvousStage = 2u; + for(motor = 0u; motor < SEAT_MOVE_MOTOR_COUNT; motor++) + { + s_dynamic.targetHall[motor] = s_dynamic.finalTargetHall[motor]; + } + for(motor = 0u; motor < SEAT_MOVE_MOTOR_COUNT; motor++) + { + if(!SeatMotor_MoveAbsoluteHallDuty( + s_dynamicLogicalToPhysical[motor], + s_dynamic.finalTargetHall[motor], + definition->finalDutyPercent, + s_dynamic.internalSequence)) + { + return false; + } + } + return true; +} + +static void SeatDynamic_Fail(void) +{ + uint16_t sequence = (uint16_t)(s_dynamic.internalSequence + 1u); + + Motor_RequestAbortAllFromIsr(sequence); + Motor_ServiceAll(); + SeatMotorManager_StopAll(sequence); + s_dynamic.internalSequence = sequence; + s_dynamic.state = SEAT_DYNAMIC_STATE_FAULT; + s_dynamic.phaseStartedMs = Motor_GetTimeMs(); +} + +static void SeatDynamic_Advance( + const seat_dynamic_mode_definition_t *definition, + uint32_t now) +{ + uint8_t nextPhase = (uint8_t)(s_dynamic.phaseIndex + 1u); + + if(nextPhase >= definition->phaseCount) + { + nextPhase = 0u; + s_dynamic.cycleIndex++; + } + if(!SeatDynamic_StartPhase(definition, nextPhase, now)) + { + SeatDynamic_Fail(); + } +} diff --git a/firmware/t2g/Seat_Controller_demo/App/seat_dynamic_mode.h b/firmware/t2g/Seat_Controller_demo/App/seat_dynamic_mode.h new file mode 100644 index 0000000..b8d52b7 --- /dev/null +++ b/firmware/t2g/Seat_Controller_demo/App/seat_dynamic_mode.h @@ -0,0 +1,49 @@ +#ifndef SEAT_DYNAMIC_MODE_H +#define SEAT_DYNAMIC_MODE_H + +#include +#include + +typedef enum +{ + SEAT_DYNAMIC_MODE_NONE = 0u, + SEAT_DYNAMIC_MODE_ROCKING_HORSE = 1u, + SEAT_DYNAMIC_MODE_CRADLE = 2u +} seat_dynamic_mode_id_t; + +typedef enum +{ + SEAT_DYNAMIC_STATE_IDLE = 0u, + SEAT_DYNAMIC_STATE_ENTRY = 1u, + SEAT_DYNAMIC_STATE_RUNNING = 2u, + SEAT_DYNAMIC_STATE_FAULT = 3u +} seat_dynamic_state_t; + +typedef enum +{ + SEAT_DYNAMIC_PHASE_NONE = 0u, + SEAT_DYNAMIC_PHASE_ENTRY = 1u, + SEAT_DYNAMIC_PHASE_HORSE_FORWARD = 2u, + SEAT_DYNAMIC_PHASE_HORSE_BACKWARD = 3u, + SEAT_DYNAMIC_PHASE_CRADLE_FORWARD = 5u, + SEAT_DYNAMIC_PHASE_CRADLE_RETURN = 6u +} seat_dynamic_phase_t; + +typedef struct +{ + uint8_t modeId; + uint8_t state; + uint8_t phase; + uint8_t activeMask; + uint16_t cycleIndex; + uint16_t phaseElapsedMs; +} seat_dynamic_mode_status_t; + +void SeatDynamicMode_Init(void); +bool SeatDynamicMode_Start(uint8_t modeId, uint16_t commandSequence); +void SeatDynamicMode_Service(void); +void SeatDynamicMode_Stop(uint16_t commandSequence); +bool SeatDynamicMode_IsActive(void); +bool SeatDynamicMode_GetStatus(seat_dynamic_mode_status_t *status); + +#endif /* SEAT_DYNAMIC_MODE_H */ diff --git a/firmware/t2g/Seat_Controller_demo/App/seat_motor_manager.c b/firmware/t2g/Seat_Controller_demo/App/seat_motor_manager.c index 50389a8..6cf943e 100755 --- a/firmware/t2g/Seat_Controller_demo/App/seat_motor_manager.c +++ b/firmware/t2g/Seat_Controller_demo/App/seat_motor_manager.c @@ -10,6 +10,13 @@ #define SEAT_MOTOR_SPEED_CAL_MEASURE_MS (1000ul) #define SEAT_MOTOR_SPEED_CAL_DUTY_PERCENT (95u) #define SEAT_MOTOR_DEFAULT_CAL_LEG_TIMEOUT_MS (70000ul) +#define SEAT_MOTOR_TIMED_ARRIVAL_SETTLE_MS (500ul) +#define SEAT_MOTOR_TIMED_M0_NEAR_EXTENSION_MS (900ul) +#define SEAT_MOTOR_TIMED_M0_FAR_EXTENSION_MS (1000ul) +#define SEAT_MOTOR_TIMED_M1_NEAR_EXTENSION_MS (1200ul) +#define SEAT_MOTOR_TIMED_M1_FAR_EXTENSION_MS (700ul) +#define SEAT_MOTOR_TIMED_M3_NEAR_EXTENSION_MS (1900ul) +#define SEAT_MOTOR_TIMED_M3_FAR_EXTENSION_MS (1600ul) typedef char seat_motor_manager_requires_four_motors[ (MOTOR_MODE_COUNT == 4) ? 1 : -1]; @@ -22,6 +29,8 @@ typedef struct uint32_t commandSequence; uint32_t targetValueX100; uint32_t durationMs; + uint32_t speedPlanDurationMs; + uint32_t deadlineGraceMs; uint32_t deadlineMs; uint32_t retryAtMs; uint32_t speedValuePerSecondX100; @@ -95,6 +104,36 @@ static uint32_t SeatMotor_AbsDelta(uint32_t lhs, uint32_t rhs) return (lhs >= rhs) ? (lhs - rhs) : (rhs - lhs); } +static uint32_t SeatMotor_TimedPlanExtensionMs( + motor_mode_t mode, + motor_direction_t direction) +{ + /* The four loaded mechanisms do not have identical low-speed breakaway + * and coast behavior. Bench traces show repeatable early arrival against + * M2 when every axis follows the same ideal time-position line. Extend + * only the speed plan (never the phase deadline) by the measured lead so + * all four axes converge at the requested phase boundary. */ + if(mode == MOTOR_MODE_0_LINEAR) + { + return (direction == MOTOR_DIRECTION_TOWARD_NEAR) ? + SEAT_MOTOR_TIMED_M0_NEAR_EXTENSION_MS : + SEAT_MOTOR_TIMED_M0_FAR_EXTENSION_MS; + } + if(mode == MOTOR_MODE_1_ANGLE) + { + return (direction == MOTOR_DIRECTION_TOWARD_NEAR) ? + SEAT_MOTOR_TIMED_M1_NEAR_EXTENSION_MS : + SEAT_MOTOR_TIMED_M1_FAR_EXTENSION_MS; + } + if(mode == MOTOR_MODE_3_LINEAR_TRACK) + { + return (direction == MOTOR_DIRECTION_TOWARD_NEAR) ? + SEAT_MOTOR_TIMED_M3_NEAR_EXTENSION_MS : + SEAT_MOTOR_TIMED_M3_FAR_EXTENSION_MS; + } + return 0ul; +} + static bool SeatMotor_TargetWithinHallTolerance( const seat_motor_task_t *task, const motor_position_info_t *info) @@ -192,9 +231,10 @@ static bool SeatMotor_PrepareNewTask(motor_mode_t mode, static bool SeatMotor_StartPositionTask(motor_mode_t mode, uint32_t targetValueX100, uint8_t dutyPercent, - uint32_t speedValuePerSecondX100, - uint32_t durationLimitMs, - uint32_t commandSequence, + uint32_t speedValuePerSecondX100, + uint32_t durationLimitMs, + uint32_t speedPlanDurationMs, + uint32_t commandSequence, bool dynamicSpeed, bool preserveRetry, seat_motor_task_state_t runningState) @@ -203,7 +243,7 @@ static bool SeatMotor_StartPositionTask(motor_mode_t mode, seat_motor_task_t *task; motor_position_info_t info; uint32_t travelValueX100; - uint32_t planDurationMs; + uint32_t planDurationMs = 0ul; uint8_t retryCount; if((false == SeatMotor_ModeValid(mode)) || @@ -257,7 +297,8 @@ static bool SeatMotor_StartPositionTask(motor_mode_t mode, if(false != dynamicSpeed) { - planDurationMs = (durationLimitMs != 0ul) ? durationLimitMs : + planDurationMs = (speedPlanDurationMs != 0ul) ? + speedPlanDurationMs : (durationLimitMs != 0ul) ? durationLimitMs : (uint32_t)((((uint64_t)travelValueX100 * 1000ull) + speedValuePerSecondX100 - 1ull) / speedValuePerSecondX100); @@ -282,6 +323,7 @@ static bool SeatMotor_StartPositionTask(motor_mode_t mode, SEAT_MOTOR_TASK_WAIT_START : runningState; task->targetValueX100 = targetValueX100; task->durationMs = durationLimitMs; + task->speedPlanDurationMs = planDurationMs; task->deadlineMs = 0ul; task->speedValuePerSecondX100 = speedValuePerSecondX100; task->dutyPercent = dutyPercent; @@ -490,7 +532,8 @@ void SeatMotorManager_Service(void) } else if(0ul != task->durationMs) { - task->deadlineMs = now + task->durationMs; + task->deadlineMs = now + task->durationMs + + task->deadlineGraceMs; } else { @@ -517,6 +560,7 @@ void SeatMotorManager_Service(void) task->dutyPercent, task->speedValuePerSecondX100, task->durationMs, + task->speedPlanDurationMs, task->commandSequence, task->dynamicSpeed, true, @@ -643,6 +687,7 @@ bool SeatMotor_MoveAbsoluteDuty(motor_mode_t mode, dutyPercent, 0ul, 0ul, + 0ul, commandSequence, false, false, @@ -696,6 +741,7 @@ bool SeatMotor_MoveAbsoluteNormalized(motor_mode_t mode, dutyPercent, 0ul, timeoutMs, + 0ul, commandSequence, false, false, @@ -795,6 +841,7 @@ bool SeatMotor_MoveAbsoluteSpeed(motor_mode_t mode, 0u, speedValuePerSecondX100, 0ul, + 0ul, commandSequence, true, false, @@ -879,10 +926,27 @@ bool SeatMotor_MoveAbsoluteInTime(motor_mode_t mode, uint32_t targetValueX100, uint32_t durationMs, uint32_t commandSequence) +{ + return SeatMotor_MoveAbsoluteInTimeWithGrace(mode, + targetValueX100, + durationMs, + 0ul, + commandSequence); +} + +bool SeatMotor_MoveAbsoluteInTimeWithGrace(motor_mode_t mode, + uint32_t targetValueX100, + uint32_t durationMs, + uint32_t deadlineGraceMs, + uint32_t commandSequence) { motor_position_info_t info; uint32_t travel; uint32_t speed; + uint32_t speedPlanDurationMs; + uint32_t speedPlanExtensionMs; + motor_direction_t direction; + bool started; if((0ul == durationMs) || (MOTOR_API_SUCCESS != Motor_GetPositionInfo(mode, &info)) || @@ -898,16 +962,94 @@ bool SeatMotor_MoveAbsoluteInTime(motor_mode_t mode, MOTOR_SPEED_MIN_DUTY_PERCENT, commandSequence); } - speed = (uint32_t)((((uint64_t)travel) * 1000ull) / durationMs); - return SeatMotor_StartPositionTask(mode, - targetValueX100, - 0u, - speed, - durationMs, - commandSequence, - true, - false, - SEAT_MOTOR_TASK_POSITION); + direction = (targetValueX100 >= info.valueX100) ? + MOTOR_DIRECTION_TOWARD_FAR : + MOTOR_DIRECTION_TOWARD_NEAR; + speedPlanDurationMs = (durationMs > SEAT_MOTOR_TIMED_ARRIVAL_SETTLE_MS) ? + (durationMs - SEAT_MOTOR_TIMED_ARRIVAL_SETTLE_MS) : durationMs; + speedPlanExtensionMs = SeatMotor_TimedPlanExtensionMs(mode, direction); + if(speedPlanExtensionMs > (UINT32_MAX - speedPlanDurationMs)) + { + return false; + } + speedPlanDurationMs += speedPlanExtensionMs; + speed = (uint32_t) + ((((uint64_t)travel) * 1000ull) / speedPlanDurationMs); + started = SeatMotor_StartPositionTask(mode, + targetValueX100, + 0u, + speed, + durationMs, + speedPlanDurationMs, + commandSequence, + true, + false, + SEAT_MOTOR_TASK_POSITION); + if(started) + { + tasks[(uint32_t)mode].deadlineGraceMs = deadlineGraceMs; + } + return started; +} + +bool SeatMotor_MoveAbsoluteHallDuty(motor_mode_t mode, + uint32_t targetHallCount, + uint8_t dutyPercent, + uint32_t commandSequence) +{ + motor_position_info_t info; + uint32_t targetValueX100; + + if((MOTOR_API_SUCCESS != Motor_GetPositionInfo(mode, &info)) || + (false == info.positionValid) || (0ul == info.maxHallCount) || + (targetHallCount > info.maxHallCount)) + { + return false; + } + targetValueX100 = (uint32_t) + (((uint64_t)targetHallCount * info.maxValueX100 + + (info.maxHallCount / 2ul)) / info.maxHallCount); + return SeatMotor_MoveAbsoluteDuty(mode, + targetValueX100, + dutyPercent, + commandSequence); +} + +bool SeatMotor_MoveAbsoluteHallInTime(motor_mode_t mode, + uint32_t targetHallCount, + uint32_t durationMs, + uint32_t commandSequence) +{ + return SeatMotor_MoveAbsoluteHallInTimeWithGrace(mode, + targetHallCount, + durationMs, + 0ul, + commandSequence); +} + +bool SeatMotor_MoveAbsoluteHallInTimeWithGrace(motor_mode_t mode, + uint32_t targetHallCount, + uint32_t durationMs, + uint32_t deadlineGraceMs, + uint32_t commandSequence) +{ + motor_position_info_t info; + uint32_t targetValueX100; + + if((MOTOR_API_SUCCESS != Motor_GetPositionInfo(mode, &info)) || + (false == info.positionValid) || (0ul == info.maxHallCount) || + (targetHallCount > info.maxHallCount)) + { + return false; + } + targetValueX100 = (uint32_t) + (((uint64_t)targetHallCount * info.maxValueX100 + + (info.maxHallCount / 2ul)) / info.maxHallCount); + return SeatMotor_MoveAbsoluteInTimeWithGrace(mode, + targetValueX100, + durationMs, + deadlineGraceMs, + commandSequence); } bool SeatMotor_CalibrateRange(motor_mode_t mode, diff --git a/firmware/t2g/Seat_Controller_demo/App/seat_motor_manager.h b/firmware/t2g/Seat_Controller_demo/App/seat_motor_manager.h index 28de407..7b17eb4 100755 --- a/firmware/t2g/Seat_Controller_demo/App/seat_motor_manager.h +++ b/firmware/t2g/Seat_Controller_demo/App/seat_motor_manager.h @@ -110,6 +110,30 @@ bool SeatMotor_MoveAbsoluteInTime(motor_mode_t mode, uint32_t targetValueX100, uint32_t durationMs, uint32_t commandSequence); +/* Keep the same speed plan while allowing a bounded scheduler/settling grace + * before the manager reports TIMEOUT. */ +bool SeatMotor_MoveAbsoluteInTimeWithGrace(motor_mode_t mode, + uint32_t targetValueX100, + uint32_t durationMs, + uint32_t deadlineGraceMs, + uint32_t commandSequence); + +/* Hall-coordinate variants used by firmware-owned synchronized trajectories. + * The target is checked against the live calibrated MaxHall before conversion + * to the motor's physical value. */ +bool SeatMotor_MoveAbsoluteHallDuty(motor_mode_t mode, + uint32_t targetHallCount, + uint8_t dutyPercent, + uint32_t commandSequence); +bool SeatMotor_MoveAbsoluteHallInTime(motor_mode_t mode, + uint32_t targetHallCount, + uint32_t durationMs, + uint32_t commandSequence); +bool SeatMotor_MoveAbsoluteHallInTimeWithGrace(motor_mode_t mode, + uint32_t targetHallCount, + uint32_t durationMs, + uint32_t deadlineGraceMs, + uint32_t commandSequence); /* Range calibration is interruptible by Motor_RequestAbortAllFromIsr(). */ bool SeatMotor_CalibrateRange(motor_mode_t mode, diff --git a/firmware/t2g/Seat_Controller_demo/App/seat_move_application.c b/firmware/t2g/Seat_Controller_demo/App/seat_move_application.c index 0e1f7a4..961666b 100755 --- a/firmware/t2g/Seat_Controller_demo/App/seat_move_application.c +++ b/firmware/t2g/Seat_Controller_demo/App/seat_move_application.c @@ -7,6 +7,7 @@ #include "motor_control.h" #include "safety_manager.h" #include "seat_controller_thermal.h" +#include "seat_dynamic_mode.h" #include "seat_motor_manager.h" #include "seat_move_config.h" #include "seat_move_store.h" @@ -67,7 +68,9 @@ typedef enum SEAT_MOVE_OPCODE_CALIBRATE_RANGE = 0x0Au, SEAT_MOVE_OPCODE_HOME_KNOWN_RANGE = 0x0Bu, SEAT_MOVE_OPCODE_QUERY_STATUS = 0x0Cu, - SEAT_MOVE_OPCODE_CLEAR_FAULT = 0x0Du + SEAT_MOVE_OPCODE_CLEAR_FAULT = 0x0Du, + SEAT_MOVE_OPCODE_START_DYNAMIC_MODE = 0x0Eu, + SEAT_MOVE_OPCODE_STOP_DYNAMIC_MODE = 0x0Fu } seat_move_opcode_t; typedef enum @@ -170,12 +173,14 @@ static uint8_t s_motorPeriodicId = 0u; static uint8_t s_diagnosticPeriodicId = 0u; static bool s_motorPeriodicPending = false; static bool s_diagnosticPeriodicPending = false; +static bool s_dynamicStatusPending = true; static uint8_t s_systemAlive = 0u; static uint8_t s_diagnosticAlive[SEAT_MOVE_MOTOR_COUNT]; static uint32_t s_nextStartMs = 0u; static uint32_t s_nextSystemStatusMs = 0u; static uint32_t s_nextMotorPollMs = 0u; static uint32_t s_nextDiagnosticPollMs = 0u; +static uint32_t s_nextDynamicStatusMs = 0u; static bool SeatMove_TimeReached(uint32_t now, uint32_t deadline); static bool SeatMove_SequenceNewer(uint16_t candidate, uint16_t reference); @@ -220,6 +225,7 @@ static bool SeatMove_SendSystemStatus(void); static bool SeatMove_SendMotorStatus(uint8_t motor); static bool SeatMove_SendDiagnostic(uint8_t motor); static bool SeatMove_SendCurrentDiagnostic(uint8_t motor); +static bool SeatMove_SendDynamicStatus(void); static void SeatMove_ServiceFeedback(void); bool SeatMoveApplication_Init(void) @@ -233,6 +239,7 @@ bool SeatMoveApplication_Init(void) s_storeSavePending = false; s_storeSaveNotBeforeMs = 0u; SeatMotorManager_Init(); + SeatDynamicMode_Init(); SeatMoveStore_Init(); if(SeatMoveStore_IsValid() && SeatMoveStore_IsClean() && @@ -254,9 +261,11 @@ bool SeatMoveApplication_Init(void) s_nextSystemStatusMs = now; s_nextMotorPollMs = now; s_nextDiagnosticPollMs = now; + s_nextDynamicStatusMs = now; s_systemStatusPending = true; s_motorStatusPendingMask = SEAT_MOVE_ACTIVE_MOTOR_MASK; s_diagnosticPendingMask = SEAT_MOVE_ACTIVE_MOTOR_MASK; + s_dynamicStatusPending = true; return true; } @@ -273,6 +282,15 @@ void SeatMoveApplication_Service(void) { uint8_t motor; + if(SeatDynamicMode_IsActive()) + { + SeatDynamicMode_Stop(g_seatMoveLastSequence); + s_storeSavePending = true; + s_storeSaveNotBeforeMs = + Motor_GetTimeMs() + SEAT_MOVE_STORE_SAVE_DEBOUNCE_MS; + s_dynamicStatusPending = true; + } + for(motor = 0u; motor < SEAT_MOVE_MOTOR_COUNT; motor++) { s_pending[motor].valid = false; @@ -294,6 +312,7 @@ void SeatMoveApplication_Service(void) } SeatMove_ServiceDispatcher(); SeatMotorManager_Service(); + SeatDynamicMode_Service(); SeatMove_ServiceStateChanges(); SeatMove_ServicePersistence(); SeatMove_ServiceFeedback(); @@ -326,7 +345,9 @@ void Motor_CalibrationServiceHook(void) void SeatMoveApplication_StopAll(uint16_t sequence) { uint8_t logicalMotor; + bool dynamicWasActive = SeatDynamicMode_IsActive(); + SeatDynamicMode_Stop(sequence); Motor_RequestAbortAllFromIsr(sequence); Motor_ServiceAll(); for(logicalMotor = 0u; @@ -342,6 +363,13 @@ void SeatMoveApplication_StopAll(uint16_t sequence) s_motorStatusPendingMask = SEAT_MOVE_ACTIVE_MOTOR_MASK; s_diagnosticPendingMask = SEAT_MOVE_ACTIVE_MOTOR_MASK; s_systemStatusPending = true; + s_dynamicStatusPending = true; + if(dynamicWasActive) + { + s_storeSavePending = true; + s_storeSaveNotBeforeMs = + Motor_GetTimeMs() + SEAT_MOVE_STORE_SAVE_DEBOUNCE_MS; + } } static bool SeatMove_TimeReached(uint32_t now, uint32_t deadline) @@ -479,6 +507,8 @@ static bool SeatMove_ParseCommand(const bsp_seat_move_can_frame_t *frame, case SEAT_MOVE_OPCODE_HOME_KNOWN_RANGE: case SEAT_MOVE_OPCODE_QUERY_STATUS: case SEAT_MOVE_OPCODE_CLEAR_FAULT: + case SEAT_MOVE_OPCODE_START_DYNAMIC_MODE: + case SEAT_MOVE_OPCODE_STOP_DYNAMIC_MODE: break; default: *reject = SEAT_MOVE_REJECT_BAD_OPCODE; @@ -501,7 +531,9 @@ static bool SeatMove_ParametersValid(const seat_move_command_t *command, *reject = SEAT_MOVE_REJECT_BAD_MOTOR; return false; } - if((command->opcode == SEAT_MOVE_OPCODE_STOP_ALL) && + if(((command->opcode == SEAT_MOVE_OPCODE_STOP_ALL) || + (command->opcode == SEAT_MOVE_OPCODE_START_DYNAMIC_MODE) || + (command->opcode == SEAT_MOVE_OPCODE_STOP_DYNAMIC_MODE)) && (command->motor != 0u)) { *reject = SEAT_MOVE_REJECT_BAD_MOTOR; @@ -590,6 +622,22 @@ static bool SeatMove_ParametersValid(const seat_move_command_t *command, return false; } break; + case SEAT_MOVE_OPCODE_START_DYNAMIC_MODE: + if(((command->paramA != SEAT_DYNAMIC_MODE_ROCKING_HORSE) && + (command->paramA != SEAT_DYNAMIC_MODE_CRADLE)) || + (command->paramB != 0u)) + { + *reject = SEAT_MOVE_REJECT_PARAM_RANGE; + return false; + } + break; + case SEAT_MOVE_OPCODE_STOP_DYNAMIC_MODE: + if((command->paramA != 0u) || (command->paramB != 0u)) + { + *reject = SEAT_MOVE_REJECT_PARAM_RANGE; + return false; + } + break; default: *reject = SEAT_MOVE_REJECT_BAD_OPCODE; return false; @@ -801,9 +849,27 @@ static void SeatMove_HandleCommand(const bsp_seat_move_can_frame_t *frame) g_seatMoveAcceptedCount++; return; } + if(command.opcode == SEAT_MOVE_OPCODE_STOP_DYNAMIC_MODE) + { + SeatMoveApplication_StopAll(command.sequence); + SeatMove_SetResponse(SEAT_MOVE_ACK_ACCEPTED, + SEAT_MOVE_REJECT_NONE, + &command); + g_seatMoveAcceptedCount++; + return; + } if(command.opcode == SEAT_MOVE_OPCODE_STOP_MOTOR) { - SeatMove_StopMotor(command.motor, command.sequence); + if(SeatDynamicMode_IsActive()) + { + /* A one-axis stop would invalidate a synchronized trajectory. + * Stop the complete dynamic mode instead. */ + SeatMoveApplication_StopAll(command.sequence); + } + else + { + SeatMove_StopMotor(command.motor, command.sequence); + } SeatMove_SetResponse(SEAT_MOVE_ACK_ACCEPTED, SEAT_MOVE_REJECT_NONE, &command); @@ -855,6 +921,64 @@ static void SeatMove_HandleCommand(const bsp_seat_move_can_frame_t *frame) &command); return; } + if(command.opcode == SEAT_MOVE_OPCODE_START_DYNAMIC_MODE) + { + if(SeatDynamicMode_IsActive() || SeatMotorManager_IsAnyActive() || + SeatMove_AnyPending()) + { + g_seatMoveConflictCount++; + SeatMove_SetResponse(SEAT_MOVE_ACK_REJECTED, + SEAT_MOVE_REJECT_BUSY_SAME_MOTOR, + &command); + return; + } + if(SeatMove_PositionValidMask() != SEAT_MOVE_ACTIVE_MOTOR_MASK) + { + SeatMove_SetResponse(SEAT_MOVE_ACK_REJECTED, + SeatMoveStore_HasCorruptRecord() ? + SEAT_MOVE_REJECT_CAL_DATA_INVALID : + SEAT_MOVE_REJECT_POSITION_INVALID, + &command); + return; + } + SafetyManager_KickWatchdog(); + if(!SeatMoveStore_MarkMovementStarted()) + { + SafetyManager_LatchFault(SAFETY_FAULT_CONFIG_STORE); + SeatMove_SetResponse(SEAT_MOVE_ACK_REJECTED, + SEAT_MOVE_REJECT_INTERNAL_ERROR, + &command); + return; + } + s_storeSavePending = true; + s_storeSaveNotBeforeMs = + Motor_GetTimeMs() + SEAT_MOVE_STORE_SAVE_DEBOUNCE_MS; + if(!SeatDynamicMode_Start((uint8_t)command.paramA, + command.sequence)) + { + SeatMove_SetResponse(SEAT_MOVE_ACK_REJECTED, + SEAT_MOVE_REJECT_INTERNAL_ERROR, + &command); + s_dynamicStatusPending = true; + return; + } + s_motorStatusPendingMask = SEAT_MOVE_ACTIVE_MOTOR_MASK; + s_diagnosticPendingMask = SEAT_MOVE_ACTIVE_MOTOR_MASK; + s_dynamicStatusPending = true; + SeatMove_SetResponse(SEAT_MOVE_ACK_ACCEPTED, + SEAT_MOVE_REJECT_NONE, + &command); + g_seatMoveAcceptedCount++; + return; + } + if(SeatDynamicMode_IsActive()) + { + g_seatMoveConflictCount++; + SeatMove_SetResponse(SEAT_MOVE_ACK_REJECTED, + SEAT_MOVE_REJECT_BUSY_SAME_MOTOR, + &command); + return; + } if(SeatMove_IsPositionCommand(command.opcode)) { if(!SeatMove_GetStatus(command.motor, &status)) @@ -1069,6 +1193,14 @@ static void SeatMove_ServicePersistence(void) return; } + /* A continuously cycling dynamic mode must not commit Work Flash at each + * hold or phase boundary. The dirty record remains authoritative until + * STOP_ALL/STOP_DYNAMIC_MODE and one final settled save. */ + if(SeatDynamicMode_IsActive()) + { + return; + } + now = Motor_GetTimeMs(); if(SeatMove_AnyPending() || SeatMotorManager_IsAnyActive() || SeatMove_AnyPhysicalMotorMoving()) @@ -1166,8 +1298,11 @@ static uint8_t SeatMove_MapTaskResult(const seat_motor_status_t *status) static uint8_t SeatMove_SystemState(void) { + seat_dynamic_mode_status_t dynamicStatus; uint8_t activeMask = SeatMove_ActiveMask(); uint8_t faultedMask = SeatMove_FaultedMask(); + bool dynamicFault = SeatDynamicMode_GetStatus(&dynamicStatus) && + (dynamicStatus.state == SEAT_DYNAMIC_STATE_FAULT); if(SafetyManager_IsInhibited()) { @@ -1178,12 +1313,12 @@ static uint8_t SeatMove_SystemState(void) { return SEAT_MOVE_SYSTEM_CALIBRATION; } - if((faultedMask != 0u) || + if((faultedMask != 0u) || dynamicFault || (SafetyManager_GetFault() != SAFETY_FAULT_NONE)) { return SEAT_MOVE_SYSTEM_FAULT; } - if(activeMask != 0u) + if((activeMask != 0u) || SeatDynamicMode_IsActive()) { return SEAT_MOVE_SYSTEM_ACTIVE; } @@ -1192,11 +1327,15 @@ static uint8_t SeatMove_SystemState(void) static bool SeatMove_SendSystemStatus(void) { + seat_dynamic_mode_status_t dynamicStatus; uint8_t activeMask = SeatMove_ActiveMask(); uint8_t faultedMask = SeatMove_FaultedMask(); uint8_t positionValidMask = SeatMove_PositionValidMask(); bool calibrationBusy = SeatMove_CalibrationBusy(); - bool faultSummary = (faultedMask != 0u) || + bool dynamicStatusValid = SeatDynamicMode_GetStatus(&dynamicStatus); + bool dynamicFault = dynamicStatusValid && + (dynamicStatus.state == SEAT_DYNAMIC_STATE_FAULT); + bool faultSummary = (faultedMask != 0u) || dynamicFault || (SafetyManager_GetFault() != SAFETY_FAULT_NONE) || SeatMoveStore_HasCorruptRecord(); uint8_t byte0 = (uint8_t)((g_seatMoveAck & 0x0Fu) | @@ -1205,6 +1344,7 @@ static bool SeatMove_SendSystemStatus(void) uint8_t byte4 = g_seatMoveLastOpcode; uint8_t byte5 = (uint8_t)((activeMask & 0x0Fu) | (SafetyManager_IsInhibited() ? 0x10u : 0u) | + (SeatDynamicMode_IsActive() ? 0x20u : 0u) | (calibrationBusy ? 0x40u : 0u) | (faultSummary ? 0x80u : 0u)); uint8_t byte6 = (uint8_t)((faultedMask & 0x0Fu) | @@ -1304,7 +1444,9 @@ static bool SeatMove_SendDiagnostic(uint8_t motor) UINT16_MAX : (uint16_t)status.hallCount; maxHallCount = (status.maxHallCount > UINT16_MAX) ? UINT16_MAX : (uint16_t)status.maxHallCount; - speedRaw = (status.hallSpeedPpsX100 + 100u) / 200u; + /* 0x303 B6 is specified as 0.5 pulse/s per LSB. hallSpeed is x100, + * therefore divide by 50 (with half-up rounding), not by 200. */ + speedRaw = (status.hallSpeedPpsX100 + 25u) / 50u; if(speedRaw > UINT8_MAX) { speedRaw = UINT8_MAX; @@ -1363,6 +1505,27 @@ static bool SeatMove_SendCurrentDiagnostic(uint8_t motor) data1); } +static bool SeatMove_SendDynamicStatus(void) +{ + seat_dynamic_mode_status_t status; + uint32_t data0; + uint32_t data1; + + if(!SeatDynamicMode_GetStatus(&status)) + { + return false; + } + data0 = (uint32_t)status.modeId | + ((uint32_t)status.state << 8u) | + ((uint32_t)status.phase << 16u) | + ((uint32_t)status.activeMask << 24u); + data1 = (uint32_t)status.cycleIndex | + ((uint32_t)status.phaseElapsedMs << 16u); + return BspSeatMoveCan_Send(SEAT_MOVE_CAN_DYNAMIC_STATUS_ID, + data0, + data1); +} + static void SeatMove_ServiceFeedback(void) { uint32_t now = Motor_GetTimeMs(); @@ -1373,6 +1536,11 @@ static void SeatMove_ServiceFeedback(void) s_systemStatusPending = true; s_nextSystemStatusMs = now + SEAT_MOVE_SYSTEM_STATUS_PERIOD_MS; } + if(SeatMove_TimeReached(now, s_nextDynamicStatusMs)) + { + s_dynamicStatusPending = true; + s_nextDynamicStatusMs = now + SEAT_MOVE_DYNAMIC_STATUS_PERIOD_MS; + } if(!s_motorPeriodicPending && SeatMove_TimeReached(now, s_nextMotorPollMs)) { @@ -1408,6 +1576,19 @@ static void SeatMove_ServiceFeedback(void) } return; } + if(s_dynamicStatusPending) + { + if(SeatMove_SendDynamicStatus()) + { + s_dynamicStatusPending = false; + g_seatMoveFeedbackTxCount++; + } + else + { + g_seatMoveFeedbackTxFailureCount++; + } + return; + } for(motor = 0u; motor < SEAT_MOVE_MOTOR_COUNT; motor++) { uint8_t bit = (uint8_t)(1u << motor); diff --git a/firmware/t2g/Seat_Controller_demo/Config/seat_dynamic_mode_config.h b/firmware/t2g/Seat_Controller_demo/Config/seat_dynamic_mode_config.h new file mode 100644 index 0000000..8fbceb8 --- /dev/null +++ b/firmware/t2g/Seat_Controller_demo/Config/seat_dynamic_mode_config.h @@ -0,0 +1,55 @@ +#ifndef SEAT_DYNAMIC_MODE_CONFIG_H +#define SEAT_DYNAMIC_MODE_CONFIG_H + +/* Rocking-horse tuning for the connected N7 passenger seat. + * + * M0/M1/M2/M3 are longitudinal, cushion tilt, backrest and legrest. Keep all + * Hall targets inside the calibrated ranges before building for another seat. + * The centre pose and two symmetric endpoints are deliberately separated from + * the mechanical endpoints. M1 uses a 120-Hall peak-to-peak stroke (about + * 18 mm of the calibrated vertical component) so the rider can feel a real + * rise/fall instead of only a backrest pitch. M0 uses a 100-Hall stroke at + * 90% duty to overcome the opposing horizontal component created by that + * diagonal M1 stroke. This file is the ECU-side customization + * point; config/modes/vehicles/denza_n7/rocking_horse.yaml mirrors these values + * for the long-term mode library and frontend. + */ +#define SEAT_DYNAMIC_HORSE_ENTRY_M0_HALL (320u) +#define SEAT_DYNAMIC_HORSE_ENTRY_M1_HALL (190u) +#define SEAT_DYNAMIC_HORSE_ENTRY_M2_HALL (500u) +#define SEAT_DYNAMIC_HORSE_ENTRY_M3_HALL (430u) + +#define SEAT_DYNAMIC_HORSE_FORWARD_M0_HALL (270u) +#define SEAT_DYNAMIC_HORSE_FORWARD_M1_HALL (250u) +#define SEAT_DYNAMIC_HORSE_FORWARD_M2_HALL (460u) +#define SEAT_DYNAMIC_HORSE_FORWARD_M3_HALL (400u) + +#define SEAT_DYNAMIC_HORSE_BACKWARD_M0_HALL (370u) +#define SEAT_DYNAMIC_HORSE_BACKWARD_M1_HALL (130u) +#define SEAT_DYNAMIC_HORSE_BACKWARD_M2_HALL (540u) +#define SEAT_DYNAMIC_HORSE_BACKWARD_M3_HALL (460u) + +#define SEAT_DYNAMIC_HORSE_M0_DUTY_PERCENT (90u) +#define SEAT_DYNAMIC_HORSE_M1_DUTY_PERCENT (90u) +#define SEAT_DYNAMIC_HORSE_M2_DUTY_PERCENT (90u) +#define SEAT_DYNAMIC_HORSE_M3_DUTY_PERCENT (50u) +#define SEAT_DYNAMIC_HORSE_FINAL_DUTY_PERCENT (50u) +#define SEAT_DYNAMIC_HORSE_RENDEZVOUS_PULSES (8u) +#define SEAT_DYNAMIC_HORSE_PHASE_TIMEOUT_MS (15000u) + +#if ((SEAT_DYNAMIC_HORSE_ENTRY_M0_HALL > 480u) || \ + (SEAT_DYNAMIC_HORSE_FORWARD_M0_HALL > 480u) || \ + (SEAT_DYNAMIC_HORSE_BACKWARD_M0_HALL > 480u) || \ + (SEAT_DYNAMIC_HORSE_ENTRY_M1_HALL > 374u) || \ + (SEAT_DYNAMIC_HORSE_FORWARD_M1_HALL > 374u) || \ + (SEAT_DYNAMIC_HORSE_BACKWARD_M1_HALL > 374u) || \ + (SEAT_DYNAMIC_HORSE_ENTRY_M2_HALL > 917u) || \ + (SEAT_DYNAMIC_HORSE_FORWARD_M2_HALL > 917u) || \ + (SEAT_DYNAMIC_HORSE_BACKWARD_M2_HALL > 917u) || \ + (SEAT_DYNAMIC_HORSE_ENTRY_M3_HALL > 647u) || \ + (SEAT_DYNAMIC_HORSE_FORWARD_M3_HALL > 647u) || \ + (SEAT_DYNAMIC_HORSE_BACKWARD_M3_HALL > 647u)) +#error "Rocking-horse Hall targets exceed the nominal N7 calibrated ranges." +#endif + +#endif /* SEAT_DYNAMIC_MODE_CONFIG_H */ diff --git a/firmware/t2g/Seat_Controller_demo/Config/seat_move_config.h b/firmware/t2g/Seat_Controller_demo/Config/seat_move_config.h index a7a73b2..fc5591e 100755 --- a/firmware/t2g/Seat_Controller_demo/Config/seat_move_config.h +++ b/firmware/t2g/Seat_Controller_demo/Config/seat_move_config.h @@ -67,14 +67,25 @@ #define SEAT_MOVE_CAN_PROTOCOL_VERSION (1u) /* Repository image identity carried by 0x301 byte 7 high nibble. Increment * whenever a host-visible safety or motion fix requires automatic reflash. */ -#define SEAT_MOVE_FIRMWARE_REVISION (6u) +#define SEAT_MOVE_FIRMWARE_REVISION (13u) #define SEAT_MOVE_CAN_COMMAND_ID (0x300u) #define SEAT_MOVE_CAN_SYSTEM_STATUS_ID (0x301u) #define SEAT_MOVE_CAN_MOTOR_STATUS_ID (0x302u) #define SEAT_MOVE_CAN_DIAGNOSTIC_ID (0x303u) #define SEAT_MOVE_CAN_CURRENT_DIAGNOSTIC_ID (0x304u) +#define SEAT_MOVE_CAN_DYNAMIC_STATUS_ID (0x306u) #define SEAT_MOVE_SYSTEM_STATUS_PERIOD_MS (100u) +#define SEAT_MOVE_DYNAMIC_STATUS_PERIOD_MS (100u) +/* Native dynamic modes are bounded independently of the host process. The + * ECU keeps cycling after the start ACK, but always stops after ten minutes + * if no STOP_DYNAMIC/STOP_ALL command arrives. */ +#define SEAT_MOVE_DYNAMIC_MAX_RUNTIME_MS (600000u) +/* The phase duration is the requested synchronized-arrival target. A loaded + * bench axis may be physically slower (notably M2 for the 472-pulse breathing + * stroke), so normal Hall progress may continue through this bounded grace + * window. Stall/no-motion and driver-fault protections remain immediate. */ +#define SEAT_MOVE_DYNAMIC_ARRIVAL_GRACE_MS (30000u) #define SEAT_MOVE_MOTOR_STATUS_POLL_MS (25u) /* One motor is emitted per poll; 25 ms gives each axis a 100 ms 0x303/0x304 * update period and captures the 200 ms high-current confirmation window. */ @@ -148,7 +159,8 @@ (SEAT_MOVE_CAN_SYSTEM_STATUS_ID > 0x7FFu) || \ (SEAT_MOVE_CAN_MOTOR_STATUS_ID > 0x7FFu) || \ (SEAT_MOVE_CAN_DIAGNOSTIC_ID > 0x7FFu) || \ - (SEAT_MOVE_CAN_CURRENT_DIAGNOSTIC_ID > 0x7FFu)) + (SEAT_MOVE_CAN_CURRENT_DIAGNOSTIC_ID > 0x7FFu) || \ + (SEAT_MOVE_CAN_DYNAMIC_STATUS_ID > 0x7FFu)) #error "Seat movement CAN identifiers must be 11-bit standard IDs." #endif diff --git a/firmware/t2g/Seat_Controller_demo/Docs/README_Seat_Controller_demo.md b/firmware/t2g/Seat_Controller_demo/Docs/README_Seat_Controller_demo.md index d3f9862..3cbae29 100755 --- a/firmware/t2g/Seat_Controller_demo/Docs/README_Seat_Controller_demo.md +++ b/firmware/t2g/Seat_Controller_demo/Docs/README_Seat_Controller_demo.md @@ -1,6 +1,6 @@ # Seat_Controller_demo -`Seat_Controller_demo` 是 `CYT4BFBCJE` / `CY_MCU_rev_d` / Cortex-M0+ Flash 的单板统一座椅控制器工程,集成座椅通风、靠背加热和四电机移动。SDL 公共源码未修改,应用配置和功能代码均位于本工程目录。 +`Seat_Controller_demo` 是 `CYT4BFBCJE` / `CY_MCU_rev_d` / Cortex-M0+ Flash 的单板统一座椅控制器工程,集成座椅通风、靠背加热、四电机移动和两个原生连续循环动态模式。动态模式收到停止/全停命令或启动累计10分钟时终止。SDL 公共源码未修改,应用配置和功能代码均位于本工程目录。 ## 单板资源 @@ -22,8 +22,9 @@ - TX `0x301/0x302/0x303`:移动 ACK、状态和 Hall 诊断。 - TX `0x304`:四轴电流诊断;B0 MotorID,B1 bits0..4依次为采样有效/零点有效/高电流/低Hall/标定中,B2..3 ADC raw,B4..5停止态零点raw,B6..7该轴堵转电流差值阈值raw。 - TX `0x305`:热管理电流诊断;B0采样有效标志,B1输出状态,B2..3通风电流raw,B4..5靠背加热电流raw,B6/B7为两路ADC累计错误计数(饱和到255)。 +- TX `0x306`:100 ms动态模式状态;ModeID、状态、阶段、四轴ActiveMask、循环序号和阶段已运行毫秒数。 -CAN 为 500 kbit/s、经典标准帧、11-bit ID、DLC 8。移动协议版本为 1;支持 `MOVE_ABSOLUTE`、`MOVE_RELATIVE`、`MOVE_TIMED`、`STOP_MOTOR`、`STOP_ALL`、`CALIBRATE_RANGE`、`HOME_KNOWN_RANGE`、`QUERY_STATUS` 和 `CLEAR_FAULT`。四轴定义及完整字节布局见 `Docs/outputs/seat_move_four_motor_20260724/座椅四电机移动功能CAN矩阵表.xlsx`。 +CAN 为 500 kbit/s、经典标准帧、11-bit ID、DLC 8。移动协议版本为 1;支持 `MOVE_ABSOLUTE`、`MOVE_RELATIVE`、`MOVE_TIMED`、`STOP_MOTOR`、`STOP_ALL`、`CALIBRATE_RANGE`、`HOME_KNOWN_RANGE`、`QUERY_STATUS`、`CLEAR_FAULT`、`START_DYNAMIC_MODE(0x0E)` 和 `STOP_DYNAMIC_MODE(0x0F)`。ModeID 1为木马模式,ModeID 2为动态摇篮;两者均按目标到位连续循环。四轴定义及完整字节布局见 `Docs/outputs/seat_move_four_motor_20260724/座椅四电机移动功能CAN矩阵表.xlsx`。 2026-07-30 四个独立量程入口已验证 CAN MotorID 与板级物理 Mode 同号映射:M0/physical0 水平前后、M1/physical1 坐盆上下、M2/physical2 靠背前后、M3/physical3 腿托上下。首次测试仍须目视确认没有错误执行机构动作。 @@ -46,6 +47,7 @@ CAN 为 500 kbit/s、经典标准帧、11-bit ID、DLC 8。移动协议版本为 - 四轴分别具有启动宽限(M0/M1/M2=1 s,M3=2 s)。普通移动仅在“500 ms Hall双边沿窗口不超过2个边沿”且“相对停止态零点的轴电流超过独立阈值并持续200 ms”同时成立时报告 `STALL`;低Hall但电流低或采样过期时不误报堵转,连续5 s无运动后关断并报告 `TIMEOUT`。 - 真实台架诊断必须同时保存命令期间的 `0x304` 电流峰值和 `0x303` Hall 变化:高电流且无 Hall 表示机械阻塞或 Hall 公共参考异常,低电流且双向无 Hall 更符合驱动桥、连接器、电机线束或 Hall 地线开路。2026-08-01 的 M0/M1/M2 异常最终定位为 Hall 地线断开;2026-08-02 恢复接线后完整 33 条自动 HIL 全部通过。不得靠提高 Duty、阈值或超时掩盖同类线路问题。 - 四轴普通绝对/相对移动默认使用90% PWM占空比;堵转电流差值阈值在重新带载标定前统一使用500 raw保守默认值,优先避免正常运动误报。PWM软件上限保持95%。 +- 动态模式按Hall目标和阶段时长做低速位置进度闭环;四轴同步启动,在相位边界以±3 Hall判定到位后统一停止再切换。任何轴不能在阶段宽限内到位时全停并通过`0x306`报告FAULT。 - 位置任务因端点/堵转事件停止时,若最终Hall已进入目标±2脉冲范围则按到位完成;底层LastEvent仍由`0x303`保留用于诊断。超过该范围的STALL/TIMEOUT仍按失败处理。 - `HOME_KNOWN_RANGE`/全量标定的寻端语义与普通移动分离。端点要求500 ms内Hall双边沿为0,避免慢速移动仅有下降沿时被误判为端点;已知量程归零若第一次寻近端少于4个真实Hall边沿,会先向远端验证至少4个双边沿再重新寻近端,并校验回程与离端边沿数(允许1边沿误差),禁止把电机未启动直接清零。无法证明往返运动时归零失败并使PositionValid失效。位置和量程仍按Hall上升沿计数。 - `STOP_ALL` 不受旧 Sequence 限制;CAN RX ISR 先立即终止四路 PWM,因此也能打断阻塞式全行程标定,主流程随后完成 ACK 和 Sequence 重同步。 @@ -70,5 +72,18 @@ CAN 为 500 kbit/s、经典标准帧、11-bit ID、DLC 8。移动协议版本为 - `Tests/manual_hil/05_seat_function_bridge.py`:在ZCANPRO内运行的CAN桥接。 - `Tests/manual_hil/run_seat_function_gui.bat`:Windows选择界面,从仓库根目录 `座椅功能模式配置表.xlsx` 连续动态读取当前11种模式/12个场景,显示物理目标、重算Hall、CAN结果并保存人工观察;小憩模式为单场景,并包含新增“小腿解压悬浮模式”。 - `Tests/manual_hil/02_power_memory.py` 默认只做正常掉电恢复;`03_protection_faults.py` 默认只做无需注入设备的协议保护。 +- `Tests/manual_hil/07_dynamic_modes.py`:revision 13原生动态模式HIL。验证带水平耦合补偿的木马模式和动态摇篮的完整阶段顺序、精确Hall目标、四轴全程联动、自动跨周期和停止;ECU另有600 s硬截止。 + +2026-08-04已验证公共动态运行时的自动续环、循环中停止,以及单次连续运行600.024 s后的ECU安全截止;任何轴堵转、无运动或驱动故障仍会保持全停,固件不绕过底层保护。 + +同日revision 9在M1执行已知量程回近端后通过重新设计的摇篮实测:Step 1→2启动/到位离散0.077/0.338 s,Step 2→3为0.079/0.495 s,全部目标在±3 Hall内,CycleIndex自动进入1,下一轮四轴启动离散0.082 s,停止后`0x306`全零。 + +同日revision 10删除M1延迟追赶:正向/返回水平与靠背约走25%时,坐盆已走44.0%/39.0%;四轴启动离散0.070/0.050 s、到位离散0.342/0.339 s,下一轮启动离散0.051 s。四轴从阶段开始全程联动,停止后`0x306`全零。 + +同日revision 11用木马模式替换旧ModeID 1轨迹。木马在前俯`[290,220,460,400]`和后仰`[350,160,540,460]`间连续往复;稳态前俯/后仰启动离散0.080/0.079 s,到位离散0.234/0.232 s,水平到25%时坐盆已达41.7%/36.7%,完整周期约9.0 s。目标、自动续环和停止全零均PASS,配置见`Config/seat_dynamic_mode_config.h`。 + +同日revision 12将坐盆目标扩大到`250↔130` Hall并把M1巡航占空比提升为90%,坐盆峰峰垂直分量约18 mm。稳态前俯/后仰启动离散0.054/0.081 s,到位离散0.389/0.182 s,水平到25%时坐盆已达46.6%/35.8%,完整周期约9.2 s;无FAULT、目标、自动续环和停止全零均PASS。 + +同日revision 13将M0水平目标扩大到`270↔370` Hall并把巡航Duty提升为90%,用100 Hall峰峰行程补偿M1斜向运动。实测水平峰峰行程约43.1 mm、估算净水平摆幅约26.7 mm;稳态前俯/后仰启动离散0.077/0.052 s,到位离散0.337/0.182 s,四轴巡航持续推进、无FAULT、目标、自动续环和停止全零均PASS。 本轮不执行 `01_calibration_position.py` 或 `04_waveform_full_function.py`,两者均已设置归档保护。具体顺序和日志回传要求见 `Tests/manual_hil/README_CN.md`。 diff --git a/firmware/t2g/Seat_Controller_demo/Docs/座椅控制器_CAN_测试规范.md b/firmware/t2g/Seat_Controller_demo/Docs/座椅控制器_CAN_测试规范.md index a94609f..d2939fd 100644 --- a/firmware/t2g/Seat_Controller_demo/Docs/座椅控制器_CAN_测试规范.md +++ b/firmware/t2g/Seat_Controller_demo/Docs/座椅控制器_CAN_测试规范.md @@ -1,13 +1,13 @@ # 座椅控制器 CAN/HIL 测试规范 -版本:2.3(2026-07-30) +版本:3.0(2026-08-03) 对象:`Seat_Controller_demo`、`量程测试脚本` MCU:CYT4BFBCJE / CY_MCU_rev_d / Cortex-M0+ Flash 总线:Classic CAN,11-bit 标准帧,500 kbit/s,DLC=8,Intel/Little-endian ## 1. 目的与范围 -本规范用于验证统一控制器的座椅通风、靠背加热、四轴移动、自动标定、反馈周期和安全停机。测试分为静态构建、无机械动作 CAN 检查、单轴低风险动作、多轴并发、全行程标定和故障注入。未经安全确认不得直接跳到多轴或标定阶段。 +本规范用于验证统一控制器的座椅通风、靠背加热、四轴移动、原生动态模式、自动标定、反馈周期和安全停机。测试分为静态构建、无机械动作 CAN 检查、单轴低风险动作、多轴并发、动态时序、全行程标定和故障注入。未经安全确认不得直接跳到多轴、动态模式或标定阶段。 配套文件: @@ -66,20 +66,32 @@ Byte0=Opcode;Byte1=`0x10 | MotorID | (Direction<<2)`;Byte2..3=Sequence;Byt | `0B` | 已知量程回最近端 | `0x4B52` | 最近端寻找10~600 s | | `0C` | 查询状态 | 0 | 0 | | `0D` | 清故障 | `0xC33C` | 0 | +| `0E` | 启动原生动态模式 | ModeID:1木马模式、2动态摇篮 | 0 | +| `0F` | 停止原生动态模式 | 0 | 0 | ### 3.3 移动反馈 -- `0x301`:Byte0 低半字节 ACK、高半字节 SystemState;Byte1 RejectReason;Byte2..3 Sequence;Byte4 Opcode;Byte5 ActiveMask/抑制/标定/故障;Byte6 FaultedMask/PositionValidMask;Byte7 低半字节 Alive、高半字节 FirmwareRevision(当前为 2)。 +- `0x301`:Byte0 低半字节 ACK、高半字节 SystemState;Byte1 RejectReason;Byte2..3 Sequence;Byte4 Opcode;Byte5 ActiveMask/抑制/动态/标定/故障;Byte6 FaultedMask/PositionValidMask;Byte7 低半字节 Alive、高半字节 FirmwareRevision(当前为 13)。 - `0x302`:Byte0 MotorID;Byte1 TaskState/Result;Byte2 方向、Active、PositionValid、端点、堵转和驱动故障;Byte3..4 Sequence;Byte5..6 归一化位置;Byte7 驱动等级。 - `0x303`:Byte0 MotorID;Byte1 LastEvent/FaultFlags;Byte2..3 HallCount;Byte4..5 MaxHallCount;Byte6 Hall速度(0.5 pulse/s/LSB);Byte7 Retry/Alive。 +- `0x306`:原生动态模式状态,周期100 ms;Byte0 ModeID,Byte1 State(0 IDLE、1 ENTRY、2 RUNNING、3 FAULT),Byte2 Phase(1 ENTRY、2 HORSE_FORWARD、3 HORSE_BACKWARD、5 CRADLE_FORWARD、6 CRADLE_RETURN;4保留),Byte3低半字节ActiveMask、高半字节FaultMask,Byte4..5 CycleIndex,Byte6..7 PhaseElapsedMs。 -ACK:0 NONE、1 ACCEPTED、2 REJECTED、3 DUPLICATE、4 STOP_ALL_ACCEPTED。RejectReason 与 TaskState/Result 以移动矩阵“枚举定义”页为准。`0x301` Byte5 bit5 当前固定为0,预留给未来通信监控。 +ACK:0 NONE、1 ACCEPTED、2 REJECTED、3 DUPLICATE、4 STOP_ALL_ACCEPTED。RejectReason 与 TaskState/Result 以移动矩阵“枚举定义”页为准。`0x301` Byte5 bit5 表示原生动态模式正在执行。 RejectReason:0 NONE、1 BAD_DLC、2 BAD_VERSION、3 BAD_OPCODE、4 BAD_MOTOR、5 BAD_DIRECTION、6 PARAM_RANGE、7 POSITION_INVALID、8 SEQUENCE_OLD、9 BUSY_SAME_MOTOR、10 INTERLOCK、11 FAULT_ACTIVE、12 SERVICE_MODE_REQUIRED、13 CAL_DATA_INVALID、14 INTERNAL_ERROR。 TaskState:0 IDLE、1 ACCEPTED、2 POSITION_RUN、3 TIMED_RUN、4 CALIBRATION、5 STOPPING、6 COMPLETE、7 FAULT。Result:0 NONE、1 RUNNING、2 OK、3 STOPPED_BY_CMD、4 ENDPOINT_REACHED、5 STALL、6 TIMEOUT、7 DRIVER_FAULT、8 HALL_FAULT、9 INVALID_CMD、10 INTERLOCKED、11 CALIBRATION_FAILED。 -### 3.4 本地位置记忆(SMV8) +### 3.4 原生动态模式时序 + +- ModeID 1“木马模式”revision 13:入口 Hall `[320,190,500,430]`;向前俯摆到`[270,250,460,400]`,再向后仰摆到`[370,130,540,460]`,随后在两个端点间连续往复。M1峰峰行程120 Hall;M0峰峰行程100 Hall,以更大的水平速度和行程补偿M1斜向运动;每阶段先到目标前8 Hall会合,再以50% Duty完成等距末段,单段15 s仅作为无到位安全上限。 +- ModeID 2“动态摇篮”revision 13:Step 1入口 Hall `[391,140,405,404]`;Step 1→Step 2四轴从阶段开始全程联动并以位置会合方式到`[246,281,701,494]`;Step 2→Step 3同步返回`[391,140,405,404]`。阶段完成条件是四轴全部目标到位,不再声明或等待固定30 s,也不允许任一轴延迟到末段追赶。 +- 两种模式的每个运动阶段均在同一调度批次启动四轴;木马巡航占空比M0/M1/M2/M3为90/90/90/50%,动态摇篮为50/50/90/50%,到会合点后再同步执行等距末段。起动与到位离散均要求不大于1.0 s。 +- Step 3与下一轮Step 1的坐标完全相同,因此该边界物理位移为0;ECU原子递增CycleIndex并立即同步启动下一轮Step 1→Step 2,不伪造一次零位移电机启动。 +- 四轴命令同时启动,动态目标容差为±3 Hall。底层5 s无运动、堵转、驱动故障和最终到位超时仍会立即或在其既定保护时间内全停,并令`0x306.State=FAULT`。 +- `STOP_DYNAMIC(0x0F)`和`STOP_ALL(0x09)`都必须终止循环;未收到停止指令时,ECU从启动命令起累计600 s后自动执行同等安全停止。正常或到时停止后`0x306`回到全零IDLE。 + +### 3.5 本地位置记忆(SMV8) - 两个128-byte Work Flash 小扇区交替保存,记录含 Magic/Version、单调 Sequence、Clean标志、四轴绝对 Hall、MaxHall、最大速度、累计 Hall 上升沿、物理绝对量、PositionValid 和 CRC32。 - 每个动作命令真正启动前先写入较新 dirty 记录;写完才允许 PWM 启动。若此时掉电,新记录阻止旧 clean 位置被恢复。 @@ -109,7 +121,8 @@ TaskState:0 IDLE、1 ACCEPTED、2 POSITION_RUN、3 TIMED_RUN、4 CALIBRATION 5. 每轴 300~500 ms 正反向点动并目视签字确认映射。 6. 单轴定时、同轴换向、单轴停止和四轴并发互不干涉。 7. 已知量程回最近端、每次移动结束保存、正常掉电恢复、运动中掉电失效及恢复、绝对/相对位置精度。 -8. 堵转、驱动故障、CAN bus-off、C-SPY 结束和看门狗路径。 +8. `07_dynamic_modes.py`:完整验证两个原生动态模式的命令ACK、0x306阶段顺序、阶段时长、四轴启动/到位离散度、自动跨周期和停止。 +9. 堵转、驱动故障、CAN bus-off、C-SPY 结束和看门狗路径。 每个阶段开始前先发送全停,结束后再次发送全停。任何实物动作与预期不符时停止后续用例。 @@ -152,7 +165,20 @@ TaskState:0 IDLE、1 ACCEPTED、2 POSITION_RUN、3 TIMED_RUN、4 CALIBRATION - 重复帧只返回 DUPLICATE,不产生第二次动作;旧 Sequence 拒绝且输出不变;旧 Sequence 的 STOP_ALL 仍必须执行。 - 未标定时绝对/相对位置命令拒绝,CurrentPosition=`0xFFFF`;定时命令仍可用。 -### 6.4 标定与位置 +### 6.4 动态模式 + +- 动态摇篮revision 13不使用固定30 s/60 s完成条件;Step 1→2和Step 2→3只在四轴全部进入±3 Hall目标带后切换,单段保护上限30 s。四轴启动离散度和最终到位离散度均不大于1.0 s;水平与靠背均达到25%行程时,坐盆归一化进度必须不小于15%,用于阻止末段追赶回归。 +- 木马模式不设置停驻阶段;前俯与后仰只在四轴全部进入±3 Hall目标带后反向,单段保护上限15 s。入口只用于建立中间姿态,验收必须额外观察至少一个后仰→前俯→后仰的完整稳态循环。 +- 台架轴在标称时间尚未到位时,只有Hall正常进展且在30 s窗口内到达精确目标才可继续循环;不得虚报到位或省略目标。无Hall进展、堵转、驱动故障或超过窗口必须进入FAULT并全停。 +- 2026-08-04已验证公共动态运行时单次连续运行600.024 s后自动回到全零IDLE且无FAULT;循环中`STOP_DYNAMIC(0x0F)`也可立即安全停止。该公共安全逻辑由两个当前模式共用。 +- 当前台架动态摇篮在向前收拢时由M1坐盆轴触发STALL;`0x306`故障位为`0x2`。独立单轴90%固定占空比复测同样在约45.2%(Hall约169)失速,无法到达75%(281 pulse)目标,证明阻断点不在动态调度。修复机构卡滞、负载、供电/驱动或Hall问题前,不得屏蔽堵转保护、降低需求目标或伪造循环PASS。 +- 2026-08-04 revision 9重新设计并先执行M1已知量程回近端:Hall 169连续回到0,Near/PositionValid有效且MaxHall保持374。随后Step 1→2实测17.329 s,四轴启动/到位离散0.077/0.338 s;Step 2→3实测15.155 s,离散0.079/0.495 s;目标分别精确到`[246,281,701,494]`和`[391,140,405,405]`,CycleIndex进入1且无FAULT。下一轮四轴重新启动离散0.082 s,停止后`0x306`全零,PASS。 +- 2026-08-04 revision 10移除M1延迟追赶后,Step 1→2在水平进度25.5%、靠背35.3%时坐盆已达44.0%;Step 2→3在水平25.5%、靠背28.7%时坐盆已达39.0%。启动离散0.070/0.050 s,到位离散0.342/0.339 s,目标精确、下一轮启动离散0.051 s、无FAULT、停止全零,PASS。 +- 2026-08-04 revision 11木马模式实测稳态前俯/后仰启动离散0.080/0.079 s,到位离散0.234/0.232 s;水平到25%时坐盆已达41.7%/36.7%,目标误差不超过1 Hall,稳态完整周期约9.0 s。自动进入下一轮且停止后`0x306`全零,PASS。 +- 2026-08-04 revision 12木马模式把坐盆峰峰行程由60增至120 Hall,实测稳态前俯/后仰启动离散0.054/0.081 s,到位离散0.389/0.182 s;水平到25%时坐盆已达46.6%/35.8%,目标误差不超过2 Hall,稳态完整周期约9.2 s。自动进入下一轮、无FAULT且停止后`0x306`全零,PASS。 +- 2026-08-04 revision 13木马模式把M0峰峰行程由60增至100 Hall、巡航Duty由50%增至90%。按实测MaxHall=499换算水平峰峰行程约43.1 mm,扣除M1斜向行程估算的16.4 mm反向水平分量后净水平摆幅约26.7 mm。稳态前俯/后仰启动离散0.077/0.052 s,到位离散0.337/0.182 s;巡航检查点四轴均持续推进,目标误差不超过1 Hall,自动续环、无FAULT且停止全零,PASS。 + +### 6.5 标定与位置 - 每轴按负端→正端完成,标定中 `0x301 SystemState=CALIBRATION`、Byte5 bit6=1,`0x302 TaskState=CALIBRATION`,周期反馈不中断。 - MaxHallCount 软件允许范围(实测值的70%~130%):M0 336~624,M1 261~486,M2 641~1192,M3 452~841,且大于等于8。台架目标值分别为480、374、917、647;超出允许范围标定失败。 diff --git a/firmware/t2g/Seat_Controller_demo/Driver/motor_control.c b/firmware/t2g/Seat_Controller_demo/Driver/motor_control.c index d56ae00..caae00c 100755 --- a/firmware/t2g/Seat_Controller_demo/Driver/motor_control.c +++ b/firmware/t2g/Seat_Controller_demo/Driver/motor_control.c @@ -74,6 +74,10 @@ #define MOTOR_SPEED_CONTROL_START_DELAY_MS (500ul) #define MOTOR_SPEED_CONTROL_CHECK_MS (100ul) #define MOTOR_SPEED_CONTROL_WINDOW_MS (500ul) +#define MOTOR_SPEED_PROGRESS_CONTROL_START_MS (100ul) +#define MOTOR_SPEED_CONTROL_MIN_DUTY_PERCENT (5u) +#define MOTOR_SPEED_CONTROL_PAUSE_DUTY_PERCENT (0u) +#define MOTOR_SPEED_PROGRESS_TOLERANCE_PULSES (1ul) #define MOTOR_SPEED_CONTROL_HISTORY_SAMPLES \ (MOTOR_SPEED_CONTROL_WINDOW_MS / MOTOR_SPEED_CONTROL_CHECK_MS) #define MOTOR_SPEED_TOLERANCE_PERCENT (10ul) @@ -210,6 +214,11 @@ #error "MOTOR_SPEED_CONTROL_WINDOW_MS must be a multiple of the speed check period." #endif +#if ((MOTOR_SPEED_CONTROL_MIN_DUTY_PERCENT == 0u) || \ + (MOTOR_SPEED_CONTROL_MIN_DUTY_PERCENT >= MOTOR_SPEED_MIN_DUTY_PERCENT)) +#error "Adaptive speed duty must be below the fixed-duty command minimum." +#endif + #if ((MOTOR_PWM_DUTY_PERCENT < MOTOR_SPEED_MIN_DUTY_PERCENT) || \ (MOTOR_PWM_DUTY_PERCENT > MOTOR_SPEED_MAX_DUTY_PERCENT)) #error "The default motor duty must stay inside the speed-control duty limits." @@ -711,9 +720,9 @@ static bool Motor_CalculateSpeedPlan(uint32_t motorIndex, profile->speedStepPpsX100 - 1ul) / profile->speedStepPpsX100; initialDuty = dutySteps * MOTOR_SPEED_DUTY_STEP_PERCENT; - if(initialDuty < MOTOR_SPEED_MIN_DUTY_PERCENT) + if(initialDuty < MOTOR_SPEED_CONTROL_MIN_DUTY_PERCENT) { - initialDuty = MOTOR_SPEED_MIN_DUTY_PERCENT; + initialDuty = MOTOR_SPEED_CONTROL_MIN_DUTY_PERCENT; } else if(initialDuty > MOTOR_SPEED_MAX_DUTY_PERCENT) { @@ -1187,6 +1196,21 @@ static void Motor_SafetyTaskFromIsr(void) continue; } + /* Long synchronized trajectories use pulse-density control whenever + * their requested speed is below the loaded mechanism's proven 50% + * breakaway duty. A zero-duty pause is intentional de-energization, + * not a no-motion fault. The absolute task/phase deadline still + * bounds the pause, and the activity window is reset when drive + * resumes. */ + if((false != state->speedControlEnabled) && + (state->speedCurrentDutyPercent == + MOTOR_SPEED_CONTROL_PAUSE_DUTY_PERCENT)) + { + state->lowHallTracking = false; + state->stallCurrentTracking = false; + continue; + } + if(false != state->calibrating) { state->lowHallTracking = false; @@ -1804,6 +1828,14 @@ static void Motor_CommitPreparedHardwareStartUnsafe(uint32_t motorIndex) (false == state->calibrating)) { dutyPercent = state->speedInitialDutyPercent; + /* Dynamic trajectories may need a low steady-state PWM to stretch a + * short Hall travel over tens of seconds. Give every loaded axis the + * proven 50% breakaway pulse first; after the 500 ms measurement delay + * the closed loop may ramp below the public fixed-duty command floor. */ + if(dutyPercent < MOTOR_SPEED_MIN_DUTY_PERCENT) + { + dutyPercent = MOTOR_SPEED_MIN_DUTY_PERCENT; + } } state->speedCurrentDutyPercent = dutyPercent; Motor_ResetSpeedMeasurementUnsafe(state); @@ -2302,6 +2334,9 @@ static void Motor_SpeedControlService(uint32_t motorIndex) uint32_t elapsedMs; uint32_t actualPpsX100; uint32_t targetPpsX100; + uint32_t planElapsedMs; + uint32_t plannedProgressPulses; + uint32_t actualProgressPulses; uint32_t savedIntrStatus; uint8_t historyIndex; uint8_t newDutyPercent; @@ -2347,6 +2382,39 @@ static void Motor_SpeedControlService(uint32_t motorIndex) state->speedLastSampleTicks = nowTicks; elapsedTicks = (uint32_t)(nowTicks - baseTicks); + planElapsedMs = MOTOR_TICKS_TO_MS( + (uint32_t)(nowTicks - state->speedControlStartTicks)); + if(planElapsedMs > state->speedDurationMs) + { + planElapsedMs = state->speedDurationMs; + } + plannedProgressPulses = (uint32_t) + (((uint64_t)state->speedPlannedHallPulses * planElapsedMs + + (state->speedDurationMs / 2ul)) / state->speedDurationMs); + actualProgressPulses = rawEdges - state->speedBaselineRawEdges; + + /* Loaded axes need a short 50% breakaway pulse, but waiting for the full + * 500 ms speed window lets a short-travel axis build an unrecoverable + * lead. Position progress is meaningful from the first 100 ms sample, + * so de-energize an already-ahead axis immediately. Driving it at an + * arbitrary sub-breakaway duty can create current without Hall progress + * and was the cause of false cradle STALLs. */ + if(((uint32_t)(nowTicks - state->speedControlStartTicks) >= + MOTOR_MS_TO_TICKS(MOTOR_SPEED_PROGRESS_CONTROL_START_MS)) && + (actualProgressPulses > + (plannedProgressPulses + MOTOR_SPEED_PROGRESS_TOLERANCE_PULSES))) + { + if(state->speedCurrentDutyPercent != + MOTOR_SPEED_CONTROL_PAUSE_DUTY_PERCENT) + { + state->speedCurrentDutyPercent = + MOTOR_SPEED_CONTROL_PAUSE_DUTY_PERCENT; + Motor_ApplyDutyPercent(motorIndex, + MOTOR_SPEED_CONTROL_PAUSE_DUTY_PERCENT); + } + Cy_SysLib_ExitCriticalSection(savedIntrStatus); + return; + } if(((uint32_t)(nowTicks - state->speedControlStartTicks) < MOTOR_MS_TO_TICKS(MOTOR_SPEED_CONTROL_START_DELAY_MS)) || (elapsedTicks < MOTOR_MS_TO_TICKS(MOTOR_SPEED_CONTROL_WINDOW_MS))) @@ -2369,11 +2437,43 @@ static void Motor_SpeedControlService(uint32_t motorIndex) newDutyPercent = state->speedCurrentDutyPercent; state->speedActualPpsX100 = actualPpsX100; - if((((uint64_t)actualPpsX100) * 100ull) < - (((uint64_t)targetPpsX100) * - (100ul - MOTOR_SPEED_TOLERANCE_PERCENT))) + /* Speed-only regulation cannot synchronize very short and long axes: the + * loaded motor breakaway pulse puts a short travel several seconds ahead + * even when its eventual speed is correct. Track the time-position line + * as well. An axis ahead of the line drops immediately to the adaptive + * floor; an axis behind it ramps up. Within one Hall pulse, the ordinary + * measured-speed loop keeps each energized burst bounded. */ + if(actualProgressPulses > + (plannedProgressPulses + MOTOR_SPEED_PROGRESS_TOLERANCE_PULSES)) { - if(newDutyPercent < MOTOR_SPEED_MAX_DUTY_PERCENT) + newDutyPercent = MOTOR_SPEED_CONTROL_PAUSE_DUTY_PERCENT; + } + else if((actualProgressPulses + MOTOR_SPEED_PROGRESS_TOLERANCE_PULSES) < + plannedProgressPulses) + { + if(newDutyPercent < MOTOR_SPEED_MIN_DUTY_PERCENT) + { + newDutyPercent = MOTOR_SPEED_MIN_DUTY_PERCENT; + } + else if(newDutyPercent < MOTOR_SPEED_MAX_DUTY_PERCENT) + { + newDutyPercent = (uint8_t) + (newDutyPercent + MOTOR_SPEED_DUTY_STEP_PERCENT); + if(newDutyPercent > MOTOR_SPEED_MAX_DUTY_PERCENT) + { + newDutyPercent = MOTOR_SPEED_MAX_DUTY_PERCENT; + } + } + } + else if((((uint64_t)actualPpsX100) * 100ull) < + (((uint64_t)targetPpsX100) * + (100ul - MOTOR_SPEED_TOLERANCE_PERCENT))) + { + if(newDutyPercent < MOTOR_SPEED_MIN_DUTY_PERCENT) + { + newDutyPercent = MOTOR_SPEED_MIN_DUTY_PERCENT; + } + else if(newDutyPercent < MOTOR_SPEED_MAX_DUTY_PERCENT) { newDutyPercent = (uint8_t) (newDutyPercent + MOTOR_SPEED_DUTY_STEP_PERCENT); @@ -2400,6 +2500,10 @@ static void Motor_SpeedControlService(uint32_t motorIndex) newDutyPercent = MOTOR_SPEED_MIN_DUTY_PERCENT; } } + else if(newDutyPercent != MOTOR_SPEED_CONTROL_PAUSE_DUTY_PERCENT) + { + newDutyPercent = MOTOR_SPEED_CONTROL_PAUSE_DUTY_PERCENT; + } } else { @@ -2408,6 +2512,15 @@ static void Motor_SpeedControlService(uint32_t motorIndex) if(newDutyPercent != state->speedCurrentDutyPercent) { + if((state->speedCurrentDutyPercent == + MOTOR_SPEED_CONTROL_PAUSE_DUTY_PERCENT) && + (newDutyPercent >= MOTOR_SPEED_MIN_DUTY_PERCENT)) + { + /* Resume gets a fresh 500 ms activity window, matching a normal + * hardware start. This prevents the first loaded-current sample + * from being compared with the intentionally quiet pause. */ + Motor_ResetActivityWindowUnsafe(state); + } state->speedCurrentDutyPercent = newDutyPercent; Motor_ApplyDutyPercent(motorIndex, newDutyPercent); } diff --git a/firmware/t2g/Seat_Controller_demo/IAR/Seat_Controller_demo.ewp b/firmware/t2g/Seat_Controller_demo/IAR/Seat_Controller_demo.ewp index ea9e06c..d4ecfd8 100755 --- a/firmware/t2g/Seat_Controller_demo/IAR/Seat_Controller_demo.ewp +++ b/firmware/t2g/Seat_Controller_demo/IAR/Seat_Controller_demo.ewp @@ -2275,6 +2275,12 @@ $PROJ_DIR$\..\App\seat_move_application.h + + $PROJ_DIR$\..\App\seat_dynamic_mode.c + + + $PROJ_DIR$\..\App\seat_dynamic_mode.h + $PROJ_DIR$\..\App\seat_move_store.c diff --git a/firmware/t2g/Seat_Controller_demo/IAR/rev_d/Exe/Seat_Controller_demo.hex b/firmware/t2g/Seat_Controller_demo/IAR/rev_d/Exe/Seat_Controller_demo.hex index b20cff6..6729950 100755 --- a/firmware/t2g/Seat_Controller_demo/IAR/rev_d/Exe/Seat_Controller_demo.hex +++ b/firmware/t2g/Seat_Controller_demo/IAR/rev_d/Exe/Seat_Controller_demo.hex @@ -1,12 +1,12 @@ :020000041000EA -:100000000000022809D4001095DB0010CDD80010A4 +:100000000000022879E10010B1E90010CDE60010EF :1000100000000000000000000000000000000000E0 -:100020000000000000000000000000008DD900105A -:10003000000000000000000099DB00109DDB0010B4 -:10004000D5CD0010F9CD00101DCE001041CE00100E -:1000500065CE001089CE0010ADCE0010D1CE0010BC -:10006000A1DB0010A5DB0010A9DB0010ADDB001048 -:10007000B1DB0010B5DB0010B9DB0010BDDB0010F8 +:100020000000000000000000000000008DE700104C +:100030000000000000000000B5E90010B9E9001060 +:1000400045DB001069DB00108DDB0010B1DB001018 +:10005000D5DB0010F9DB00101DDC001041DC0010C6 +:10006000BDE90010C1E90010C5E90010C9E90010A0 +:10007000CDE90010D1E90010D5E90010D9E9001050 :1000800000B5010009B2002905D40121C006C00E47 :100090008140C648016000BD00B5010009B20029D9 :1000A00005D40121C006C00E8140C148016000BDD9 @@ -31,8 +31,8 @@ :1001D00081218900405870470168802212060A4335 :1001E0000260704780B5FFF7ADFF02BD80B5FFF735 :1001F000AFFF01BD80B5FFF7CBFF02BD80B5FFF7B4 -:10020000D8FF01BD80B503F0B2FD02BD80B503F09B -:10021000C0FD02BD00B5022801D301200FE00B0094 +:10020000D8FF01BD80B503F046FE02BD80B503F006 +:1002100054FE02BD00B5022801D301200FE00B00FF :10022000DBB2042B01DB012009E0B34B800018187E :10023000C9B2405C824201D3012000E0002000BD31 :10024000F8B504001F00022C01D3012023E01500A3 @@ -74,11 +74,11 @@ :10048000AD4B1340F6B23202C0218900114019432E :10049000FF229143EAB20A4361034250610340588C :1004A000002070BDDCB506000F0010001900069C8E -:1004B0004901C20E1143400132003B0003F07DFCB4 +:1004B0004901C20E1143400132003B0003F011FD1F :1004C000060091204000FFF779FFF106C90E009168 :1004D00071090B051B0D5B1E2200D2B20321C0B2B5 :1004E000FFF7F8FED3BD80B51300A74A13600023C1 -:1004F000137203F028FD01BD98DA001000B5C0B2F8 +:1004F000137203F0BCFD01BD98E8001000B5C0B256 :10050000042801D2012000E00020C0B200BD00B5E7 :10051000401A00B2012801DB012000E00020C0B237 :1005200000BD00B5BE490978002901D000201FE0B8 @@ -86,9 +86,9 @@ :10054000891D415C002908D1FC214058002801D1B7 :10055000012000E00020C0B20AE08021490041589B :10056000FC228058814201D1012000E00020C0B26D -:1005700000BD00B5C0B264214843642103F022FDF0 +:1005700000BD00B5C0B264214843642103F0B6FD5C :1005800000BD10B504000800C0B2FFF7F2FF010083 -:10059000A448A2018018406903F0F9FE10BD0000D4 +:10059000A448A2018018406903F08DFF10BD00003F :1005A00000000440FF00FFFF10B40021B42281507E :1005B0009D4A1368BC2403511268C023C2500268CC :1005C000C423C2500A00F023C254F122815410BC4B @@ -97,16 +97,16 @@ :1005F000099B002B11D00A9B002B0ED00092009A71 :10060000002A0AD0002808D0E26A824205D30A00F4 :10061000002A02D0616B002901D1002054E00021A2 -:10062000002303F0BDFE06000F00E06A4008002131 -:1006300080197941E26A002303F0BFFB0500300016 -:1006400039007A4A002303F0ABFE06000F00E06A8F -:100650000021009A002303F0A3FE02000B00009685 +:10062000002303F051FF06000F00E06A400800219C +:1006300080197941E26A002303F053FC0500300081 +:1006400039007A4A002303F03FFF06000F00E06AFA +:100650000021009A002303F037FF02000B000096F0 :100660000197100019004008CE0730434908009E4A -:10067000019F8019794103F0A0FB0600002D0BD0EB +:10067000019F8019794103F034FC0600002D0BD056 :10068000002E09D0BE4802998422520051434018DE :10069000B8214058B04201D2002015E0606B3018FC -:1006A000401E616B03F08EFC05214843322801D2C5 -:1006B000322002E0602800D35F2008990D6009997C +:1006A000401E616B03F022FD05214843052801D25D +:1006B000052002E0602800D35F2008990D600999A9 :1006C0000E600A9908700120FEBD80B55549800171 :1006D0000818016AC069FFF727FD002801D0012032 :1006E00000E00020C0B202BD10B44F490A68426267 @@ -120,16 +120,16 @@ :100760008E21415C00290BD08F21415C002907D0EC :100770002D490968806B081A332801D2012000E056 :100780000020C0B200BD00002C120028F8B503F014 -:1007900022FF002801D1002041E0002425002EE0A6 +:10079000B6FF002801D1002041E0002425002EE012 :1007A00084214900764A6846038828004843101887 :1007B0007426835368460388280048431018762619 :1007C0008353230028004843101878268353164883 :1007D0000368280048431018836323002800484317 :1007E00010188726835501231E002800484310183F :1007F0008E27C655694350188F2143546D1C042D14 -:1008000008D269462800C0B203F074FF0028C7D19F +:1008000008D269462800C0B204F008F80028C7D111 :10081000002004E004480068934908600120F2BD0C -:100820004C1C00283CCF0010901B0028A086010023 +:10082000B01C0028ACDC0010F01B0028A0860100E2 :10083000FEB58D488D4909680268891A052900D2DC :100840009DE08A4909680160002452E0D2B2002A82 :100850003ED02000704328187621405A072141439A @@ -141,14 +141,14 @@ :1008B0008F23C05C0028C9D168460288200070439D :1008C00028187623C2522000704328188F228154A2 :1008D0002000704328187621415A68460088FFF7A7 -:1008E0002DFF6643A91978228852019804F004F874 -:1008F000641C042C43D269462000C0B203F0FAFE07 -:10090000002825D103F0F4FF84225200584B210027 +:1008E0002DFF6643A91978228852019804F094F8E4 +:1008F000641C042C43D269462000C0B203F08EFF72 +:10090000002825D104F084F884225200584B21009D :10091000514359188725495DFF290AD021005143C9 :10092000591887254D5D6D1C2100514359188726A4 :100930008D552100514359188725495D032904D35A -:10094000002162439A188E23D15403F0D5FFCFE7DC -:1009500003F0CEFF019084267600454D20007043C1 +:10094000002162439A188E23D15404F065F8CFE752 +:1009500004F05EF8019084267600454D2000704337 :1009600028187E21405C002884D12000704328187C :100970009421405C002800D07CE701227BE7F7BD92 :100980000813002810B53A4A84235B004343D21869 @@ -159,16 +159,16 @@ :1009D000135502E000237F2413558A23D35C972408 :1009E00013558223D15400218A23D1549423D15406 :1009F0007E21515C002905D0D34980010818406947 -:100A000003F083FF10BD38B5002429E0CF4B13E07D +:100A000004F013F810BD38B5002429E0CF4B13E0F3 :100A100084214900164A2000484310188B23C05CEB :100A20000028F3D020004843101880690028EDD03A :100A30002000484310188369200048431018962569 :100A4000405D00280BD0094800686143511849698E :100A5000401A984203D305212000FFF793FF641C3E -:100A6000042CD5D331BD00009C1B0028901B00280E +:100A6000042CD5D331BD0000FC1B0028F01B00284E :100A700008130028F8B500273C0061E1B44AB248E9 :100A8000A1014018016AB048A301C018C06903F071 -:100A90005AFA84256D00AF4E20006843375020007D +:100A9000EEFA84256D00AF4E2000684337502000E9 :100AA0006843301847602000684330188760A648C4 :100AB000A1014018816A200068433018C1602000FD :100AC00068433018076120006843301847612000F0 @@ -211,13 +211,13 @@ :100D10003900200068433018FF22921D81543900A9 :100D20002000684330188322520081542000684319 :100D30003018FFF739FC65437019FFF7D5FC641CC8 -:100D4000042C00D29AE6F1BD3CCF0010B888000018 -:100D5000941200280813002870B50600B6488421B4 +:100D4000042C00D29AE6F1BDACDC0010B88800009B +:100D5000941200280813002870B50600BF488421AB :100D60004900714344183000FFF7AFFC05008820AC :100D7000205C002805D1852025540120882160545D :100D80007EE028008521615CC0B2884268D060683E :100D9000401C60607E20205C002806D19520205CED -:100DA000002802D0C048006820622800C0B2002895 +:100DA000002802D07348006820622800C0B20028E2 :100DB00054D02068401C20607E20205C0100C9B215 :100DC000002905D19521615C002901D08120205C9A :100DD0000100C9B2012918D18920205C002808D15E @@ -229,13 +229,13 @@ :100E3000002813D07E20205C012803D1A0682169FE :100E4000884207D27E20205C022807D12069A16851 :100E5000884203D301213000FFF794FD85202554FB -:100E60009520205C00280BD08F480068216A401A2A +:100E60009520205C00280BD042480068216A401A77 :100E7000322805D3002001009522A154812160541D -:100E800070BD70B56C498422520042438C187E219B -:100E9000615C00296CD08D21615C00292CD1824ECF -:100EA0003568964980010818806B0021FA2292006B -:100EB000002303F075FA02000B009148002180180E -:100EC0005941FA22D200002302F077FF616A691AC1 +:100E800070BD70B575498422520042438C187E2192 +:100E9000615C00296CD08D21615C00292CD1354E1C +:100EA00035689E4980010818806B0021FA22920063 +:100EB000002303F009FB02000B0099480021801871 +:100EC0005941FA22D200002303F00BF8616A691A33 :100ED00081424DD301208D216054306820636068C9 :100EE00060630020206701007A22A15201007C2269 :100EF000A1528C2160543BE07C20205A0A2810D259 @@ -244,3310 +244,3536 @@ :100F20000FE07A20205A80B280002018806C7A214D :100F3000615A626889B2890061188A646168081A16 :100F400020677A20205A401C010089B20A2900D368 -:100F500000207A2160527C20205A0A2808D3524867 +:100F500000207A2160527C20205A0A2808D30548B4 :100F60000068216B401AFA2802D301208C216054BA -:100F700070BD000070B50026340019E030009021EB -:100F8000685430009121685411E030009121685478 -:100F90008220285C00280AD143480068E96B401A87 -:100FA0009249884203D305212000FFF7EBFC641C23 -:100FB000042C77D220488421490061434518200041 -:100FC000FFF75FFF7E20285C002807D08220285C86 -:100FD000002803D18C20285C002800D1E7E78B2073 -:100FE000285C002814D030009021685430009121F2 -:100FF0006854286F00280AD17E20285C022801D17D -:10100000022100E00321C9B22000FFF7BBFCCEE7BC -:10101000286F0328B2D22000FFF79CFBC0B2002843 -:101020000CD07820285A3549A2018918898F884226 -:1010300004D3012003E000BF0813002830009021F2 -:10104000695C00290BD101219022A9541649096835 -:10105000E9636968296431009122A95408E069684C -:101060002A6C914204D0696829640F490968E963D0 -:10107000C0B2002889D09120285C002806D1012028 -:101080009121685408480068686481E70648006850 -:10109000696C401A642800D27AE704212000FFF727 -:1010A00071FC75E770BD0000901B002838B59C4CA2 -:1010B000200003F049FD00281BD0200003F049FD6B -:1010C00098480168491C01600024250003E02800BD -:1010D000FFF742FE6D1C042DF9D3FFF794FCA548E1 -:1010E0000168491C01600168192902D30460FFF7F7 -:1010F00041FF31BD8B480068704700003CCF0010B5 -:10110000CF07000070B528250026340009E0022230 -:1011100001219948A301C0181823C05EFFF752F9B6 -:10112000641C042CF3D302220121FF204230FFF77C -:1011300049F9914C1820205EFFF740F92B005B1E07 -:1011400002220121C0B2FFF77BF81820205EFFF7D2 -:1011500035F902220121C0B2FFF774F9350011E020 -:101160008649A8012018406902F084FFA8012018D0 -:10117000406903F0FFF80021A8012018406903F03E -:101180000AF96D1C042DEBD3012420007C49087062 -:101190006448066077480660614E7A49300003F083 -:1011A000BBFB300003F0D5FC300003F0C7FC764DEC -:1011B000280003F0D7FC75490020285E03F0F1FCFD -:1011C00003210220285EFEF773FF0220285EFEF74F -:1011D00063FF0220285EFEF753FF300003F0A8FCF7 -:1011E000300003F08CFBAB48047070BDC4090000F4 -:1011F000F8B500220121A848FFF775F90122022164 -:10120000A648FFF770F900220121A548FFF76BF906 -:10121000A44D012201212800FFF765F900220021D9 -:10122000A148FFF760F9A14C002204212000FFF73C -:101230005AF9002205212000FFF755F9002200216C -:101240002800FFF750F9FFF715FC99480090082097 -:1012500000990860974E13243470974FBF4A0021BD -:10126000380002F070FE0625009805603470BB4A15 -:101270000121380002F067FE009805603470B74A1B -:101280000221380002F05FFEF1BD78B58DB06846EE -:10129000B349342203F098FC3948007800280BD079 -:1012A000B04803F032FBB04803F02FFBAF4803F027 -:1012B0002CFBAF4803F029FB7B4E6A46002130002F -:1012C00002F041FE794D6A460421280002F03BFEFF -:1012D0006A460521280002F036FE724C6A4600215B -:1012E000200002F030FE00213000FEF727FF04212D -:1012F0002800FEF723FF05212800FEF71FFF00212D -:101300002000FEF71BFF012000906A46012120000B -:1013100002F019FE01212000FEF70CFF0EB070BD97 -:10132000000A5840901B00281CB59124640001223B -:1013300003212000FFF746F8012000908D4A00238A -:101340008D480021FFF7AEF82000FFF737F80122A3 -:101350000321C0B2FFF776F8884C200003F096FD19 -:1013600000228749200003F057FC2000FEF734FFDD -:1013700013BD0000941B00283CCF001094D3001034 -:101380004A1C002844D60010A0DA0010AD1000104E -:10139000F2B5060000273C000098002801D100208B -:1013A00077E038000099088003F0A2FACD49097867 -:1013B000002903D003F0A0FA00206AE00121C94A05 -:1013C000117003F099FA6D4D2800FEF70FFF280009 -:1013D000FEF714FF02213148FEF7B0FE012003F0B2 -:1013E000DDFDB6B231002800FEF710FF01283ED126 -:1013F000BD4E00E0761E2800FEF7FCFE002801D15D -:10140000002EF7D12800FEF7F5FE00282FD0B64EAB -:1014100000E0761E2800FEF7E5FE002801D1002E30 -:10142000F7D12800FEF7DEFE002820D00122009927 -:101430002800FEF7E7FE012819D1C020000200991C -:1014400009880140814201D1012400E03C002000D4 -:10145000C0B200280BD0A5480078002807D000981B -:101460000088FC2189010140002900D03C000120B6 -:1014700003F094FD02210948FEF75CFE012003F011 -:101480008DFD03F035FA97490F7003F035FA20000F -:10149000C0B2F2BD491C002880013140800F3140AC -:1014A00080043140000431408000314080023140EE -:1014B00064120028681200280003314080B5C0B2D1 -:1014C0000202FC2080011040C9B20843694680B284 -:1014D000FFF75EFF02BD1CB50C00C0B20002FC218C -:1014E000890101408020C0010843002C05D06946D5 -:1014F00080B2FFF74DFF002801D1002003E06846CD -:1015000000882070012016BD38B505000C002100B0 -:10151000C9B22800C0B2FFF7D1FF002801D10020D6 -:101520000FE069462800C0B2FFF7D5FF002806D0BB -:1015300068460078E4B2A04201D1012000E000201A -:10154000C0B232BD80B5B44A00211160017C117275 -:10155000C168806802F0F7FC01BD0000601200283D -:1015600010D8001000065840800658400007584028 -:101570008009584000B4C4040024F4000000644012 -:1015800094D60010F8B50126300000246846047097 -:10159000564804700121A148FEF7CCFDC24F01213D -:1015A0003800FEF7C7FD9E4D280003F0F7FC01212F -:1015B0009C48FEF7BFFD280003F0F0FC0221082044 -:1015C000FFF7A2FF05002800C0B2002804D00021C8 -:1015D0000920FFF799FF05002800C0B2002804D0B9 -:1015E00000210A20FFF790FF05002800C0B2002864 -:1015F00004D00F210B20FFF787FF05002800C0B2A1 -:10160000002804D0A5210C20FFF77EFF050028004C -:10161000C0B2002804D000210D20FFF775FF05009F -:101620002800C0B2002804D000210E20FFF76CFF74 -:1016300005002800C0B2002808D087210720FFF746 -:101640003DFF0500FA20800003F0A8FC2800C0B28E -:10165000002804D086210720FFF756FF0500280048 -:10166000C0B200280ED069460020FFF734FF0028E2 -:1016700007D068460078BF210140802901D135009C -:1016800000E025002800C0B2002810D0A148047056 -:10169000B7480470B748047014480670B64800682C -:1016A000B649086001213800FEF748FD07E0B1485F -:1016B00006700E48047001213800FEF73BFD28003B -:1016C000C0B2F2BD10B50400534A00201060107281 -:1016D000E168A06802F037FCE168A068FEF72EFD23 -:1016E00010BD00004E1C0028A0860100511C0028DF -:1016F000F8B5012420009F49087000252800A7495B -:10170000087001216848FEF715FD2E000FE0A4487F -:101710000078002805D0A348B1014018406903F0C3 -:10172000F4F8A048B1014018FFF7CCFF761C042E56 -:10173000EDD303F0DDF80090280044E02A0011E02A -:10174000B64984225200424389188A228A5C002AC0 -:1017500007D197228A5C002A03D198228A5C002A4A -:10176000ECD022002B007E268B552B007F268B553C -:101770002B0080268B552B0082268B550723832632 -:101780008B552E008A27CE552E008B27CE552E0046 -:101790009427CE552E009527CE552E009627CE5550 -:1017A0002E009727CE552E008927CE55D2B2002A7B -:1017B00008D084228B549C228A58A023CA5022002D -:1017C0009823CA54401C0428BAD3009803F094F814 -:1017D000F1BD80B57148007800280AD065480078CE -:1017E000002806D1654864490A680368D21A192A94 -:1017F00000D20FE00968016069460020FFF76BFE28 -:10180000002805D068460078BF210140802901D01A -:10181000FFF76EFF01BD0000C812002880013140B3 -:10182000102700008004314070B55E4A8001101816 -:10183000504A1278002A01D0002034E02422825C31 -:10184000092A14D1334D2A782523C35C9A432523D2 -:10185000C45C0C4014432100C9B20920FFF754FEB8 -:1018600006003000C0B2002815D02C7013E0404DA7 -:101870002A782523C35C9A432523C45C0C40144377 -:101880002100C9B20A20FFF73FFE06003000C0B2B7 -:10189000002800D02C703000C0B2002801D1FFF722 -:1018A00027FF3000C0B270BD0004314038B50400DD -:1018B0003C48A1014518686903F027F82800FFF7A4 -:1018C00001FF00212000FFF7AFFF32BD70B505001A -:1018D0003448AA018618C9B2012902D12620345CF5 -:1018E00001E02720345C0F20E840C00701D400202D -:1018F0000FE0706903F009F83000FFF7E3FE210004 -:10190000C9B22800FFF790FF002801D1002000E0B5 -:10191000012070BD471C002870B504002148A101BA -:1019200045183E488421490061434018F421465C33 -:1019300083214900415C002905D08B21415C0029AD -:1019400001D1F221465CF3214654FEF72DFE310011 -:10195000C9B22000FEF715FE0021686902F01BFDE8 -:10196000686902F0CCFF2800FFF7ECFD70BD0000B5 -:10197000481C00284B1C0028901B0028981B00289E -:1019800000B50A00D2B2002A07D081228154AD49A5 -:101990000968016201219522815400BD511C002873 -:1019A0004A1C00283CCF0010842281549C214158BD -:1019B000A0228150012198228154704700B59C21BA -:1019C0004158491C9C2281509C214158002902D138 -:1019D00001219C22815000210A008423C254A022AC -:1019E00081509822815400BD00B58B21415C0029B3 -:1019F00004D08169002901D0816900E092499622D2 -:101A0000825C002A07D08F4A12684069101A884207 -:101A100001D3012000E00020C0B200BD081300285F -:101A200080B500217E2281547F22815480228154FE -:101A3000942281549522815481228154962281548A -:101A40008A228154972281540121832281540121C9 -:101A5000FFF7AAFF01BDF3B583B07C480399842248 -:101A600052005143441800206946087000250020A8 -:101A7000694648700027002069468870002602F0F9 -:101A800037FF01909420205C00284DD08220205CFC -:101A9000002849D16E480078002845D12000FEF783 -:101AA00040FD002840D06846007CC0B2002809D024 -:101AB00064480068E169401A322835D39520205CDB -:101AC000002831D12000FFF78FFF002804D0052126 -:101AD0000398FEF757FF27E08A20205C002808D0F3 -:101AE000A0682169884204D12000FFF799FF0127EF -:101AF0001AE08A20205C002807D0A068216988426B -:101B000001D2012003E0022001E08020205C694630 -:101B1000087068460078002803D0012069464870A4 -:101B200002E0002069464870019802F0E5FE3800A6 -:101B3000C0B2002803D00398FFF7B8FE80E06846E3 -:101B40004078002801D100207AE0684601780398A7 -:101B5000FFF7BCFE002801D1002071E002F0C8FEB2 -:101B600001909420205C002856D08220205C002820 -:101B700052D13748007800284ED12000FEF7D1FC22 -:101B8000002849D02000FFF72FFF002804D00521AE -:101B90000398FEF7F7FE3FE08A20205C002810D073 -:101BA000A0682169884204D12000FFF739FF01278E -:101BB00009E0A0682169884201D2012503E00225DD -:101BC00001E08020255C3800C0B200281CD128002C -:101BD00069460978C0B2884216D1684600787E21ED -:101BE00060540020802160549421605495216054F9 -:101BF000812160542000FEF777FD0398FFF78CFEEB -:101C000001266846867007E0FFB2002F03D18020CE -:101C10002554012600E00126019802F06DFE684679 -:101C2000807800280AD10A480078002804D1039857 -:101C3000FFF73CFE002801D1002001E03000C0B2D7 -:101C400005B0F0BD901B0028B888000008130028DC -:101C50004B1C0028F6B583B00D001F000400E4B251 -:101C60009C490978002916D0C0B2FEF747FC00282D -:101C700011D09948007800280DD1984800780028A4 -:101C800009D16846057068460078012805D0684685 -:101C90000078022801D001201AE102F029FE01900B -:101CA000842676008E4D2000704328188221405CE7 -:101CB000002806D1200070432818FEF732FC0028C7 -:101CC00004D1019802F018FE012001E120007043C8 -:101CD00028187E21415C0CA80078002813D10CA89C -:101CE00001700CA8007800280DD12000704328183E -:101CF0009522805C002806D020007043281881229D -:101D0000805C0CAA10700800C0B2002803D001202B -:101D10006A46507002E000206A4650700CA80078B5 -:101D200000280CD0C9B2002905D00CA8007869465B -:101D30000978884203D001206946887002E00020BB -:101D40006946887068464078002805D0C548A101DA -:101D50004018406902F0D9FD0A9902976846027C52 -:101D600000272000704328188223C75420007043A6 -:101D700028187F23C7542000704328188A23C25490 -:101D8000029B20007043281803612000704328182C -:101D90008B23C15420007043281897214754D2B296 -:101DA000002A08D00BA80078002804D02000704337 -:101DB0002818FFF703FE0D98C0B2002806D02000B7 -:101DC000704328189621405C002810D1A64801686D -:101DD0002000704328184161012120007043281819 -:101DE00096228154200070432818862147540BA85E -:101DF0000078002804D0200070432818832147541D -:101E00006846807800281ED02000704328187E2164 -:101E10004754684601782000704328188022815476 -:101E200091480168200070432818C16101212000F9 -:101E300070432818942281540CA801786643A8198D -:101E4000FFF79EFD20E02000704328187E214754B4 -:101E50006846017820007043281880228154824807 -:101E60000168200070432818C161012120007043DF -:101E70002818942281542000704328189521475433 -:101E80006643A81981214754019802F035FD684640 -:101E9000407800280CD07348A1014018FFF712FCCD -:101EA00000212000FFF7C0FC002801D101200FE035 -:101EB00068468078002801D0002009E00021200039 -:101EC000FFF7C9FD002801D0380000E00120C0B2B2 -:101ED00005B0F0BD491C00284C1C00284B1C0028F4 -:101EE0000813002880B50121FFF7B5FD01BDF1B54C -:101EF00086B05E4806998422520051434418002758 -:101F0000002502F0F5FC01908220205C69460870F3 -:101F100068460078002803D1019802F0EDFC9EE0AD -:101F20007F20205C694608748B20205C69464870DD -:101F30009720205C6946887000263000822160541A -:101F400030007E21605430007F21605430008021B9 -:101F5000605430009421605430008A2160546846F7 -:101F60000078832160543000972160546846017CDA -:101F70002000FFF705FD68468078002804D06846F9 -:101F800001782000FFF710FD6846007802280FD185 -:101F900001252F0068464078002807D19220205C58 -:101FA000002803D08620205C002830D035002EE0A9 -:101FB00068460078032810D1022768464078002838 -:101FC00009D19220205C002805D08620205C0028C2 -:101FD00001D101251BE0350019E06846007804288E -:101FE00015D16846007C012801D1022700E00127B5 -:101FF00068464078002809D19320205C002805D04D -:102000008620205C002801D1012500E03500280051 -:10201000C0B2002805D08620205C401C8621605478 -:1020200001E096202654019802F066FC0698FFF71E -:102030003DFC002813D0EDB2002D10D001200390FC -:102040006846007C02900020019000200090002350 -:1020500000223900C9B20698C0B2FFF7FBFD07B0F5 -:10206000F0BD00003CCF0010901B00280813002892 -:10207000F1B584B0A8480499842252005143441811 -:1020800002F036FC0700A548016883204000205C70 -:10209000002818D07E20205C002814D08B20205CE3 -:1020A000002810D19420205C00280CD18220205CD4 -:1020B000002808D19A480078002804D1C020205870 -:1020C000081A322803D2380002F016FCBBE026685A -:1020D000F020205CF122A25C052A0AD2C422A25878 -:1020E0000092BC22A258F123E35C5B1CF1256355EE -:1020F0000CE00200D2B29200A218C823D25800927B -:102100000200D2B29200A218DC23D2580300DBB244 -:102110009B00E318C8255E510300DBB29B00E31867 -:10212000DC255951401C0300DBB2052B00D30020F5 -:10213000F023E054C0202150881ABC22A258891AEA -:10214000FA2901D3FA2803D2380002F0D5FB7AE04D -:102150000021FA22D200002302F022F9FA22920092 -:10216000002301F02AFE0500002D03D1380002F003 -:10217000C3FB68E00098301A0021B34A002302F044 -:102180000FF902000B0068080021801859412A004D -:10219000002301F012FE0600B02020580290F32028 -:1021A000255CB4202650300000216422002302F078 -:1021B000F7F800900191029800215A22002302F0C2 -:1021C000EFF8009A019B8B420DD801D382420AD2CC -:1021D0002800C0B25F2826D26D1D2800C0B260283A -:1021E00021D35F251FE0029800216E22002302F018 -:1021F000D7F800900191300000216422002302F002 -:10220000CFF8009A019B8B420DD801D382420AD2AB -:102210002800C0B2332806D32800C0B2372801D323 -:10222000FB3500E032252800F321615CC0B2884212 -:1022300006D0F32025542900C9B20498FEF7A1F96D -:10224000380002F059FB05B0F0BDFEB5A748007894 -:1022500000285DD002F04CFBC5490978002902D066 -:1022600002F04AFB54E001273900C14A1170BB4912 -:102270000A786B461A70002422000A7002F03CFBB8 -:102280006846007800282BD0250027E026001AE0B9 -:10229000684600783900A94008421ED002F028FBA9 -:1022A0000190842149001C4A2800484310188223C9 -:1022B0005B00C05C0028E9D069435018FEF731F993 -:1022C0000028E3D13E00019802F016FBF6B2002E82 -:1022D00003D02800C0B200F05CF96D1C042DD7D3E8 -:1022E000FEF7A6FAFFF775FA250009E02800FFF7C8 -:1022F000FEFD2800FFF7F6FD2800FFF7B9FE6D1C74 -:10230000042DF3D302F0F4FA99490C7002F0F4FAB8 -:10231000F7BD03480078704708130028901B002879 -:102320004B1C0028F8B50E000700FFB26F49097872 -:10233000002904D0C0B2FEF7E1F8002801D1012045 -:1023400046E002F0D5FA04008A4884214900794326 -:10235000451889480078002804D0200002F0CCFA03 -:10236000012035E0FF20801D285C00280CD03100C2 -:1023700089B2F820285AFEF7CAF8002804D02000B5 -:1023800002F0BAFA012023E082204000285C0028F5 -:102390000FD0F620285A310089B2884219D1002086 -:1023A0008221490068546D4801780122BA40914366 -:1023B0000170F8202E52FC202858802149006850D6 -:1023C0000120FF21891D6854200002F095FA0020A9 -:1023D000F2BD200002F090FA0120F9E7F2B5040006 -:1023E000E4B242490978002904D0C0B2FEF786F869 -:1023F000002801D1002025E002F07AFA07008425A8 -:102400006D005C4E200068433018FEF78AF8002803 -:1024100012D0200068433018FF21891D405C00283D -:102420000AD0684600886C433119F822895A80B274 -:10243000814201D1012400E00024380002F05CFA5E -:102440002000C0B2F2BD0000A0860100F3B581B04B -:1024500000262DE000200EE0002482204000385CA1 -:102460000028F7D068460189F620385AFEF74FF861 -:102470000028EFD028002043C0B2002817D16846BA -:102480000089F6217852FC203858401CFC217850F5 -:10249000280082214900785430480178B5400D4326 -:1024A0000570AE48B1014018406902F02EFA761C62 -:1024B000042E1AD20125684600792900B14008424D -:1024C000F5D02C488421490071434718FF20801D16 -:1024D000385C0028C0D068460189F820385AFEF7D9 -:1024E00016F80028B8D02C00B7E7F7BD491C002823 -:1024F000F1B5002425002EE0842149001D4A6846DC -:102500000388280048431018F626835328004843C0 -:102510001018FC23C3585B1C280048431018FC26E5 -:10252000835101231E0028004843101882277F0092 -:10253000C655200069435118FF22921D8854074850 -:102540000178AB400B4303708448A90140184069EF -:1025500002F0DBF96D1C042DCED3F1BD4F1C002819 -:1025600080B50121044A117080B2FFF7C1FF01BD9F -:102570004D1C0028081300284C1C002810B500240E -:1025800004E02000C0B200F004F8641C042CF8D36E -:1025900010BDFEB50400E4B2B9490978002904D0A1 -:1025A000C0B2FDF7ABFF002801D10120D5E002F059 -:1025B0009FF9019084256D00B24E200068433018C9 -:1025C0007E21415C2000684330188322805C6A468B -:1025D00010702000684330188A22805C002806D1E1 -:1025E0002000684330189722805C002803D0012027 -:1025F0006A46507002E000206A465070C9B220005E -:1026000068433018FFF7BCF9002739002000684301 -:1026100030187E22815439002000684330187F2210 -:1026200081543900200068433018802281543900D9 -:1026300020006843301882228154B3480078002873 -:1026400006D007212000684330188322815430E0EF -:1026500068464078002806D00621200068433018DC -:102660008322815425E068460078022813D068460A -:10267000007803280FD06846007804280BD06846FD -:102680000078052807D068460078072803D06846F8 -:102690000078082807D16846017820006843301880 -:1026A0008322815405E039002000684330188322DA -:1026B000815439002000684330188A22815439003F -:1026C0002000684330188B22815439002000684371 -:1026D0003018942281543900200068433018962223 -:1026E000815439002000684330189722815468468D -:1026F0004078002805D0062165437019FFF754F98A -:102700000FE03900200068433018842281542000F3 -:1027100068433018A021475038006543711998224A -:102720008854019802F0E8F87748007800280BD028 -:102730000A4DA0012818406902F0E7F8A001281806 -:10274000FEF7C0FF012008E02000FFF7AFF80028E7 -:1027500001D0380000E00120C0B2FEBD3CCF001027 -:10276000FEB50D000400E4B245490978002913D0F4 -:10277000C0B2FDF7C3FE00280ED0AC4E3078002862 -:102780000AD1684605706846007832382E2803D290 -:102790005D4D2878002801D001206FE002F0A8F8F4 -:1027A0000190307800280CD12878002809D18425A0 -:1027B0006D00344E200068433018FDF7B2FE00284B -:1027C00004D1019802F098F8012057E0684601789A -:1027D000200068433018F42281540027390020007B -:1027E0006843301883225200815420006843301817 -:1027F000A4214750200068433018A82147502000EA -:1028000068433018AC214750200068433018B0218D -:10281000475068460178200068433018F2228154FE -:1028200068460178200068433018F3228154200064 -:1028300068433018FDF7B8FE2000684330187E2149 -:10284000405C00280ED02000684330188B21405C8B -:10285000002807D1654370198221405C002801D10E -:102860000127FFE7FFB2002F04D06846017820005F -:10287000FDF787FE019802F03FF80020FEBD000042 -:10288000491C002808130028F8B5002203920022F2 -:102890000292012201920022009200230022C9B27A -:1028A000C0B2FFF7D7F905B000BD38B50400E4B2F7 -:1028B000AE490978002904D0C0B2FDF71FFE0028F8 -:1028C00001D100201FE002F013F884225200A84B2F -:1028D0002100514359187E25495D00290CD1210062 -:1028E000514359189425495D002905D154431919BC -:1028F0009522895C002901D0012400E0002401F028 -:10290000FBFF2000C0B232BD4B1C002838B50C00C4 -:102910000500EDB2002C1FD0C0B2FDF7EFFD00287E -:102920001AD06068002817D06168280000F00CFFFA -:10293000002811D0207C002803D0606821688842DC -:102940000AD3A068002807D08A48A9014018006B64 -:102950004000A168884201D2012000E0002032BD81 -:10296000F8B50400E4B2814A1278002A06D00F00BC -:102970003900C0B2FFF7CAFF002801D0012053E0A0 -:1029800001F0B6FF009084256D00794E2000684369 -:1029900030187E21405C002814D120006843301894 -:1029A0009421405C00280DD1200068433018952107 -:1029B000405C002806D12000684330188221405C2A -:1029C000002804D0009801F097FF01202CE039681E -:1029D000200068433018816079682000684330180F -:1029E000C160B968200068433018B8228150F96886 -:1029F000200068433150397C200068433018892218 -:102A00008154002120006843301883228154200023 -:102A100068433018FDF768FE6C433019FDF7C4FDBC -:102A2000009801F069FF0020F2BD00004C1C002856 -:102A300070B50C000500EDB2002C08D04B490978A8 -:102A4000002904D0C0B2FDF759FD002801D10120B2 -:102A500020E001F04DFF84225200454B29005143F4 -:102A6000591889682160290051435918C968616063 -:102A7000290051435918B8268959A16029005143AA -:102A80005958E160554359198922895C217401F034 -:102A900033FF002070BDF8B50D000400E4B23349E7 -:102AA0000978002918D0C0B2FDF728FD002813D0FE -:102AB0007348007800280FD1C048007800280BD157 -:102AC00000950098002807D02A48A1014018006B03 -:102AD00040000099884201D2012036E001F008FF51 -:102AE000070084256D00B74E2000684330187E2112 -:102AF000405C00281BD12000684330189421405CC2 -:102B0000002814D12000684330189521405C00282B -:102B10000DD12000684330188221405C002806D186 -:102B2000200068433018FDF7FCFC002804D1380071 -:102B300001F0E2FE012008E000986C433119B82250 -:102B40008850380001F0D8FE0020F2BD00B59E4844 -:102B500000680021FA22D200002301F021FCFA22B1 -:102B60009200002301F029F900BD0000491C002853 -:102B7000081300283CCF0010F8B505000C002E000B -:102B8000F6B2002C09D091480078002805D0280022 -:102B9000C0B2FDF7B3FC002801D101206CE001F0C8 -:102BA000A7FE07008848016884225200854B300048 -:102BB00050431818806B091A2570300050431818BC -:102BC0008E25405D002803D0332901D2012000E08A -:102BD000002060703000504318188F25405DA070B1 -:102BE0003000504318187425405BE080300050439B -:102BF00018187625405B208130005043181878253E -:102C0000405B60816E48B5014019808FA08160787B -:102C1000002808D0A078002805D06089A589A8429E -:102C200001D3012000E00020E0703000504318186C -:102C30008C25405D002807D0300050431818006FE5 -:102C4000032801D2012000E000202071564398198A -:102C50008B22805C607108000021FA22D2000023E0 -:102C600001F09EFBFA229200002301F0A6F82061F9 -:102C7000380001F041FE0020F2BDA84908707047FD -:102C80004C1C0028FEB505000C002E00F6B2002CEE -:102C900009D04E480078002805D02800C0B2FDF7C2 -:102CA0002DFC002801D1012086E001F021FE0190D9 -:102CB00084214900434A3000484310188768300097 -:102CC00048431018C068009030004843101889230A -:102CD000C05C60703000484310187E23C05CA07058 -:102CE000714350188321405CE070019801F004FEAC -:102CF0000098002801D101205EE001970098019919 -:102D0000884201D2009801902D48B1014018C26A52 -:102D1000257067600098A06022610198002100235F -:102D200001F03EFB02000B000098400800218018D3 -:102D30005941009A002301F040F8E0600198002119 -:102D4000774A002301F02CFB02000B00009840089A -:102D5000002180185941009A002301F02EF860628A -:102D60000026A661E6612800C0B2002805D1E0680F -:102D70006061E068A06126621DE0EDB2012D17D10F -:102D8000E068606101980021664A002301F008FBB9 -:102D900002000B0000984008002180185941009A59 -:102DA000002301F00AF8A061E068E061266202E019 -:102DB0006661E06820620020FEBD00004B1C002818 -:102DC0003CCF001008130028901B0028491C002845 -:102DD000F8B588B00D0016000400E4B27A4909780D -:102DE00000290CD0C0B2FDF789FB002807D0774836 -:102DF0000078002803D176480078002801D001200F -:102E00008AE006960795FFF720FA01F071FD842607 -:102E100076006C4D210071436918CF6801F06CFD9C -:102E200003A8029004A8019005A80090069B079AA9 -:102E300039002000FDF7D2FB002801D101206BE012 -:102E400001F056FD07006148007800280AD160486B -:102E50000078002806D1200070432818FDF761FB98 -:102E6000002804D1380001F047FD012054E0079903 -:102E7000200070432818A422815006992000704336 -:102E80002818A82281500599200070432818AC22E8 -:102E900081500499200070432818B0228150684660 -:102EA000017B200070432818F22281546846017B80 -:102EB000200070432818F322815401212000704320 -:102EC0002818832252008154200070432818FDF7EF -:102ED0006BFB2000704328187E21405C00280ED038 -:102EE0002000704328188B21405C002807D16643DE -:102EF000A8198221405C002801D1012000E00020B7 -:102F0000C0B2002804D06846017B2000FDF739FBE1 -:102F1000380001F0F1FC002009B0F0BD501C002881 -:102F200010270000EC13000070B505000C002E0007 -:102F3000F6B2002C09D024480078002805D02800DB -:102F4000C0B2FDF7DBFA002801D1012038E001F022 -:102F5000CFFC257084225200B84B310051435918E0 -:102F600083256D00495D6170310051435918A425D6 -:102F700049596160310051435918A8254959A16048 -:102F8000310051435918AC254959E1603100514392 -:102F90005918B02549592161310051435918B425B8 -:102FA00049596161310051435918F225495D217633 -:102FB00056439919F322895C617601F09DFC00204B -:102FC00070BD000008130028491C00284C1C002874 -:102FD0004B1C0028F1B586B00C006846007E0190BD -:102FE0000026300030006946087430006946887059 -:102FF00030006946487092480078002809D0684639 -:10300000007EFDF77BFA002803D08E4D287800283B -:1030100001D0012010E10394FFF717F98A480199C4 -:1030200089014018C76A0398874201D2012003E151 -:1030300001F05EFC029081480199842252005143C4 -:1030400044188920205C002812D0E06800280FD0A6 -:103050008B20205C00280BD18220205C002807D127 -:103060002000FDF75EFA002802D02878002804D05E -:10307000029801F041FC0120DEE003980021E268A3 -:10308000002301F08DF902000B0078080021801860 -:1030900059413A00002300F090FE07007E20205C9A -:1030A000694608702000FEF789FC276101258A2007 -:1030B000255430008B21605430009721605430003B -:1030C000832160549420205C002819D0A068874296 -:1030D00001D1300005E0A068B84201D2280000E02C -:1030E0000220802160549620205C00287DD1574822 -:1030F000006860619620255430008621605474E099 -:1031000068460078002839D068460078012802D146 -:10311000A068B84206D368460078022804D1A068A7 -:10312000874201D2280000E030009621615C00292E -:1031300007D14649096861619621655431008622AC -:10314000A154C0B2002850D13F48019989014018CC -:10315000406901F0DAFB30007E21605430008021AC -:1031600060543A480068E06194202554684601782C -:103170002000FEF705FC6846857036E09520205C4F -:1031800000281DD0A068874201D1300005E0A0686A -:10319000B84201D2280000E0022080216054206A59 -:1031A000E061942025549620205C00281DD12748FA -:1031B000006860619620255430008621605414E038 -:1031C000A068874206D13000862160542000FEF7B7 -:1031D00027FC0AE0A068B84202D26846057402E003 -:1031E00002206946087468464570029801F084FB25 -:1031F00068468078002809D00198FEF757FB002820 -:1032000001D0300000E02800C0B215E068464078E8 -:10321000002810D000200390002002900020019090 -:10322000002000903B0001226846017C6846007E39 -:10323000FEF710FD00E0002007B0F0BD08130028E5 -:10324000491C00284B1C00283CCF0010901B002874 -:10325000FEB5C0B20400FDF74DFF019010E0FFB2D3 -:10326000002F46D0FDF746FF0199401A9349884246 -:1032700041D234480078002801D001F061FF30BF0E -:10328000FEF7E3FF01F0F5FF01F032FB009084252B -:103290006D002B4E2000684330189521475C88480C -:1032A000007800281AD1200068433018FDF739F95A -:1032B000002813D02000684330187E21405C00288D -:1032C0000CD12000684330189421405C002805D1BF -:1032D000654370198221405C002801D0012500E07F -:1032E0000025009801F008FBEDB2002DB7D00020BA -:1032F00002E0012000E00020FEBD0000FBB5170049 -:10330000089C0299002901D1002C18D0060001F078 -:10331000EFFA842252006B4B310051435D58564303 -:1033200099194E6801F0E8FA0298002803D0019834 -:10333000281A02990860002C01D0F01B2060F7BD0C -:1033400008130028501C0028F9B585B00D001600A0 -:103350006846047D0698002802D00020069908607F -:103360006846007DFFF774FF002801D10120A2E02C -:103370002F0001F0BDFA050030000021FA22920072 -:10338000002301F00DF802000B00B3480021801863 -:103390005941FA22D200002300F00FFD494984224E -:1033A0005200624389188861280001F0A5FA0020C4 -:1033B0000390002002900120019001200090002342 -:1033C00000223900C9B26846007DFEF743FC0028A0 -:1033D00001D001206FE001F08BFA3A4984225200BB -:1033E00062438918C96A019101F086FA0FE0FFB2C1 -:1033F000002F4FD1EDB2002D02D1F6B2002E49D0F0 -:10340000D0480078002801D001F09AFE30BFFEF7C6 -:103410001CFF01F02EFF01F06BFA84225200294BB1 -:10342000210051435918496800912100514359180E -:1034300083254F5D2100514359187E254D5D624320 -:10344000991894228E5C01F057FA00980199401A5D -:103450000428CCD36846007DFFF79BF8002805D1EF -:103460006846007DFFF7F4FE002809D10698009019 -:103470000023019A00212000FFF740FF01201AE0FD -:10348000069800900023019A00212000FFF736FFE4 -:10349000002010E06846007DFFF77BF86846007D5D -:1034A000FFF7D6FE069800900023019A0021200025 -:1034B000FFF724FF012007B0F0BD0000C4090000A1 -:1034C0004B1C002808130028F1B586B00E0015002B -:1034D0006846047E3000C0B2022803D1022069464B -:1034E000087402E0032069460874059305980028D3 -:1034F00002D00020059908600C98002802D0002016 -:103500000C9908606846007EFFF7A2FE002801D1F2 -:10351000012014E12F0001F0EBF905003800002133 -:10352000FA229200002300F03BFF02000B004A4801 -:10353000002180185941FA22D200002300F03DFCFE -:103540009D4984225200624389188861280001F055 -:10355000D3F9002003900020029001200190012067 -:103560000090002300223100C9B26846007EFEF7B9 -:1035700071FB002801D00120E1E001F0B9F98425B8 -:103580006D008D4E210069437118896A02912100F6 -:1035900069437118C96A019101F0AEF913E06846F8 -:1035A0004078002800D0B9E068460078002803D1B0 -:1035B000FFB2002F00D1B1E062480078002801D0AE -:1035C00001F0BEFD30BFFEF740FE01F052FE01F0FB -:1035D0008FF92100694371188322895C6A46517012 -:1035E0002100694371187E22895C6A4611702100AE -:1035F0006943711894228F5C2100694371189522E8 -:10360000895C6A46917001F077F9684640786946AE -:10361000097C8842C3D1684600780028BFD13800B1 -:10362000C0B20028BBD168468078002816D0684612 -:10363000007EFFF70DFE002810D16846007EFEF7E1 -:10364000A8FF0C980090059B019A02992000FFF7B3 -:1036500055FE012073E000BFCF07000001F048F9DC -:1036600007002000684330188321405C6946097CCC -:1036700088421FD12000684330187E21405C00281A -:1036800018D12000684330189421405C002811D1E3 -:103690002000684330189521405C00280AD12000A2 -:1036A00068433018FCF73DFF002803D043480078FA -:1036B000002810D0380001F01FF96846007EFEF7A0 -:1036C00068FF0C980090059B019A02992000FFF773 -:1036D00015FE012033E0200068433058039020009D -:1036E000684330184068009000206C4331198B22E9 -:1036F0008854380001F000F90598002804D0039898 -:103700000299401A059908600C98002804D0009886 -:103710000199401A0C990860002010E06846007E6C -:10372000FEF737FF6846007EFFF792FD0C98009089 -:10373000059B019A02992000FFF7E0FD012007B0E8 -:10374000F0BD0000501C0028F2B582B01C49800179 -:103750000818806A00216A4603C2083A64240025DA -:10376000684603C84622002300F01AFE22002B0000 -:1037700000F023FB06000F00684603C882220023E6 -:1037800000F00EFE22002B0000F017FB029A082A20 -:103790000FD3029A0023BB420BD301D8B24208D305 -:1037A000029A0023994204D301D8904201D3012008 -:1037B00000E00020C0B2FEBD081300284B1C00280A -:1037C0003CCF0010F9B58FB00F0016000FA8047899 -:1037D000002004900020079000200A900020002084 -:1037E000002000200990002008903220694648738C -:1037F00001250020002069460871002069460875EF -:10380000002005A948700020069024480078002870 -:103810001FD00FA80078FCF771FE002819D02048AF -:103820000078002815D11F480078002811D1029691 -:10383000029800280DD0684607736846007B002870 -:1038400011D06846007B01280DD06846007B022815 -:1038500009D01098002804D005A803C8109A03C204 -:10386000083A012012E201F043F8009084277F001B -:103870000D4E200078433018FCF753FE002815D178 -:10388000009801F039F81098002804D005A803C862 -:10389000109A03C2083A0120F8E100BF491C002831 -:1038A0004C1C00284B1C00280813002820007843DB -:1038B0003018C0680B90009801F01EF80FA800782F -:1038C000FEF767FE002800D095E16846007B0028DF -:1038D00060D107A8009004AB029A02210FA80078DB -:1038E000FFF7F2FD05002800C0B200282BD1079891 -:1038F000042828D20AAB029A01210FA80078FFF70A -:1039000023FD05002800C0B200281CD107A80090A4 -:1039100004AB029A02210FA80078FFF7D5FD05003D -:103920002800C0B200280ED1079800210022401CB8 -:10393000514102000B000A9800218B4203D801D3A9 -:10394000824200D201252800C0B2002820D100F018 -:10395000CFFF0090200078433018FCF7E2FD0028EC -:1039600004D1009800F0C8FF012544E100212000A7 -:103970007843301881600121200078433018892273 -:103980008154009800F0B8FF01206946087521E1D4 -:1039900001251FE16846007B012830D100200090FE -:1039A00004AB029A01210FA80078FFF78DFD0500F6 -:1039B0002800C0B2002820D100F09AFF009020001B -:1039C00078433018FCF7ADFD002804D1009800F0D2 -:1039D00093FF01250FE10B99200078433018816097 -:1039E000012120007843301889228154009800F08A -:1039F00083FF012005A94870ECE00125EAE00020E2 -:103A000000900023029A02210FA80078FFF75CFDC6 -:103A100005002800C0B2002828D100F069FF050089 -:103A2000200078433018FCF77CFD002804D12800E2 -:103A300000F062FF0125DEE000212000784330180D -:103A4000816020007843301889228154280000F0DA -:103A500053FF0120694608750020009004AB029ACC -:103A600001210FA80078FFF72FFD05002800C0B244 -:103A7000002800D0ADE004992000FFF765FE002883 -:103A800000D1A6E000F034FF2100794371188322B1 -:103A90005200895C6A469173210079437118A4220F -:103AA00089580D91210079437118A82289580C91E9 -:103AB00000F022FF6846807B00280ED003A8401C3F -:103AC000029008A8019009A800900C9B0D9A0499F7 -:103AD0002000FCF783FD6946087100F009FF0090A3 -:103AE000200078433018FCF71CFD002804D1009812 -:103AF00000F002FF01257EE0049920007843301891 -:103B0000C1600499200078433018816001212000B1 -:103B100078433018892281546846807B00284FD032 -:103B20006846007900281FD0099920007843301892 -:103B3000AC2281500899200078433018B02281507F -:103B40006846417B200078433018F2228154684651 -:103B5000417B200078433018F322815420007843C1 -:103B60003018FCF721FD2BE000210A0020007843EB -:103B7000301883235B00C254200078433018A422FD -:103B80008150200078433018A822815020007843CB -:103B90003018AC228150200078433018B022815078 -:103BA000200078433018B42281503221200078431D -:103BB0003018F2228154200078433018F3228154C7 -:103BC000009800F099FE012005A94870049806901D -:103BD00000E001252800C0B200280CD16846007B17 -:103BE000022808D000F084FE210079437118C968CA -:103BF000069100F081FE2800C0B200283CD0344875 -:103C00000078002803D10FA80078FEF7C2FC00F06E -:103C10006FFE00906846007B022808D16846007D50 -:103C2000002804D0049920007843301881600B9953 -:103C3000200078433018C16000210A00200078433A -:103C400030188923C2540A002000784330188B238F -:103C5000C254200078433018962281541C480078C2 -:103C6000002801D0072000E008207C43311983227E -:103C70008854009800F040FE1098002804D005A851 -:103C800003C8109A03C2083A2800C0B211B0F0BDB0 -:103C900038B500200F490870FDF7AAFAFDF744FB7C -:103CA000FDF770FC050000F096FC0400FDF72AFA11 -:103CB000EDB2002D06D0E4B2002C03D0FCF766FD77 -:103CC000002803D1FDF714FD012000E0002032BDE3 -:103CD0004B1C00284C1C0028D021890040587047FC -:103CE000C22189004058C005C00D70479022920043 -:103CF00081507047822189004058C005C00D70472F -:103D000000B50068800B8007800F002801D180205B -:103D100000E0402000BD00B5C02189004058C00629 -:103D2000C00E082801D2012000E00020C0B200BD72 -:103D3000F8B504000D0016002000FFF7ECFF002886 -:103D400009D02F000025B54210D22000FFF7C4FF94 -:103D500078556D1CF7E72F00002505E02000FFF7E0 -:103D6000BBFF690078526D1CB542F7D3F1BDF8B5C1 -:103D700007000D0016003800FFF7B2FF0400A6424E -:103D800000D23400290022003800FFF7D1FF2000C4 -:103D9000F2BDF8B505000C0000262800FFF7B0FFC3 -:103DA00007002800FFF7A6FF874204D02100280063 -:103DB000FFF79CFF01263000F2BD12422DD0994240 -:103DC00031D970B500251B4209D00C00002112E04A -:103DD000110000F0F7F80A000021002370BD09422D -:103DE000F6D00024012649186441944200D3A41A55 -:103DF0007641F8D33100012601E0764109D200185E -:103E000064416D41A41A9D41F7D2A4185D41B619D1 -:103E1000F5D3300022002B0070BD1B42CFD108B576 -:103E200002F070FC08BD01D19042CAD202000B0022 -:103E3000002100207047000070B55F4BC018C0091A -:103E400000015E4BC31804290CD21F251C68CE004C -:103E50002800B0408443D2B21540C80085402543B5 -:103E60001D600CE0FC311F255C68CE002800B040CE -:103E70008443D2B21540C800854025435D6070BDC3 -:103E800000B5002A03D101228A40426002E00122EB -:103E90008A40826000BD30B403008C000F25596C4D -:103EA0002800A04081431540A5400D435D6430BC0F -:103EB000704730B4030001259C6C2800884084437F -:103EC00015408D4025439D6430BC704730B40300DD -:103ED0000125DC6C28008840844315408D40254333 -:103EE000DD6430BC704730B403004C00103403254F -:103EF000D96C2800A04081431540A5400D43DD64E6 -:103F000030BC7047426901228A4042614069704773 -:103F100030B4030001259C69280088408443154083 -:103F20008D4025439D6130BC704730B403004C0088 -:103F30000325196C2800A04081431540A5400D437E -:103F40001D6430BC7047F8B504000025002C30D04B -:103F50001600002E2DD00F00326839002000FFF728 -:103F60008FFF327A39002000FFF766FF726939004F -:103F70002000FFF79EFFB26939002000FFF7A6FF7F -:103F8000F26939002000FFF7AEFF726839002000A7 -:103F9000FFF781FFF26839002000FFF7C6FF390004 -:103FA0002000FFF7AFFF326939002000FFF7B0FFB4 -:103FB00000E0034D2800F2BD0000CFBF00003040FC -:103FC00001005A000022030A8B420BD203098B42E4 -:103FD00019D243088B422ED2411A00D201465241D7 -:103FE00010467047FF2209023FD012068B4205D3CC -:103FF000121209028B4201D31212090203098B42E9 -:1040000019D300E0090AC3098B4201D3CB01C01ABE -:10401000524183098B4201D38B01C01A524143099B -:104020008B4201D34B01C01A524103098B4201D389 -:104030000B01C01A5241C3088B4201D3CB00C01AF6 -:10404000524183088B4201D38B00C01A524143086E -:104050008B4201D34B00C01A5241884200D3401A10 -:104060005241CFD201461046704708B502F04CFBD2 -:1040700008BD0000F8B501231A00002800D151E165 -:10408000002900D14EE1A84A12680C7AA74D1540CC -:10409000A4048022D20214402C430322CE6816408E -:1040A000A34D25403604C024A40234402C430D788F -:1040B0006E07760F9F4D25403606E024E404344019 -:1040C0002C438E789C4D2540B4078026F60534405D -:1040D0002C4328254D5D0126B4431D40254334243F -:1040E0000C5D0226B5436400022634402C430D7F4C -:1040F0000426B443AD000426354025434C7F0826F2 -:10410000B543E400082634402C4340254E5D1E4054 -:104110008A4D2540B4028026F60034402C434025C9 -:104120004D5DEDB26D081E002E40F6B2844D254067 -:1041300074028026B60034402C4370254E5D814DBC -:10414000254034028026760034402C4371254E5D94 -:1041500016407D4D25403603C024A40134402C4335 -:1041600004600C7A002C02D10023836006E00C7AF4 -:10417000012C02D14B69836000E083600B6A03610C -:104180004B6A4361CB6A83610B6BC3614B6903620A -:104190008B6943626D4B1C684423CB5CDBB2FF250B -:1041A000AC4323434C240C5DE4B2694D1D40240410 -:1041B000FF231B0423402B435C240C5DE4B21D024F -:1041C0002D0A23062B436C240C5DE4B2614D1D4087 -:1041D0002402FF231B0223402B4343645E4B1B68D6 -:1041E00064240C5DE4B25B4D1D402402FF231B02DE -:1041F00023402B4354240C5DE4B2FF25AB431C4306 -:104200008464564B1C684123CB5C13400325AC43AC -:10421000234360240C5D1440514E1E40A302C02570 -:104220002D011D4035434823CE5C16403023DB432F -:1042300030241D40370127402F4350254D5D154048 -:10424000484E3E402F02C025AD003D403543582624 -:104250008E5D1640C027BD43B701C0263E402E43A9 -:1042600068254D5D15400C27BE43AF000C253D4031 -:104270003543C5643C4D2D6807267227CF5D374016 -:1042800000970727BD432F00009D3D437327CF5D57 -:104290003E407027BD43370170263E402E434665A1 -:1042A00035254D5D8567314D2D680E7C1640032701 -:1042B000BD432E43CD7C1540C027BE43AF01C02572 -:1042C0003D4035434E7C16400C27BD43B7000C26BD -:1042D0003E402E438D7C2A403340120114401C4343 -:1042E0000465234A1268CB8894B21A0422438B884F -:1042F0009BB21B0A9BB2174C14401B02FF221202F6 -:104300001A4022430B78052B05D10979C9B2FF2346 -:104310009A43114304E04978FF239A43C9B21143F9 -:10432000016300221000F2BD70DB0010FFFFFBFFF5 -:10433000FFFFFCFFFFFFFFF8FFFFFFBFFFFBFFFFDB -:10434000FFFDFFFFFFFEFFFFFFCFFFFF74DB00104D -:10435000FFFF00FFFF00FFFF78DB00107CDB001099 -:10436000FFF3FFFFFFFCFFFF80DB001084DB00108A -:1043700088DB00100168802212060A430260704741 -:104380000168490049080160704740687047016151 -:1043900070470069704781607047006A704700008D -:1043A00030B4434351435D18010C0C00130C5C43C3 -:1043B0002D1980B2434392B251430024C91864417D -:1043C00024040B04090C09195043C018694130BC7E -:1043D0007047000000B5022801D301200FE00B0058 -:1043E000DBB2042B01DB012009E0BE4B8000181872 -:1043F000C9B2405C824201D3012000E0002000BD30 -:10440000F8B504001F00022C01D3012023E01500A1 -:104410000E002A003100C9B22000FFF7DBFF01289F -:1044200001D1012017E03000C0B2002816D1FF2FC3 -:1044300012D8AD4861034018A900401880214901F5 -:1044400040180168A94A0A403902FF231B020B40A9 -:10445000134303600020F2BD0120FCE7F6B2012EF9 -:1044600016D180204002874210D29F486103401835 -:10447000A9004018A0214901401801689C4A0A403F -:104480003902C94B0B4013430360E3E70120E2E725 -:104490000120E0E700B20012C0B27047F8B5050095 -:1044A0000F001600280000B2FFF7F4FF0400200000 -:1044B000C0B2022801D301202CE032003900C9B279 -:1044C0002000C0B2FFF786FF012801D1012021E0C2 -:1044D00085482100C9B2490341182A00D2B292008E -:1044E0008918C02212018A58B0491140FFB23B021C -:1044F000C02292001A400A43FF218A43F1B21143BD -:10450000E4B262038018EDB2AA008018C022120142 -:1045100081500020F2BD70B50400022C01D30120AF -:1045200028E015000E002A003100C9B22000FFF774 -:1045300051FF012801D101201CE06B486103415863 -:10454000802212060A43C02189041143FF2212046B -:104550000A43964B1340F6B23202C0218900114043 -:104560001943FF229143EAB20A43610342506103B7 -:104570004058002070BD70B50400022C01D301200A -:1045800028E015000E002A003100C9B22000FFF714 -:1045900021FF012801D101201CE05348610341584B -:1045A0008022D2050A43C02189041143FF2212044C -:1045B0000A437E4B1340F6B23202C02189001140FB -:1045C0001943FF229143EAB20A4361034250610357 -:1045D0004058002070BDF8B598B00BA8342102F007 -:1045E000A5F89A4803C801AA03C2083A03A8A54936 -:1045F000202200F0E9FAAA480078002801D0012022 -:104600006DE000252C0007E02800A64962008852D2 -:104610002800A5490855641C062C14D2A34814216F -:1046200061434118097A0BAA11720BAA1421614344 -:104630004118496814236343C058FFF784FC0028DD -:10464000E2D000204BE0684600F0B2F8002801D12B -:10465000002044E000980021962292000023FFF7FA -:104660009FFE934A002312184B4110001900914AF3 -:104670000023FFF7A2FB002800D1012003AFB8817F -:104680008D4E300002F0D0F801A9300002F068F839 -:10469000002801D0002022E02C0006E01420604316 -:1046A0002818C06802F0BEF9641C062C13D27F4D96 -:1046B000142060432818007C787103A914206043FB -:1046C0002818C06802F0B4F80028E7D0300002F0E3 -:1046D000ABF8002003E0012071490870012019B0F7 -:1046E000F0BD000098DA001000000440FF00FFFF5A -:1046F000FF0000FFF8B584B00E00C0B202900025A4 -:1047000028006946088004212A0003AC200001F03B -:10471000FDFF2C0062480078002806D0674F3878EB -:10472000002802D10298062801D3002039E0012098 -:1047300038705E480299142251434018C0680190B5 -:10474000019800F0A1F8019802F078F9019800F0C2 -:104750007FF800281FD003AA6946019802F074F977 -:10476000002818D103A8C078002814D06846008813 -:104770000005000D69460880684600884949029A8C -:10478000520088520124484802994454002E02D015 -:10479000684600883080019800F076F83D7020006F -:1047A000C0B205B0F0BD000000FFFF00FFFCFFFF3E -:1047B000F8B5070000200090FF262C363000FFF7E8 -:1047C00069FE0500002F04D0684602F04DFE002867 -:1047D00001D0002038E00098394940183949FFF7E6 -:1047E000F1FB0400002C02D03748844201D30020A2 -:1047F0002AE0042201212800FFF7BDFE002801D095 -:10480000002021E0042201213000FFF747FE0028AC -:1048100001D0002018E0631E042201212800FFF7C8 -:10482000EFFD002801D000200EE004220121280025 -:10483000FFF771FE002801D0002005E0009821005C -:10484000FFF7C0FB38600120F2BD000070DA0010F5 -:104850007CB505001D4C062100226E46300001F09B -:1048600055FF6946280002F0DBF968460078002809 -:1048700003D1641E002CF4D101E0012000E00020EF -:1048800076BD00008CD80010E0B511490CC908397C -:1048900069460CC10839694602F06CF907BD000091 -:1048A0003F1C0028301B0028481B002834D2001071 -:1048B000FFC99A3B00CA9A3B00109040401C002858 -:1048C0005F8DCB00608DCB0001000100A086010050 -:1048D00078DA001000000000000000000000000076 -:1048E000801C800803D0401C801EFCD100BF704794 -:1048F000EFF3108072B6704780F310887047403035 -:10490000016810220A4302607047403001680822A3 -:104910000A43026070470000F8B5012422004C23CE -:10492000CB5C052B03D24D23CB5C052B01D31000B0 -:10493000E2E0002800D1DEE0002900D1DBE06F4A90 -:1049400012684B7923406E4D15409B048022D202A1 -:1049500013402B4303228D7915406A4E1E402B04D1 -:10496000C025AD021D40354307230E7A1E40664F19 -:104970002F403606E025ED0435403D43CE79634FA8 -:104980002F40B5078026F60535403D430E7D0127B3 -:10499000BD4326402E4324254D5D0227BE436D00B6 -:1049A00002273D40354305600D79060030360096FC -:1049B000009E3668FF27BE43EDB23543009E35604A -:1049C0004D79012D0BD18C79002C02D1002484600B -:1049D00006E08C79012C03D10C68846000E08460CF -:1049E000CC6804610C694461CC6984610C6AC4615F -:1049F0000C680462464C25680C7EE4B2FF26B54381 -:104A00002C4330254D5DEEB2424D25403604FF2447 -:104A1000240434402C4340254D5DEDB22402240A89 -:104A20002E06264348240C5DE7B2FF2424023A4DAB -:104A30002E403F02274037434764384E36683827B8 -:104A4000CF5DFFB20097FF27BE43009F3743282664 -:104A50008E5DF6B23D40360234402C438464304CC7 -:104A600025688C7D14400326B5432C4325254E5DD7 -:104A700016402C4D2540B602C024240134402C435E -:104A80002C254D5D15403026B4432E013025354090 -:104A9000254334240C5D1440234E2E402502C024AF -:104AA000A4002C4034433C254D5D1540C026B44342 -:104AB000AE01C0253540254344240C5D22400C2422 -:104AC000A54394000C2222402A43C264174A14686A -:104AD0004C228A5C1A400725AC4322434D240C5DCE -:104AE00023407024A2431C017023234013434365D9 -:104AF000497D816700221000F2BD00005CDB0010E0 -:104B0000FFFFFBFFFFFFFCFFFFFFFFF8FFFFFFBF03 -:104B100060DB0010FFFF00FFFF00FFFF64DB001001 -:104B200068DB0010FFF3FFFFFFFCFFFF6CDB0010F2 -:104B30000168802212060A430260704778300168DB -:104B400001220A4302607047C16F0800C007C00F0E -:104B50007047010070310A68012313430B60006F36 -:104B60007047000030B5010000221000134B1B6895 -:104B7000002914D08C786407640F0725AB431C43CD -:104B80000B79002B01D00122FFE763005B08D207FD -:104B90001A430B4B0024095F89005A5000E0064875 -:104BA00030BD00B5074A1368002B03D0126800B26D -:104BB0008000115000BD00000100560058DB0010BD -:104BC000008020402412002870B4103A03D378C922 -:104BD000103A78C0FBD2530701D318C918C001D5C9 -:104BE00008C908C0D20704D30B880380891C801C25 -:104BF000002A01D50B78037070BC70478B0701D178 -:104C00008307E1D0124205D00B78491C0370401C89 -:104C1000521EF9D170470000F7B5AD4BAD4A15688B -:104C2000AD4A1668AD4A12680192AD4A1268009208 -:104C3000002422002200002800D11EE10A00002AE0 -:104C400000D11AE15168002901D1936805E051684B -:104C5000022901D1230000E0022311695769B942FA -:104C600001D3116900E05169092909D29D49294000 -:104C70002125555D002D15D080256D000D4313E0D5 -:104C8000112905D2974F2F408021C9013943EFE701 -:104C9000212905D2934F2F40802109023943E7E7AC -:104CA0008B48EBE0904D0D40D168491E0907090F74 -:104CB0000F27BD4329438D4D0D40802149042943D1 -:104CC0000160117F002901D0210000E001210125B0 -:104CD0000127BE43294031430E005168090929408C -:104CE0000227BE434900022739403143D67E1027B0 -:104CF000B943360110273E400E43517E2027BE4364 -:104D000049012027394031431668012E00D0250083 -:104D10004E007608E90731430425A9435D000426C7 -:104D200035400D4308218D43D900082319402943FC -:104D3000537F6D4D0D40190280235B0019402943BC -:104D4000957F80239B006A4E0E40690219403143D3 -:104D5000D67F684D0D40B1028026F60031402943D0 -:104D60002025565D644D2940F60280273F013E40D4 -:104D70000E4311798F07BF0F5C4931403F06C026B3 -:104D8000B6043E400E430662167E009F56493940E7 -:104D9000360280277F003E400E43977E54493140C3 -:104DA0007E021E400E431169491EC906C90E1F2707 -:104DB000BE433143C026B60081512421515CC9B2A3 -:104DC0000091C121890041180E68FF27BE43009F52 -:104DD00037430F60167E019F4349394036028027D2 -:104DE0007F003E400E435169491EC906C90E1F2768 -:104DF000BE4331438026B60081512C21515CC9B29B -:104E000000918121890041180E68FF27BE43009F51 -:104E100037430F60116B1B4E8151916A184E8151BF -:104E20003821515CF026360186190096009E3768BD -:104E30002F4E3E4049020B40334300990B6039210D -:104E4000515CF4221201821813681D40C9028023AC -:104E50001B011940294311600B4944500298002856 -:104E60000AD002980460029884610298C460029893 -:104E7000C46126480299086223001800FEBD0000A4 -:104E8000C80F0000880F0000C80E00001B49016019 -:104E9000C02189040162FF220832C02189004250EA -:104EA0000021C1239B00C15080239B00C25081225E -:104EB00092008150124A8150154A8150114A815006 -:104EC000114A8150134A8150134A815070470000A3 -:104ED0000140AA0040DB001044DB001048DB00105A -:104EE0004CDB0010FF3FFFFFFFFEFFFFFFFFFFFC5B -:104EF000FFFDFFFFFFFBFFFFFFF7FFFF0F000003BA -:104F0000C80E0000C80F0000880F0000EFCDAB00F6 -:104F1000880E0000080F0000480F0000F8B50400DC -:104F20000D00334F387800280ED02D4E18222D4911 -:104F3000300002F0E3FA0020F075CF2040002A494B -:104F40000860002002F03AFB2000290001223A709C -:104F500080225204002399420AD301D8904207D3F9 -:104F6000244A04000D0024A003C80019694102E08E -:104F70000200002000211D4B00241C60204D2A60EF -:104F8000214A146005221A601A68D203FCD51C60FD -:104F90000029DDD10028DBD13C70F1BD70B50500E2 -:104FA000184E306800280ED10D4C18220D492000F3 -:104FB00002F0A4FA0020E075E52040000A490860EC -:104FC000002002F0FBFA2C0030681049FEF7FAFFCF -:104FD000002122000023FFF7E3F9FFF79FFF70BDD8 -:104FE000C41A002894D50010881B002810E000E0A7 -:104FF000461C0028FFFFFF00010000FFFFFFFFFF2E -:1050000014E000E0201C002818E000E040420F00FF -:1050100043490A680860704742490A680860704757 -:1050200041490A680860704740490A6801239A4369 -:10503000C0B20300DB07DB0F13430B6070473B4933 -:105040000A6810239A43C0B200011023184010438D -:105050000860704735490A68354B1340C0B20002FA -:1050600080225200104018430860704731480168A0 -:1050700001220A430260704710B5FFF739FC0400B3 -:1050800000F024F80020FFF7C3FFFA20C001FFF76B -:10509000C3FF0020FFF7C4FF0020FFF7C5FF01207A -:1050A000FFF7CDFF0020FFF7D5FF00F004F8200048 -:1050B000FFF722FC10BD80B5FFF71AFC1E490A68F5 -:1050C000032313430B60FFF717FC01BD80B5FFF707 -:1050D0000FFC19490A6803239A43012313430B6009 -:1050E0000A6803239A43022313430B60FFF704FC6F -:1050F00001BD80B5FFF7EAFF104801688022120663 -:105100000A430260FFF7D7FF01BD80B5FFF7DEFF5E -:105110000A480168490049080160FFF7CCFF01BD5A -:1051200004C0264008C026400CC0264010C02640BF -:10513000FFFEFFFF44C0264040C0264000C026407E -:1051400080B5FFF7C3FFFFF791FFFFF7B4FF01BD85 -:1051500070B5302100242200914D280001F0D6FACC -:10516000E02122008F4D280001F0D0FA0426310002 -:1051700022008D4D280001F0C9FA2200A34D310014 -:10518000280001F0C3FA2000A1490870A14804607A -:1051900002F048FC03F0A0F803F04CFA002809D014 -:1051A00003F04BFA002805D003F01AF9002801D1CA -:1051B00003F08AF903F002FD002804D1062003F071 -:1051C000ADFF002012E0FDF7C1FCA1490860A14934 -:1051D0000860A1490860A14908600120A049087041 -:1051E0000F20A0490870AF490870012070BD38B584 -:1051F00084B09D480068002802D0022003F08EFF92 -:1052000003F09FFF03F0B2FF002818D00020010038 -:1052100008E00200624B0C00E4B20C256C431B1941 -:105220009A72491C0A00D2B2042AF2D39E4908702D -:1052300001208B49087002E0684600F07AFB68465E -:1052400003F004FD002808D00098C021890088429E -:10525000F2D0684603F0E0FFF1E700F0A5FD02F0B0 -:10526000DFFC00F000FE00F043FE01F04AF905B05B -:1052700030BDF8B502E0684600F05BFB684603F01D -:10528000E5FC002808D00098C02189008842F2D0AF -:10529000684603F0C1FFF1E773480068002802D0B8 -:1052A000022003F03BFF03F04CFF00F0DCFD01F0B7 -:1052B00028F905B000BDF8B50700380080B2FDF749 -:1052C00017F9FCF7C2FF0026340018E02000C0B236 -:1052D00000F059F80500390089B22800C0B2FDF786 -:1052E00021F8390089B22800C0B202F0A5FB2C4891 -:1052F0002100C9B20C22514340188672641C200060 -:10530000C0B20428E2D3684806700F2055490870DF -:1053100064490870012052490870F1BD00B5401A77 -:10532000002801D4012000E00020C0B200BD00B57B -:10533000401A00B2012801DB012000E00020C0B2C9 -:1053400000BD00B500281BD0002919D002780B78C9 -:105350009A4215D142784B789A4211D182788B7853 -:105360009A420DD182888B889A4209D1C288CB8813 -:105370009A4205D100890989884201D1012000E0C3 -:105380000020C0B200BD00B50100C9B2042903D29B -:105390004649C0B2085C00E00420C0B200BD000075 -:1053A000581A002828180028001C002810B50C00E6 -:1053B0000100C9B2042901D2002C01D1002006E06D -:1053C000C0B2FFF7E0FF2100C0B202F01FFF10BD26 -:1053D00000B5002802D04178042901D3002013E051 -:1053E00001780A2902D001780B2904D10189FA2019 -:1053F0008000484308E00189002901D0008903E0CA -:10540000A64940788000085800BD0000081C00280C -:10541000641C0028041C002800B5002802D0417834 -:10542000042901D3002012E00178032903D09C490C -:105430004078085C0BE00089401D0A21FEF7C2FDA0 -:10544000322800D23220602800D35F20C0B200BDD5 -:105450000C1C0028101C0028141C0028181C0028F4 -:1054600003130028041300287C1B002800B58D4B73 -:1054700018708D4B1970002A05D011788B4B19705C -:1054800091888B4A1180C0B2002803D0012089493D -:10549000087002E00020874908700120AA490870BE -:1054A00000BD000005130028601C00288CDB0010E4 -:1054B000F8B50500002D05D00C00002C02D0160018 -:1054C000002E01D1002039E00A21002227003800F7 -:1054D00001F01CF9686820706868000A03210A005E -:1054E000024062700200D2B292080A40A2706A685A -:1054F000120CA280AA68E280AA68120C22812A6893 -:10550000C0239B009A4202D12A7B082A03D00120A3 -:105510003070002012E0F0220240102A03D0022056 -:10552000307000200AE02078401E022802D9C01FF7 -:10553000052801D8012001E031700020F2BD00B53E -:10554000002801D0002901D100204AE04278042A35 -:1055500003D304200870002043E00278092A06D112 -:105560004278002A03D004200870002039E0027835 -:10557000032A09D18278012A0DD08278022A0AD022 -:105580000520087000202CE08278002A03D0052036 -:105590000870002025E00278521E0FD0521E21D044 -:1055A000521E33D0521F012A40D9921E49D0521E9A -:1055B00055D0521E3AD0521E5FD06AE0C288784B56 -:1055C0009A4207D20289002A08D000896438754AB5 -:1055D000904203D306200870002002E000200870EB -:1055E000012000BDC28812B26F4BD2186F4B9A4295 -:1055F00007D20289002A08D000896438694A90429B -:1056000003D3062008700020EBE7E7E7C288643A7E -:10561000644B9A4205D20089654A8018654A9042D7 -:1056200003D3062008700020DBE7D7E7C288002AF2 -:1056300002D10089002803D0062008700020D0E79E -:10564000CCE7C288AA4B9A4204D100890A38A94AF9 -:10565000904203D3062008700020C2E7BEE7C2884C -:10566000A54B9A4204D100890A38A24A904203D33A -:10567000062008700020B4E7B0E7C2889F4B9A422A -:1056800002D10089002803D0062008700020A8E776 -:10569000A4E7032008700020A3E7000044DA00100C -:1056A00090DB00105D1C00285E1C00285F1C002899 -:1056B0003A1C0028631C002800B50100C9B201296A -:1056C00002D0C0B2022801D1012000E00020C0B207 -:1056D00000BD10B504002000C0B2FFF7EDFF0028A8 -:1056E0000AD12000C0B2032806D02000C0B20A2888 -:1056F00002D0E4B20B2C01D1012000E00020C0B2A6 -:1057000010BD80B58EB00100C9B2042908D27C4911 -:105710000200D2B20C235A438918897A002901D099 -:1057200001200EE06946C0B2FFF740FE002806D017 -:1057300068463221405C002801D0012000E00020B2 -:10574000C0B20FB000BD00000313002800B56D48C3 -:105750000078002801D0012000E00020C0B200BD88 -:1057600038B58EB067480478002510E069462800F7 -:10577000C0B2FFF71BFE002808D068463221405C0B -:10578000002803D020000124AC4004436D1C2800F5 -:10579000C0B20428EAD32000C0B20FB030BD000070 -:1057A00011270000FDE9000010270000214E000035 -:1057B000D4FEFFFFBD02000038B58EB000252C00DE -:1057C00018E069462800C0B2FFF7F0FD002810D0AD -:1057D00068464178042908D04178072905D04178E6 -:1057E000082902D04078092803D120000124AC40C8 -:1057F00004436D1C2800C0B20428E2D3FCF789FDE5 -:10580000002802D020000F2404432000C0B20FB0B3 -:1058100030BD38B58EB000252C0010E06946280058 -:10582000C0B2FFF7C3FD002808D068463421405CB1 -:10583000002803D020000124AC4004436D1C280044 -:10584000C0B20428EAD32000C0B20FB030BD80B58A -:10585000FFF786FF0100002005E00A00D207D20F03 -:105860008018C9B249080A00D2B2002AF5D1C0B2E4 -:1058700002BD10B58EB0002418E069462000C0B209 -:10588000FFF794FD002810D068463221415C0029C2 -:105890000BD00178052926D00178062923D001787C -:1058A000072920D0007808281DD0641C2000C0B231 -:1058B00004281AD212482100C9B20C2251434118BF -:1058C000897A0029D9D02100C9B20C225143415C08 -:1058D0000A2906D02100C9B20C225143405C0B2892 -:1058E000CBD1012002E0012000E000200EB010BD6D -:1058F0005AA500004F020000524B00003CC30000BC -:10590000581A0028601C002810B5002400E0641C10 -:105910002000C0B204280AD22000C0B2FFF733FD35 -:10592000C0B2FCF7C2FF0028F1D0012000E0002047 -:1059300010BD70B592B0012421006A461170AA49C9 -:105940000A68521C0A606A4601A9FFF7B1FD0028E7 -:1059500005D0694601A8FFF7F2FD00280AD1A34847 -:105960000168491C016001AA684601780220FFF71E -:105970007DFD28E101AD2878092836D0BC480178A2 -:1059800000291ED0A988BB4A1288914219D1BA4871 -:10599000007800280BD0B94901A8FFF7D2FC0028F5 -:1059A00005D001AA00210320FFF760FD08E08F4821 -:1059B0000168491C016001AA08210220FFF756FD79 -:1059C00001E10078002810D0AA480188A888FFF7D4 -:1059D000AEFC002809D185480168491C016001AA74 -:1059E00008210220FFF742FDEDE02000A0490870E9 -:1059F0002000A1490870A8889E4908809F4801A9F5 -:105A00004CC94CC00C390C38287809280CD1A8880E -:105A1000FFF751FC01AA00210420FFF727FDAA4847 -:105A20000168491C0160CEE0287808280DD1A988BA -:105A3000687800F0DDF801AA00210120FFF716FDCB -:105A4000A1480168491C0160BDE028780C2813D1E9 -:105A5000687884409D480178214301709C48017812 -:105A60000C43047001AA00210120FFF7FFFC9648B7 -:105A70000168491C0160A6E028780D283BD16878B0 -:105A8000FFF73FFE002809D0C6480168491C0160A5 -:105A900001AA09210220FFF7E9FC94E003F066FB6C -:105AA00000280BD1FCF735FC002807D16878FFF7F8 -:105AB0006AFCC0B202F081FB002805D101AA0B21CB -:105AC0000220FFF7D3FC7EE0804801786A7823004B -:105AD00093400B4303707E4801786A7894400C43EE -:105AE000047001AA00210120FFF7C0FC764801687C -:105AF000491C016067E003F039FB002805D001AACA -:105B00000B210220FFF7B2FC5DE02878FFF7D4FDFF -:105B100000281DD004A96878FFF748FC002805D1AB -:105B200001AA0E210220FFF7A1FC4CE004A83421B9 -:105B3000405C00280CD102F083FD002801D00D212B -:105B400000E0072101AAC9B20220FFF78FFC3AE06A -:105B5000FFF78FFE002809D092480168491C0160B8 -:105B600001AA09210220FFF781FC2CE028780A28ED -:105B700002D028780B2811D101F089FF002803D129 -:105B8000FFF7E4FD002812D086480168491C016037 -:105B900001AA09210220FFF769FC14E06878FFF7E9 -:105BA000B0FD002811D0A988687800F021F801A87C -:105BB00000F066F801AA00210120FFF757FC4248D7 -:105BC0000168491C016012B070BDFFF740FE042857 -:105BD000EDD374480168491C016001AA0A21022022 -:105BE000FFF744FCEFE70000E81B0028EC1B00284F -:105BF000F8B504002000C0B2042837D20F002000FE -:105C0000C0B2FFF7C0FB06000125390089B22800A9 -:105C1000B040C0B2FCF71AFCFCF717FB390089B2A0 -:105C20003000C0B2FCF77EFBBFB239003000C0B21A -:105C300001F002FF0020AC492200D2B20C235A43EB -:105C400089188872A9490A782800A04082430A70FE -:105C50001E4801782A00A2400A4302701C480178BD -:105C60002A00A2400A430270BC480570F1BD000042 -:105C7000611C00283C1C0028621C00283C1B0028DA -:105C800038B501004C78984D2000C0B20C2250432A -:105C900028180A22FEF7B2FF012001002200D2B22A -:105CA0000C235A43AA18917290490A780300A34022 -:105CB00013430B7005490A780300A34013430B708C -:105CC000A649087031BD0000F41B00280413002809 -:105CD00005130028F8B504006078FFF754FB0500B1 -:105CE0002000FFF775FB07002000FFF795FB06007B -:105CF0002078FFF7EEFC002815D003F007FA02F039 -:105D0000EAFB002804D1032003F008FA002047E052 -:105D100003F0FCF9012092490870FCF717FF914944 -:105D20004018914908602078012808D0022811D035 -:105D300003281BD00A2824D00B2829D02FE0A088C4 -:105D400000903300DBB23A00E1882800C0B202F0D4 -:105D5000CBF825E0A08800903300DBB23A00E18860 -:105D600009B22800C0B202F0FDF819E0A088009046 -:105D70003300DBB2E288A1782800C0B202F01AF941 -:105D80000EE0A28839002800C0B202F07BF907E0DB -:105D9000A28839002800C0B202F0C4F900E0002057 -:105DA000F2BD0000F01B0028F8B584B0FCF7CEFE71 -:105DB000009003F0DBF9002806D16C4801680098D8 -:105DC000FFF7ACFA002800D14BE0002000E0401CB7 -:105DD0000100C9B2042944D20326654F39780D1851 -:105DE0003540414C2900C9B20C2251436118897ACF -:105DF0000029ECD001A82900C9B20C225143611836 -:105E00000A22FEF7FBFE00202900C9B20C225143F2 -:105E100061188872012435490A782000A84082431D -:105E20000A702800401C06403E70009864304F49BC -:105E3000086001A8FFF74EFF002804D101AA0E2137 -:105E40000220FFF713FB4B4801782200AA400A43C7 -:105E50000270494801782200AA400A4302703F4874 -:105E6000047005B0F0BD38B58EB0002435E0694649 -:105E70002000C0B2FFF79AFA00282DD03F4D200035 -:105E8000C0B2285C00280AD03D482100C9B238229F -:105E900051434118684600F075F800281CD0384876 -:105EA0002100C9B238225143401869463822FEF712 -:105EB0008BFE012001002200D2B2A9542D490A789C -:105EC0000300A34013430B702B490A780300A3403F -:105ED00013430B7021490870641C2000C0B20428D1 -:105EE000C5D30FB030BD0000581A0028601C002830 -:105EF00038B51B4C207800282ED0FCF727FE050073 -:105F0000FFF724FC002807D101F0C1FD002803D1D0 -:105F1000FFF7FAFC002804D012482818124908603C -:105F20001AE0114801682800FFF7F8F9002813D09B -:105F300003F0ECF802F006FB002803D1032003F085 -:105F4000EDF809E003F0E2F8002020700120034999 -:105F500008700F200849087031BD000003130028A5 -:105F6000641C0028B80B0000041C00280C1C00282E -:105F7000651C00280413002805130028001C0028B5 -:105F80002818002800B502780B789A4227D1427869 -:105F90004B789A4223D182788B789A421FD1C2786B -:105FA000CB789A421BD142684B689A4217D1302273 -:105FB000825C3023CB5C9A4211D13222825C322344 -:105FC000CB5C9A420BD13122825C3123CB5C9A426A -:105FD00005D13422805C3422895C884201D00120C2 -:105FE00000E00020C0B200BD00B5007800280FD04E -:105FF000022811D00ED304280CD00FD306280FD0BE -:106000000ED308280CD00BD30A280DD00AD30DE0EC -:1060100000200CE001200AE0022008E0032006E056 -:10602000042004E0062002E0072000E0072000BD75 -:1060300000B5407800280ED0022810D00DD30428D7 -:1060400011D00ED3062812D00FD3082813D010D3A6 -:10605000092812D013E0002012E0012010E00220F5 -:106060000EE003200CE005200AE0042008E00620F2 -:1060700006E0072004E0092002E00B2000E00920F0 -:1060800000BD38B5FFF76CFB0400FFF795FB05007A -:1060900003F06CF8002808D003F072F8002801D152 -:1060A000032000E00420C0B214E0FFF7E2FB002868 -:1060B00001D005200EE0EDB2002D03D103F060F811 -:1060C000002801D0042005E0E4B2002C01D0022019 -:1060D00000E0012032BDFEB5FFF742FB69460871C2 -:1060E000FFF76AFB0400FFF794FB6946C870FFF7EF -:1060F000C0FB694688702000C0B2002807D103F0B9 -:106100003FF8002803D102F09BFA002801D00125B6 -:1061100000E000258D4807780F263740FFF7B1FFD4 -:10612000000138436946487089480078694608701C -:106130008848077803F01AF8002801D0102000E002 -:10614000002069468978002901D0402100E0002123 -:106150006A461279324010430143E8010843344053 -:106160006946C9780A012243BA4909780E4060237A -:106170003343694649786C46247824020C43B64977 -:10618000098809042143FFB2C0B200023843D2B2E9 -:1061900014040443DBB21A062243B04802F096FD11 -:1061A000FEBDF1B594B0AE4814A909780C22514354 -:1061B0004018019006A914A80078FFF7F7F8002806 -:1061C00001D10020C0E006A8FFF70EFF040006A8DA -:1061D000FFF72EFF070006A8C0786946087006A8DA -:1061E0003221405C002803D006A83021455C00E045 -:1061F0000025079869464880994814A909780C2217 -:1062000051434018807A002817D0019800780A2856 -:1062100003D0019800780B2801D1042400E0012468 -:10622000012701988078694608700198808869463E -:1062300048800198FFF7F0F8050006AE3220305C88 -:10624000002808D1864814A909780C225143401827 -:10625000807A002802D00420059001E000200590FB -:106260003420305C002802D00820049001E0002097 -:1062700004903420305C002805D00998002802D111 -:106280001020039001E0002003903420305C0028AF -:1062900009D00A98002806D009980A99884202D3A2 -:1062A0002020029001E0002002907078042802D1A2 -:1062B0004020019001E0002001907078072803D071 -:1062C000FCF727F8002801D0802000E00020694674 -:1062D00009788907890F059A0A4304991143039A9B -:1062E0000A4302991143019A0A4310433421715C15 -:1062F000002907D00D995B4A914201D35A4A02E026 -:106300000D9A00E0594A14A90978E4B223071B0F3B -:10631000FFB23C01F02626401E4333020B43C0B2BD -:1063200000041843694649880906014368464088C5 -:1063300080B2000A80B292B213020343EDB22A0681 -:106340001A434B4802F0C2FC15B0F0BD5D1C00289A -:106350005E1C00285F1C0028F1B590B001A910A8B0 -:106360000078FFF723F8002801D1002070E080209A -:1063700040020499814203D33C496A46518002E0BD -:1063800004996A4651800599814203D3374869468A -:10639000088002E005986946088007986430C821A3 -:1063A000FDF710FE0400FF2C00D9FF2401A840785F -:1063B000042801D1012700E0002701A84078072820 -:1063C00003D0FBF7A6FF002801D0022500E000253E -:1063D00001A84078082801D1042600E0002601A881 -:1063E0004078092803D002F02BF9002801D00821B9 -:1063F00000E000213D432E4331430F2001AA937852 -:106400000340090119433123D25C1040A94A10AB63 -:106410001B78D25C1201024310A80078C9B20B02AB -:106420000343684640880104194368460088E4B283 -:1064300023040343D2B212061A439F4802F046FCDB -:10644000002801D1002003E010A8007800F012F825 -:1064500011B0F0BD6C1C00283A1C0028010300009C -:10646000581A00281127000010270000FFFF000025 -:106470000203000078B585B004002000C0B20428F3 -:1064800009D22000C0B2FEF77EFF6946C0B2FCF719 -:1064900073FB002801D0002031E0684641780029D4 -:1064A00001D0012100E000218278002A01D00222DF -:1064B00000E00022C378002B01D0042300E0002379 -:1064C0000579002D01D0082600E000264579002D31 -:1064D00001D0102500E000250A4313431E43354335 -:1064E000E4B2EDB22A022243C188090411430389B0 -:1064F000808902041A43C120800002F0E7FB06B045 -:1065000070BDF8B5FCF722FB04006C4D2968200033 -:10651000FEF704FF002805D001206949087020001B -:106520006430286067480078002814D16648016804 -:106530002000FEF7F3FE00280DD0644A644800787E -:106540001070012063490B781278050095401D43B7 -:106550000D705C49087060480078002814D15F48CD -:1065600001682000FEF7DAFE00280DD05C4A5D4885 -:10657000007810705C4901200B7812780500954076 -:106580001D430D70544908704D4D287800281ED0C9 -:10659000FFF7A1FD002815D00020287053490A7884 -:1065A000521C1207120F0A7051490A78002A04D0AF -:1065B000504A1070504A1070087050480168491CC9 -:1065C000016003E04E480168491C016071E000254C -:1065D00000E06D1C2800C0B204282CD20127AF4077 -:1065E0003C4E30783842F4D02800C0B2FFF7D9FDD5 -:1065F00000281BD03078B843307032480178002929 -:106600000FD032490978EDB28D420AD130490A786B -:10661000521C9207920F0A700021017019342A4807 -:10662000046036480168491C016003E03448016891 -:10663000491C01603DE0002500E06D1C2800C0B24F -:10664000042836D20127AF40274E30783842F4D0A4 -:106650002800C0B2FFF780FE002825D03078B8436C -:10666000307014482900C9B2415C491C0907090F60 -:106670002A00D2B281541848017800290FD0184955 -:106680000978EDB28D420AD116490A78521C920758 -:10669000920F0A70002101701934104804601748E5 -:1066A0000168491C016003E015480168491C01604C -:1066B000FFE7F1BD081C002803030000101C0028A0 -:1066C000031300286A1C0028141C0028681C0028DA -:1066D000661C0028041300286B1C0028181C0028C6 -:1066E000691C0028671C0028051300286C1C002862 -:1066F000631C00285D1C00285E1C0028F81B002875 -:10670000FC1B002870470000704700001206130AA7 -:106710001A43130C1A4300BF094205D0830707D060 -:106720000270401C491EF9D1704700000022FFE7AB -:106730001300103906D330B41400150010393CC0D2 -:10674000FCD230BC490700D30CC000D504C089007E -:1067500002D30280801C002900D50270704700001F -:10676000F8B5020000231800A94C2468002959D06C -:1067700000920A781207120F009D10352E680F271D -:10678000BE4332432A604A78FF25AC43D2B222434B -:106790008C78002C01D0012400E01C009D4D154098 -:1067A00024028022520014402C430122CE7816404D -:1067B000994D254074028026B60034402C430D7953 -:1067C000002D01D0160000E01E00944D2540B402BB -:1067D0008026F60034402C434D79002D01D0160060 -:1067E00000E01E008E4D254074078026B60534401B -:1067F0002C438D79002D01D0160000E01E00A14D24 -:106800002540B4078026F60534402C43C979002979 -:1068100001D01300FFE762005208D9071143009A24 -:10682000116000E09848F2BD0021016001617047ED -:10683000F0B585B00C000025019594490E68944987 -:106840000968049193490968039193490F68934932 -:1068500009680291002C00D1D4E00090009800F06B -:10686000E7F802998020C000084380218900014395 -:106870008020400008430222024301210A430420F1 -:106880001043009A106120784007400F072296437A -:10689000304362785207520F7023984312017026DA -:1068A000164006430322A07810407D4B3340060279 -:1068B000C020800030401843E378002B01D00B004B -:1068C00000E02B00774E0640D80280231B011840C1 -:1068D00030432379002B01D00B0000E02B00460051 -:1068E0007608D8073043009B186060798006800ED8 -:1068F000049B3F26B3431843A3791340C026B043FB -:106900009B01C0261E400643E07943075B0F6648A3 -:1069100030401E02E023DB0033400343207A00288E -:1069200001D00D00FFE75F4E1E40E80280231B01EF -:1069300018403043657A1540874B03402D03C02033 -:10694000800128401843A57A1540844B0340AD03CD -:10695000C020000228401843A3891D052D0D804B3F -:1069600003402D047F4828401843A37B0B4045007B -:106970006D08D8072843009B5860E07B4007400F14 -:10698000039B0725AB431843237C0B404025A843BA -:106990009B0140252B400343607C014080208343C2 -:1069A000C801802108401843A17C6F4B03400902B5 -:1069B000FF20000208401843E17CC906C90E6B4B5A -:1069C00003400904F820400308401843217D0A4091 -:1069D000674901409205C020000410400843009917 -:1069E0008860E08A390C090480B20843218B82B2A6 -:1069F000080410430099C86021001A31009800F083 -:106A000055F801E020480190019805B0F0BD000064 -:106A1000B0DA0010FFFEFFFFFFFDFFFFFFFBFFFFEF -:106A2000FFFFFFDF3830016801220A430260704730 -:106A30003830016801229143016070473C300168A1 -:106A400001220A430260704710B5030000200029AC -:106A500016D0002A14D05B6A1C000C80190F0C00A1 -:106A6000E407E40F1470990F0C00E407E40F94702E -:106A7000590F0C00E407E40F5470D90FD17000E0F7 -:106A8000014810BDFFFFFFBF0100DA00B4DA0010BB -:106A9000B8DA0010BCDA0010C0DA0010C4DA001056 -:106AA000FFFCFFFFFFF7FFFFFFF8FFFFF0B50A0055 -:106AB000002319006F4C2468002A49D05579002D15 -:106AC00001D0012600E01E006B4D2540B402802657 -:106AD000F60034402C431579002D01D0012600E04A -:106AE0001E00664D254074028026B60034402C43BB -:106AF000D578002D01D0012600E01E00604D254014 -:106B000034028026760034402C435578002D01D085 -:106B1000012500E01D000226B4436D000226354029 -:106B200025431478002C01D0012400E01C0001262C -:106B30000127BD4334402C439278002A00D11E0027 -:106B400004229443B20004231A402243826100E0ED -:106B500047490800F0BD0000FFCFFFFFFF3FFFFFE8 -:106B6000FFFF00F00000FF0FFF00FFFFFFFFE0FF4F -:106B7000FFFF3FFFF0B50A0000231900414C2468D5 -:106B8000002A49D05579002D01D0012600E01E00D1 -:106B9000394D2540B4028026F60034402C43157947 -:106BA000002D01D0012600E01E00344D2540740266 -:106BB0008026B60034402C43D578002D01D0012624 -:106BC00000E01E002E4D2540340280267600344021 -:106BD0002C435578002D01D0012500E01D00022630 -:106BE000B4436D000226354025431478002C01D0B3 -:106BF000012400E01C0001260127BD4334402C4342 -:106C00009278002A00D11E0004229443B20004238B -:106C10001A402243026100E015490800F0BD00005F -:106C200010B50200002000291FD01269930A1C0031 -:106C3000E407E40F4C71530A1C00E407E40F0C71E5 -:106C4000130A1C00E407E40FCC7053081C00E4078F -:106C5000E40F4C7013001C00E407E40F0C70920862 -:106C60001300DB07DB0F8B7000E0014810BD000054 -:106C70000100DA00C8DA0010FFFBFFFFFFFDFFFF95 -:106C8000FFFEFFFFCCDA001000B5012027490A689B -:106C900052080240002A01D0022001E009680840A1 -:106CA00000BD274801680800C007C00F704700B545 -:106CB000C21E022A01D3012002E0C01E086000208B -:106CC00000BD1CB5FF246946FFF7F1FFC0B20028E4 -:106CD00002D02000C0B207E03C480099890041582A -:106CE0000800C007C00FC0B216BD00B5002801D013 -:106CF000032801D3012002E0401E0860002000BDEF -:106D00001CB5FF246946FFF7F0FFC0B2002802D08F -:106D10002000C0B208E03448009909014018C16859 -:106D20000800C007C00FC0B216BD000024152640E1 -:106D30002E48006881080800C007C00F7047000097 -:106D40004015264038B504002000C0B208280DD3F5 -:106D5000274D18222749280000F0D0FB0020E875B5 -:106D6000254826490860002000F028FC244821001E -:106D7000C9B2890041580A00D205D20F002A05D0B5 -:106D8000E4B2A10040580007000F00E0FF2032BD30 -:106D900038B505002800C0B208280ED3144C1822BC -:106DA0001449200000F0AAFB0020E07589200001B2 -:106DB00012490860002000F001FC1148EDB2A90062 -:106DC000405800098007800F32BD00004016264061 -:106DD0000F480068000AC0B270470E480068000AF9 -:106DE000C0B2704700000000001926401000274084 -:106DF000C41A0028DCD400105B080000881B00289F -:106E00004012264004480068000AC0B270470000E3 -:106E1000101020400C1020400810204038B504000D -:106E2000072C0ED3124D18221249280000F066FBE1 -:106E30000020E875CE2040000F490860002000F0D7 -:106E4000BDFB0A48A10040584007400F010009B2AD -:106E5000042907D10448A1004058C106C90E80206A -:106E60004000084300B232BD000126400012264017 -:106E7000C41A002838D50010881B00281E4909684C -:106E80008A03920B0260090E0A00D207D20FC27168 -:106E9000174909680A00D204D20C82800A00120C39 -:106EA000D2B20281090CC9B24181264909680F2278 -:106EB0000B00134003730B091A4042730A0AD204F1 -:106EC000D20CC281090F8907890F01740949096829 -:106ED0000A0A5207520F82710A00120CD205D20D13 -:106EE0004282890F0A00D207D20F02757047000054 -:106EF000341526403C152640301526401CB50C00A4 -:106F00006946FFF7D4FE0100C9B2002901D0C0B222 -:106F100017E00D480099890040584106490E21604C -:106F20001F21020A0A406260020C1140A160010F99 -:106F30008907890F6173C00E0100C907C90F21734A -:106F4000002016BD38152640001626401CB50C0042 -:106F50006946FFF7CAFE0100C9B2002901D0C0B2DC -:106F600033E01A48009909014158CAB222601F2231 -:106F70000B0A134063600B0C1A40A260090F8907CB -:106F8000890F21730099090141184A68D10F617373 -:106F90000721130F0B40002B01D0012300E0002339 -:106FA000A3731202120A2261009A120180188068EB -:106FB000C20F2275020E1300DB07DB0F63750200A0 -:106FC000A275000C0140E175002016BD0019264095 -:106FD00080B5010086481822FDF7F6FD012085499D -:106FE0000870002002BD000000B583490968C90F80 -:106FF000002907D07F490978002907D100210160C5 -:10700000032000BD002101600320FAE778490968E8 -:1070100001600020F5E7000010B50400FFF734FE22 -:10702000002803D10020206003200BE07148007885 -:10703000002804D06E4880682060002002E0002014 -:107040002060032010BD00B56A490978002904D0EA -:10705000674949680160002002E0002101600320C7 -:1070600000BD000000B565490968C90F002907D0B7 -:1070700060490978002907D100210160032000BD83 -:10708000002101600320FAE75949C9680160002026 -:10709000F5E7000000B55A490968C90F002907D073 -:1070A00054490978002907D100210160032000BD5F -:1070B000002101600320FAE74D49096901600020C1 -:1070C000F5E7000010B50400FFF732FE002803D1F9 -:1070D0000020206003200BE046480078002804D000 -:1070E000434840692060002002E000202060032027 -:1070F00010BD000010B50C00C0B2FFF78FFE0028D5 -:107100000CD0401E0ED0401E10D087214900401ADE -:1071100010D0401E12D0C01E14D017E02000FFF780 -:1071200063FF16E02000FFF78EFF12E02000FFF75C -:1071300073FF0EE02000FFF795FF0AE02000FFF745 -:10714000C1FF06E02000FFF7A5FF02E0002020605D -:10715000032010BD80B501000020FFF7CBFF02BD6A -:1071600080B50322D2B2824203D2002008600120FF -:1071700003E0401CC0B2FFF7BDFF02BD30B587B0D1 -:1071800004006846FFF7E6FF0100C9B2002903D0FA -:1071900000212160C0B228E001A8FFF76FFE01AD19 -:1071A000287C022803D10098206000201DE07B4845 -:1071B0000068C00F002808D0FFF773FDC0B2002898 -:1071C00007D10020206003200FE0009820600020FD -:1071D0000BE0009801994843A988FCF7F3FEE97990 -:1071E000491CFCF7EFFE2060002007B030BD000016 -:1071F000AC1A0028451C0028181526400815264002 -:107200000C152640F0B58BB004000D006946200037 -:10721000C0B2FFF7A5FF0100C9B2002903D00021C9 -:107220002960C0B2B7E02000C0B2022848D307A945 -:107230002000C0B2401CFFF761FEC0B200280DD094 -:10724000824E18228249300000F058F90020F07573 -:10725000804881490860002000F0B0F97F48210093 -:10726000C9B28900401808380068C00F002807D04C -:1072700007A8407B022807D10098286000208AE0F8 -:1072800000982860002086E0E4B2641C2000FFF72C -:1072900018FD0100C9B2002902D0C0B2FF2803D1F5 -:1072A00000202860032076E0009807994843089959 -:1072B000FCF788FE0999FCF785FE286000206AE04B -:1072C00001A92000C0B2401CFFF740FEC0B2002858 -:1072D0000DD05E4E18225E49300000F00FF90020FC -:1072E000F0755F485C490860002000F067F95D4870 -:1072F0002100C9B209014058C00F002807D001AED3 -:10730000307B022807D100982860002043E00098D5 -:10731000286000203FE0E4B2641C2000FFF7F0FC8E -:107320000100C9B2002902D0C0B2FF2803D1002059 -:10733000286003202FE0707B012821D100980021D4 -:10734000019E00273F06320A17433606059A00239E -:1073500092197B41FDF724F806000F0002980021E6 -:10736000039A0023FDF71CF802000B0030003900DF -:10737000FCF723FD000E0A021043090E286009E005 -:107380000098019948430299FCF71CFE0399FCF709 -:1073900019FE286000200BB0F0BD0000301526401B -:1073A00010B50323421E0400E4B2002C03D10800F0 -:1073B000FFF7E4FE0CE01400DBB2E4B2A34204D316 -:1073C0001000C0B2FFF71EFF02E0C0B2FFF792FE4E -:1073D00010BD38B504000D002000C0B2FFF7B2FCAC -:1073E0000100C9B2FF2904D12800FFF7FDFDC0B29A -:1073F0001BE06946C0B2FFF7D3FF0100C9B2002904 -:1074000003D000212960C0B20FE02000C0B2FFF716 -:10741000BFFCC0B2002805D002280BD006D3032839 -:107420000CD00FE000982860002032BD0098400882 -:107430002860F9E7009880082860F5E70098C00800 -:107440002860F1E7002028600320EEE7C41A002836 -:1074500038D5001063090000881B0028001626405C -:107460007F090000001926401CB504006946002071 -:10747000FFF7AFFF0100C9B2002903D0002121604E -:10748000C0B209E0FFF7A9FC01000098C9B2491C8D -:10749000FCF798FD2060002016BD1CB5040069466D -:1074A0000020FFF796FF0100C9B2002903D0002198 -:1074B0002160C0B208E0FFF78BFC01000098491C76 -:1074C000FCF780FD2060002016BD1CB50400684656 -:1074D000FFF7E3FF0100C9B2002901D0C0B208E004 -:1074E000FFF790FC01000098491CFCF76BFD206041 -:1074F000002016BD80B5FFF7E8FF02BD71B58B0710 -:1075000009D0521E28D30B780370401C1B421FD099 -:10751000491C8B07F5D1121F3ED3274CE50140C90A -:10752000331BB3432B4209D1830716D140C0121F2E -:1075300032D340C9331BB3432B42F7D0121DFF2374 -:107540001E4205D00670401C360A521E1E42F9D15A -:1075500011000022FFF7E0F871BDDB4216D0401E9B -:107560004670360A4680360C0671001D121F06D37F -:1075700040C9331BB3432B42F2D0401CDEE7401C12 -:107580000AE040C9331BB3432B42D7D10680360CE7 -:107590004680001D121FF4D2121D0BD00B78037011 -:1075A000521E07D0401C491C1B42F7D10370401CDF -:1075B000521EFBD171BD00000101010100B501BEE9 -:1075C000FEE780B50C4A0D490B68934210D00A6063 -:1075D00002684A6042688A608268CA60C2680A615A -:1075E00002694A6142698A618269CA61C069086246 -:1075F00002F06EF901BD0000F3F2F1F0881A0028E4 -:107600007047704700B5C0B2042801D2012000E0E5 -:107610000020C0B200BD00B50100C9B2002901D1EF -:107620007C4813E00100C9B2012902D1AF2040011A -:107630000CE00100C9B2022901D1774806E0C0B2CE -:10764000032802D1E120400100E0002000BD00B588 -:107650000100C9B2002901D15A2011E00100C9B2CC -:10766000012901D15A200BE00100C9B2022901D140 -:107670005A2005E0C0B2032801D15A2000E00020C2 -:1076800000BD00B5401A002801D4012000E0002010 -:10769000C0B200BD00B5884201D3401A00E0081A0C -:1076A00000BD10B500280FD00C00002C0CD0617864 -:1076B000002909D02169002906D0A168002903D03A -:1076C00021698268914201D2002019E0806800217E -:1076D000A2680023FCF764FE02000B00206940084A -:1076E00000218018594122690023FCF766FB61687C -:1076F000FFF7D0FF032801D2012000E00020C0B234 -:1077000010BD00B5C0B232382E2801D2012000E0F1 -:107710000020C0B200BD00B50178022905D0017873 -:10772000012904D14078022801D1012000E0002085 -:10773000C0B200BD00B50178032905D00178012948 -:1077400004D14078032801D1012000E00020C0B21C -:1077500000BD38B50C00B7490200D2B234235A43F9 -:107760008D18C0B2FAF715FF0A202870AC700020FF -:107770003021685431BDAF49C0B23422504308189B -:10778000092101700221817000213022815470474B -:10779000A849C0B2342250430818002101700322C6 -:1077A000827030228154704770B505000C002800AB -:1077B000C0B2FFF727FF002807D0FAF7AAFD00287C -:1077C00003D180204002844201D3002020E0280021 -:1077D000C0B2FAF7DEFE002807D1210089B22800E6 -:1077E000C0B2FAF79FFD002801D0002010E09148B8 -:1077F000EDB234214D434519342100222E003000D2 -:10780000FEF784FF6C600120A870302168540120CD -:1078100070BD0000FC530000901A0000F1B59CB050 -:107820000C0017001D001CA80078FFF7EBFE0028D5 -:107830001AD026A80078022803D026A800780328AA -:1078400012D101941CA80078FFF7E5FE0199884247 -:107850000AD304A91CA80078FBF714FA002803D166 -:1078600004A84078002801D10020D9E0714E1CA85E -:107870000078342148433018039003982E21405C4F -:10788000694648706846077024A80078002807D128 -:1078900068460078FFF735FF002801D10020BFE0DF -:1078A00007990198FFF7F6FE07000295239D259C96 -:1078B00024A8007800281AD00298002801D0002FB0 -:1078C00015D1002F11D1E4B2002C08D129001CA839 -:1078D0000078FFF769FF002801D10020A0E01CA874 -:1078E0000078FFF748FF01209AE0002098E00EA8FA -:1078F00003993422FDF768F92000C0B2002808D1AE -:1079000029001CA80078FFF74FFF002801D10020B4 -:1079100086E01CA80078342148433518E4B2002CD6 -:107920000CD028000EA93422FDF74EF901200100E9 -:10793000A97001003022A95469464870229C24A8ED -:107940000078002828D0002C01D0200013E0380057 -:107950000021FA2292000023FCF722FD02000B0016 -:1079600002980021801859410022401E9141029A3C -:107970000023FCF722FA002807D03A0001001CA8D7 -:107980000078FBF725FA002815D008211CA80078FC -:10799000FFF7DFFE002043E0684601781CA800786E -:1079A000FAF7DEFE002806D008211CA80078FFF7B1 -:1079B000D0FE002034E026A800786870002C01D0AA -:1079C000012001E026A8007828700198A860EC60EA -:1079D000002028610298A861684600782D2168542B -:1079E00024A800782F216854684640782E216854D6 -:1079F00001980799884201D3012000E002202C2140 -:107A0000685401991CA80078FBF7E4FA002806D016 -:107A100008211CA80078FFF79CFE002000E0012050 -:107A20001DB0F0BD10B5D02100227B4C2000FEF728 -:107A30006DFE10BD08190028F8B505000C002800DF -:107A4000C0B2FFF7DFFD002813D02800C0B2FAF75C -:107A5000A0FD7148EDB234214D4345193421002673 -:107A600032002F003800FEF751FE6C602E700320AC -:107A7000A870F1BD38B50400002505E021002800FC -:107A8000C0B2FFF7D9FF6D1C042DF7D331BD00B58F -:107A9000002000E0401C042809D25F493422424300 -:107AA00089183022895C0029F4D0012000E00020F0 -:107AB00000BD78B585B0040057482300DBB23425FB -:107AC0006B43C5182878082835D1696889B2200029 -:107AD000C0B2FAF783FC002804D12000C0B2FFF73F -:107AE00057FE96E02000C0B2FAF7DFFE002800D073 -:107AF0008FE0A86A002806D0A96A2000C0B2FAF771 -:107B0000CAFF002812D0696889B22000C0B2FAF713 -:107B100065FC002804D12000C0B2FFF739FE04E064 -:107B200009212000C0B2FFF714FE72E02000C0B2AD -:107B3000FFF721FE6DE0C87804280BD0C878022832 -:107B400008D0C878032805D0C878052802D0C8789E -:107B5000012805D109212000C0B2FFF7FAFD58E045 -:107B60002878012855D01600287806281BD1686A85 -:107B7000FA21490041183000FFF783FD002811D099 -:107B800069462000C0B2FAF753FF002805D009214A -:107B90002000C0B2FFF7DDFD3BE0039828626E6273 -:107BA0000720287035E0686AFA2189004118300002 -:107BB000FFF767FD00282CD069462000C0B2FAF715 -:107BC00037FF002805D009212000C0B2FFF7C1FD12 -:107BD0001FE0686A361A0398296A401A00210F4A82 -:107BE0000023FCF7DDFB32000023FCF7E6F806007B -:107BF000002E05D02000C0B2FAF7CBFC002805D03B -:107C000009212000C0B2FFF7A4FD02E0AE62082007 -:107C1000287006B070BD000008190028A086010079 -:107C2000F0B591B0FAF711FBFAF790FF059000203C -:107C300006900CE006212800C0B2FFF78AFD03E0A1 -:107C40002800C0B2FFF797FD0698401C06900698E2 -:107C5000042800D344E1069DA248069934225143EA -:107C600044183020205C002806D007A92800C0B2A4 -:107C7000FBF708F8002800D0E6E7FAF74AFB0028EF -:107C800003D107AEF078072805D107212800C0B23C -:107C9000FFF75FFDD8E7616889B22800C0B2FAF744 -:107CA0009DFB002804D12800C0B2FFF771FDCBE78F -:107CB000F078062807D12078082804D02800C0B220 -:107CC000FFF766FDC0E72078012814D1B0780028BE -:107CD00011D0607820702078062802D10598606263 -:107CE00009E0E068002804D00598E16840182061A8 -:107CF00001E000202061207806280BD0207807289A -:107D000008D02078082805D02078012809D160788B -:107D1000062806D1059A07A92800C0B2FFF7C9FEB8 -:107D200092E7207804282DD161690598FFF7A9FC16 -:107D3000002826D060780490012003902F20205C3A -:107D4000029060680190E0680090A3692D20225C99 -:107D5000A1682800C0B2FFF761FD002811D1616859 -:107D600089B22800C0B2FAF739FB002804D12800F4 -:107D7000C0B2FFF70DFD04E004212800C0B2FFF7F8 -:107D8000E8FC61E7F078022802D0F078032801D1FE -:107D9000012700E00027F078042803D03800C0B2A3 -:107DA000002852D02000FFF7B6FC00280AD007A90F -:107DB0002000FFF776FC002804D02800C0B2FFF7AF -:107DC000DAFC41E72000FFF7A6FC002823D02E2094 -:107DD000205C00281FD12800C0B2FAF7DAFB002887 -:107DE0000CD0FAF796FA002801D0072100E008210C -:107DF000C9B22800C0B2FFF7ACFC25E70420207010 -:107E0000002020610598FA21C90040186061012016 -:107E10002E21605418E03800C0B2002809D020009C -:107E2000FFF788FC002804D02800C0B2FFF7A3FCAD -:107E30000AE0FFB2002F01D0052100E00421C9B201 -:107E40002800C0B2FFF785FCFEE6F078012804D1D7 -:107E50002800C0B2FFF78FFCF6E6F078052805D1C0 -:107E600006212800C0B2FFF774FCEDE62069002867 -:107E700000D1E9E621690598FFF703FC002800D14D -:107E8000E2E62800C0B2FAF784FB00280CD0FAF72B -:107E900040FA002801D0072100E00821C9B22800DB -:107EA000C0B2FFF756FCCFE62078032800D0C1E629 -:107EB00069462800C0B2FAF7BBFD002805D00821AA -:107EC0002800C0B2FFF745FCBEE60398E16988428E -:107ED00000D0B5E604212800C0B2FFF73AFCB3E6B3 -:107EE00011B0F0BD08190028F0B58FB00C001D00CE -:107EF00061498C4211D21600002E0ED0070005A950 -:107F00003800C0B2FAF7BEFE002806D105A84078B6 -:107F1000002802D00998002801D1002020E020008C -:107F20000021099A0023FCF73BFA02000B0053489A -:107F3000002180185941524A0023FBF73EFF0221DD -:107F4000049100210391002102911499019100965E -:107F500000232A00D2B201003800C0B2FFF75EFC55 -:107F60000FB0F0BDF0B58BB007000E0014001D007F -:107F700001A93800C0B2FAF785FE002803D101A894 -:107F80004078002801D1002012E00A9881190029C8 -:107F900001D5002103E03848814200DB38492B003D -:107FA000220010980090DBB23800C0B2FFF79CFFAF -:107FB0000BB0F0BDF6B585B004000E0006980028A1 -:107FC00015D01F003800C0B2FFF79BFB00280ED071 -:107FD0003000C0B2012803D03000C0B2022806D160 -:107FE0000C992000C0B2FFF7DFFB002801D1002070 -:107FF00040E03900C9B22000C0B2FAF7B1FB002856 -:1080000006D008212000C0B2FFF7A3FB002031E01A -:1080100043482100C9B23422514345186946200023 -:10802000C0B2FAF705FD002806D008212000C0B232 -:10803000FFF78FFB00201DE00398E8613100C9B213 -:108040002000C0B2FAF720FC002806D0082120004A -:10805000C0B2FFF77EFB00200CE001202870032057 -:1080600068702C202E540698E860002028612D208E -:108070002F54012007B0F0BD112700008813000025 -:1080800010270000FEB504000D0016002000C0B24D -:10809000FFF7B8FA002802D02F00002F01D10020EE -:1080A0003DE02000C0B2FFF7D2FA05003100200009 -:1080B000C0B2FFF779FB002807D02900C9B2200021 -:1080C000C0B2FAF74DFB002806D009212000C0B24B -:1080D000FFF73FFB002022E0052011492200D2B229 -:1080E00034235A4388546B463A0002212000C0B220 -:1080F000FBF768FB002806D168460178002902D00A -:108100004078002806D109212000C0B2FFF721FBEA -:10811000002004E02000C0B2FFF72DFB0120FEBDCF -:1081200008190028FEB504000D0016002000C0B29A -:10813000FFF768FA002802D02F00002F01D100209D -:108140003AE02000C0B2FFF782FA050031002000BB -:10815000C0B2FFF729FB002807D02900C9B22000D0 -:10816000C0B2FAF7FDFA002806D009212000C0B2FB -:10817000FFF7EFFA00201FE0052056492200D2B297 -:1081800034235A4388546B463A0000212000C0B281 -:10819000FBF718FB002803D168460078002806D1B9 -:1081A00009212000C0B2FFF7D4FA002004E020002B -:1081B000C0B2FFF7E0FA0120FEBD70B50400200058 -:1081C000C0B2FFF71FFA002809D02000C0B2FAF7AA -:1081D0006CFB002803D1FAF79CF8002801D000209E -:1081E00013E03C48E4B234214C4304193020205CB5 -:1081F000002801D0002008E0656834210022260014 -:108200003000FEF783FA6560012070BD38B596B086 -:1082100005000C00002C1AD02800C0B2FFF7F2F9BC -:10822000002814D069462800C0B2FAF72BFD0028B8 -:108230000DD10FA92800C0B2FAF776FE002806D1AA -:108240000AA92800C0B2FAF7F3FB002801D00020E9 -:108250003CE02048EDB234214D43401901782170B3 -:10826000817861706946CA78A2708A78E270426843 -:108270006260039AA260019AE260029A22610C9AFB -:108280006261149AA261099AE261059A2262069AD1 -:108290006262079AA262089AE2620FAA527E3023B3 -:1082A000E2542E22825C3123E2543022825C32235B -:1082B000E2542E22805C002801D0012000E0002042 -:1082C0003322A054487834216054012017B030BDC7 -:1082D0000000000008190028F8B5C0B0002001F027 -:1082E00072FB20A9002000F016FA07006946012061 -:1082F00000F011FA04003800C0B2022801D10125B3 -:1083000000E000252000C0B2022801D1012600E0D3 -:1083100000263000284387490870864800780028E6 -:1083200013D1FFB2002F04D120A800F04CFA00288E -:1083300007D0E4B2002C08D1684600F044FA0028C7 -:1083400003D101207C49087002E000207A490870BE -:108350007848007800280FD100200100BA4A117037 -:108360007649086005E00021C943754A8300D15071 -:10837000401C2028F7D331E0F6B2002E16D0EDB223 -:10838000002D05D02299029800F014FA00280DD093 -:1083900001206A4908600020202814D26946820022 -:1083A0008958674A8300D150401CF5E70020634993 -:1083B000086006E020A982008958614A8300D150F4 -:1083C000401C2028F6D35E48C068012803D1012054 -:1083D0009D49087002E000209B49087041B0F0BD43 -:1083E000F0B595B053480078002803D0964800783F -:1083F000002801D1002065E0002400E0641C042C6A -:108400004ED2062767433F1D4D4DB800285801A99D -:1084100014226243885001AEB80028184068142125 -:10842000614371184860B8002818806814216143BE -:1084300071188860B8002818C06814216143711849 -:10844000C860B800281800690090B8002818406972 -:10845000012801D1012000E000201421614371189E -:108460000874142060433018426801A81421614345 -:1084700041582000C0B200F02DF9B90069184969CF -:1084800002290BD20099814208D11420604331188F -:108490002000C0B2FAF73AFA0028AFD0002011E06D -:1084A000002400E0641C042C0BD201A814216143B9 -:1084B00041182000C0B2FAF753FA0028F2D0002089 -:1084C00000E0012015B0F0BD00205F4908700120D8 -:1084D00019490870704710B5A0B0164800780028F8 -:1084E00003D059480078002804D10020564908706C -:1084F00001201CE00020010006E0114A8B00D25848 -:108500006B468C001A51491C2029F6D30C49896806 -:10851000491C029103901C21684600F097F81C90BA -:10852000A048006801214140684600F075F920B07C -:1085300010BD00006D1C00286F1C00281C1C0028AA -:10854000D8190028F8B5B0B0974F3878002805D072 -:108550009448006801214140009101E00020009012 -:108560000026300005E00021C94310AA8300D15045 -:10857000401C2028F7D38D4810900820119038789F -:10858000002803D08A488068401C00E00120129037 -:108590000120139034001FE0310019E0019810A968 -:1085A000AA00885010A80299AA0082185160039965 -:1085B000AA00821891600499AA008218D1600999D2 -:1085C000AA008218116101A9097C0029E4D00121C7 -:1085D000AA0080184161641C042C12D20625654350 -:1085E0002D1D01A92000C0B2FAF722FA002806D1F9 -:1085F00006A92000C0B2FAF745FB0028CED0002023 -:1086000016E01C2110A800F021F82C9038780028E2 -:108610000AD022480078002806D010A800F0E7F819 -:10862000002801D0012003E0009910A800F0F4F820 -:1086300031B0F0BDA04800787047A048007870477E -:108640009F480078704700006E1C0028F2B5002695 -:10865000F64300210A0000E0521C009B9A421AD205 -:108660009300C4580B0000E05B1C042BF4D23500CF -:10867000E6B26E40240A0D0001E00F0004E0082D70 -:10868000F2D2F707F9D5904F7608B4463E00674618 -:108690007E406D1CF3E7F043F2BD00006E1C002825 -:1086A000C0018A494018704700B5C0B2002805D003 -:1086B000022808D004D3032807D009E0844808E042 -:1086C000AF20400105E0834803E0E120400100E0E5 -:1086D000002000BD38B50D001400C0B2FFF7E4FF64 -:1086E00002002800002A01D0002C02D10020C04343 -:1086F00010E0844200D2200000210023FBF750FE4E -:1087000002000B006008002180185941220000235C -:10871000FBF753FB32BD10B50C00FFF7C1FF002C77 -:1087200001D100203CE0002104E08A0082588B0047 -:10873000E250491C2029F8D3E068022801D3002028 -:108740002EE02068194988420BD16068082808D1BA -:108750001C212000FFF77AFF216F814201D1022006 -:108760001EE020685C49884202D1606805280DD06F -:1087700020685A49884202D16068062806D02068DD -:10878000574988420BD16068072808D11C21200076 -:10879000FFF75CFF216F814201D1012000E0002042 -:1087A00010BD00001C1C00286D1C002838564D53BD -:1087B000D819002800B5401A012801DB012000E08B -:1087C0000020C0B200BD00B5002801D100200DE09E -:1087D000002100E0491C202907D28A00825800238A -:1087E000DB439A42F6D0002000E0012000BD10B526 -:1087F000002801D100200EE0042100E0491C1C29C2 -:1088000008D28A0082582F4B8C001B599A42F5D00F -:10881000002000E0012010BDFEB50500002D03D0B2 -:1088200000910098022801D3002043E00098FFF750 -:1088300037FF070001970121380001F0E2F801211C -:10884000380001F01CF9002801D1002032E0002698 -:10885000340007E00122A0002918A000381801F018 -:1088600057F9641C202CF5D3300005E081006958CD -:10887000144A8300D150401C202808D2019982005C -:1088800089588200AA589142F0D0002012E0009846 -:108890001449086001200100074A1170E9680129A4 -:1088A00002D10649087002E030000449087004480B -:1088B00006700120FEBD00006D1C00286E1C002803 -:1088C0006F1C0028D81900282083B8ED000003147D -:1088D000FC530000901A000035564D5336564D5348 -:1088E00037564D531C1C002800B5010009B2002961 -:1088F00005D40121C006C00E8140AE48016000BD14 -:1089000000B5010009B2002905D40121C006C00E3E -:108910008140CC48016000BDF0B5020012B2002ACF -:1089200018D41822A44B040024B2A408A4001C5993 -:10893000FF250600F6001640B540AC438901C9B2D8 -:108940000500ED002A409140214300B280088000DC -:1089500019501CE00F22BC4C182503001BB2134019 -:10896000083B9B089B00060036B23240083A92084A -:108970009200A258FF260700FF002F40BE40B243DE -:108980008901C9B2C0000540A9401143E150F0BDC2 -:1089900000B5002A03D101228A40426002E0012290 -:1089A0008A40826000BD0268CA401000C007C00F44 -:1089B000704700B5022801D301200FE00B00DBB2A5 -:1089C000042B01DB012009E0BC4B80001818C9B260 -:1089D000405C824201D3012000E0002000BDF8B5D8 -:1089E00004001F00022C01D3012023E015000E001B -:1089F0002A003100C9B22000FFF7DBFF012801D1B6 -:108A0000012017E03000C0B2002816D1FF2F12D885 -:108A1000AB4861034018A900401880214901401863 -:108A20000168A84A0A403902FF231B020B40134386 -:108A300003600020F2BD0120FCE7F6B2012E16D142 -:108A400080204002874210D29D4861034018A9004F -:108A50004018A0214901401801689B4A0A40390288 -:108A6000C44B0B4013430360E3E70120E2E701201E -:108A7000E0E700B20012C0B27047F8B505000F0081 -:108A80001600280000B2FFF7F4FF04002000C0B277 -:108A9000022801D301202CE032003900C9B22000A5 -:108AA000C0B2FFF786FF012801D1012021E08448F0 -:108AB0002100C9B2490341182A00D2B29200891894 -:108AC000C02212018A58AC491140FFB23B02C022B9 -:108AD00092001A400A43FF218A43F1B21143E4B2E3 -:108AE00062038018EDB2AA008018C02212018150E2 -:108AF0000020F2BD70B50400022C01D3012028E053 -:108B000015000E002A003100C9B22000FFF751FF06 -:108B1000012801D101201CE06948610341588022ED -:108B200012060A43C02189041143FF2212040A439A -:108B3000914B1340F6B23202C02189001140194313 -:108B4000FF229143EAB20A43610342506103405855 -:108B5000002070BD70B50400022C01D3012028E074 -:108B600015000E002A003100C9B22000FFF721FFD6 -:108B7000012801D101201CE05148610341588022A5 -:108B8000D2050A43C02189041143FF2212040A437B -:108B9000794B1340F6B23202C021890011401943CB -:108BA000FF229143EAB20A436103425061034058F5 -:108BB000002070BD00E100E000E400E038B50020D6 -:108BC0000100974A11700100964A11709649086099 -:108BD00000F0D4F8002803D000F02CF9002804D1CC -:108BE0009248B849086000202BE0914C2000FBF728 -:108BF000B9FF002804D08D48B2490860002020E069 -:108C0000B1490020205EFBF7CCFF00210220205E4E -:108C1000FFF782FE0220205EFFF772FEAB4D2800B8 -:108C200001F05AFEAA49280001F0CCFAA5490860D3 -:108C3000002801D0002004E00220205EFFF754FE4F -:108C4000012032BD80E200E01CED00E038B50400F8 -:108C5000002C01D100202FE0FBF74AFE71490A7871 -:108C600013006F4D2D78DBB2AB4203D1FBF744FE0E -:108C7000002021E0C44B1500EDB22D015D592560A7 -:108C80001500EDB22D015D196D6865601500EDB23E -:108C90002D015D19AD68A5601500EDB22D015B19C0 -:108CA0001B7B2373521C1300DBB2102B00D300225A -:108CB0000A70FBF721FE012032BD000098DA001097 -:108CC00000000440FF00FFFFFF0000FFF1B594B07B -:108CD0000D0016005021002422006F463800FDF7D9 -:108CE00015FD149880210901884203D24E4800687E -:108CF000002804D04D48A9490860002038E06846A3 -:108D000021000170210001721499019108214C2267 -:108D100081540395049600E0641C2000C0B208282A -:108D200021D26A4D2100C9B2280001F02DFF0100B7 -:108D3000C9B20129F0D0C0B20328EDD014989849E7 -:108D400008606A462100C9B2280001F049FE934933 -:108D50000860002805D193480168491C0160012082 -:108D600006E0002004E090480168491C01600020F2 -:108D700015B0F0BD00FFFF00FFFCFFFFF8B50025B8 -:108D800000956846FEF770FB002801D0002046E001 -:108D9000864C0098A04205D300982100FBF712F9F9 -:108DA000002901D000203AE000982100FBF70AF9E1 -:108DB0000400002C03D0FF20801C844201D300203B -:108DC0002DE0FF2608363000FFF753FE0700002293 -:108DD00000213800FFF7BEFE002801D000201EE071 -:108DE000002200213000FFF748FE002801D00020BB -:108DF00015E023005B1E002200213800FFF7EFFD85 -:108E0000002801D000200AE0002200213800FFF7EE -:108E100071FE002801D1012000E02800C0B2F2BD9F -:108E2000411C0028421C00287C1B00280100620015 -:108E30000008002818B5A7B01AA85D493422FBF72E -:108E4000C3FE0DA85B493422FBF7BEFE68465A49B3 -:108E50003422FBF7B9FE594C1AAA07212000FBF770 -:108E600072F8002801D0002024E00DAA062120007D -:108E7000FBF769F8002801D000201BE06A460121B9 -:108E80002000FBF760F8002801D0002012E001224A -:108E900001212000FFF77CFDFA208000FCF77EF81E -:108EA00001212000FFF77FFD012801D1012000E012 -:108EB0000020C0B228B010BD80B5044801F042F8CF -:108EC00001BD00005C1B0028B98E00100004544056 -:108ED0000808002870B51400002C05D0207A00285E -:108EE00002D12078002800D04DE035480168491CA7 -:108EF00001606068334908606068C0218900884269 -:108F000014D14C20205C082810D1E068C0B2092898 -:108F10000CD1E068000AC0B2102807D120690028EF -:108F200004D1E068000C80B2F9F7E2FA2648017833 -:108F30000A00521C1300DBB2102B00D300221300D6 -:108F4000224D2D78DBB2AB4204D121480168491C87 -:108F5000016018E00C4B65680E00F6B236019D51B9 -:108F60004C25655D0E00F6B236019E193573E56835 -:108F70000E00F6B236019E1975602469C9B2090166 -:108F800059188C60027070BD2817002800B5C0B257 -:108F9000002802D101200F49086000BD781B00287D -:108FA000741B0028681B00286C1B0028005A6202F2 -:108FB00074D70010A8D70010DCD700108001314012 -:108FC000601B0028701B0028411C0028421C002840 -:108FD000641B00287C1B00286B490A6808607047E6 -:108FE0006A490A6810239A43C0B20001102318404E -:108FF00010430860704765490A68654B1340C0B26A -:1090000000028022520010401843086070475F49F8 -:109010000A6852005208C0B2C00710430860704787 -:10902000002070475B480068704710B5040059483D -:109030000460BFF34F8FFFF7F5FFA04201D101207D -:1090400000E00020C0B210BDF8B50400FF20E230FF -:109050000090FFF7E5FF0700FFF7E4FF01252E0072 -:1090600000210A004C4B1A700A004C4B1A70009AEF -:109070002240002A02D04A490D7001E0484A11708E -:10908000610005D50020FFF7D0FF0600FFF7CAFFFB -:10909000F6B2002E09D04349884206D042498842A0 -:1090A00007D13800C0B2002803D105203A49087022 -:1090B00012E03B480078002803D0042036490870AD -:1090C0000AE0FFB2002F07D00800FFF7AEFF00282C -:1090D00002D1052030490870FBF7CEFFFBF7F6FF01 -:1090E000C8200001FFF778FF0120FFF779FF00207B -:1090F000FFF781FF0120FFF78AFFFBF7DCFFFBF79B -:10910000F8FF2648057000F001F8F1BD80B523484E -:109110000078002801D0FCF713F801BD80B50100EC -:10912000C9B200290CD01C490A78002A08D108705D -:109130000020F9F715FAF9F721FA0020FEF79AFC5A -:1091400001BD80B5FFF76CFFFFF76CFF1549884242 -:1091500002D10520FFF7E2FFF9F7DBF8002802D083 -:109160000120FFF7DBFFFFF7D1FF01BD00B50A4883 -:109170000078002801D0012000E00020C0B200BD2E -:10918000054800787047000008C0264010C02640FF -:10919000FFFEFFFF0C102740521C0028541C002823 -:1091A000531C002845564F4D41564F4D1CB501F0FC -:1091B00019FD002803D100F0B9F800202BE001F0E0 -:1091C000F3FF002803D100F0B1F8002023E0FBF703 -:1091D00002FA002805D069460520FBF78BFA002823 -:1091E00003D100F0A3F8002015E0684600889749F5 -:1091F00008800124964804700020964908600120E8 -:1092000000F084FA012000F09DFA64209249086081 -:1092100092480470012016BD80B5002804D1904802 -:109220000168491C016020E08E490A68521C0A60EE -:1092300001688D4A891A08D00C3909D0922252004F -:10924000891A08D05C3909D00BE000F085F80CE0F1 -:1092500000F00EF909E000F06DF906E000F0A0F969 -:1092600003E07F480168491C016001BD80B501F041 -:10927000E7FC00F03CF87D480178E02905D0017852 -:10928000052902D00078002806D10020A6490870E0 -:109290000120724908700EE0A4480178002906D127 -:1092A000A1480178002906D00121017003E000786F -:1092B000401C9D4908709E480078002814D0B4488E -:1092C0000168002910D00168491E0160006800286B -:1092D0000AD1B048007801F0D9FF002804D101205C -:1092E000AD49086000F056FA00F05BFA01BD1CB50C -:1092F00058480168491C016001680A2915D30024F7 -:10930000046069460520FBF7F5F9002807D0684698 -:1093100000884E49088001204D49087005E09F48AB -:109320000168491C01604A48047013BD80B501F012 -:10933000FEFC02F083FA01F0C0FF002001007C4A2D -:109340001170934908600100B64A1170764908709F -:1093500001204249087001BD70B5017B08290AD07F -:109360003F480168491C0160002000F0CFF900204F -:1093700000F0E8F968E00324416822000A404168EF -:10938000890823000B404168090925000D400F267C -:109390004168090C31404068000D06401000C0B221 -:1093A000022803D1012000F0B1F924E0D2B2012A51 -:1093B0001AD11800C0B2012802D0DBB2022B13D19F -:1093C0000800C0B200280FD00800C0B206280BD297 -:1093D0000800C0B200F028F900280CD102206E4924 -:1093E000086000F0D7F906E01D480168491C0160DB -:1093F000002000F08BF92800C0B2022803D1012020 -:1094000000F0A0F920E0EDB2012D16D13000C0B27D -:10941000002812D03000C0B206280ED2BA48007818 -:1094200000280AD03000C0B200F03FF900280BD16C -:109430005948046000F0AEF906E009480168491C8B -:109440000160002000F07EF970BD0000381C00288B -:109450005C1C0028E41B0028E01B0028FE120028EA -:10946000C81B0028C41B00289E020000571C0028AF -:1094700080B5017B082904D0B0480168491C01600F -:1094800051E0436807214268120C0A404068C00C52 -:109490000140DBB2012B07D11000C0B2052803D276 -:1094A0000800C0B2052804D3A4480168491C016023 -:1094B00039E01000C0B2012801D1012005E0D2B28C -:1094C000022A01D1022000E003209D4A107008000A -:1094D000C0B2012801D1012005E0C9B2022901D1A1 -:1094E000022000E00320A1490870114800780028FC -:1094F0000AD09F48007800F097F8002804D1042093 -:109500002549086000F046F90848007800280AD08C -:109510009848007800F0C9F8002804D105201E49B9 -:10952000086000F037F901BDFD120028561C002824 -:10953000591C002880B5017B08290AD000207249F7 -:1095400008707E480168491C0160002000F0FAF8AC -:109550001CE0406800098007800F0100C9B20129A2 -:1095600002D0C0B2022803D101206749087002E08E -:1095700000206549087064480078002806D16F48CB -:109580000168491C0160002000F0DCF801BD00000A -:10959000DC1B00285B1C0028D41B0028D81B0028DB -:1095A00010B5017B08290AD064480168491C016094 -:1095B000002000F0ABF8002000F0C4F831E00324F4 -:1095C000416821404068800804400800C0B201287A -:1095D0000BD16748007800F027F800280BD106204F -:1095E000A849086000F0D6F805E0C9B2022902D106 -:1095F000012000F08BF82000C0B201280BD15D489B -:10960000007800F052F800280BD107209D4908602F -:1096100000F0C0F805E0E4B2022C02D1012000F015 -:1096200091F810BDFC12002870B50100C9B20329E1 -:1096300001D3032500E005000100C9B2002903D0D1 -:109640000100C9B2062901D3002025E03C490A786F -:109650002B00DBB29A4200D20D78454908708A4C43 -:109660002800C0B200F088F820706D1C8748057093 -:10967000012587480570874E307800280DD1642079 -:1096800001F0B8FD002801D1002005E03570FA2076 -:10969000C00081490860012070BD7F480068002833 -:1096A000F9D1207801F0F2FDF6E710B50100C9B25A -:1096B000032901D3032400E004000100C9B20029FA -:1096C00007D00100C9B2062903D20F490978002941 -:1096D00001D1002017E025490A782300DBB29A4225 -:1096E00000D20C78234908702000C0B201F00AFBB8 -:1096F000002801D1002006E0641C684804700120A5 -:1097000063490870012010BD5A1C002810B50400E0 -:1097100001F0D3FD002001005E4A11705E4908602F -:109720000100594A11702100C9B2052900D3040073 -:109730005648047001205649087010BDC81B002807 -:109740000013002810B50400002001F0DBFA002807 -:1097500001D102F073F82000C0B2052800D3002424 -:109760004E48047001204A49087010BD02130028B9 -:10977000FF1200280113002800B50100C9B2012919 -:1097800001D1322005E0C0B2022801D1462000E01C -:10979000642000BD80B5FFF7C9FD0120FFF7BEFCC6 -:1097A00001BDF8B53E4C2068401C2060384D28783B -:1097B000002802D12068642862D334480078C0B2FF -:1097C0004007400F35490978C90038220A40024352 -:1097D000009234480078002801D0012100E00021E7 -:1097E00031480078E02801D0022000E00020084342 -:1097F00028490978002901D0012100E000212B4AE5 -:109800001278530006221A400A4380235B0028493D -:109810000E689E4201D3FF2100E00968254E37689B -:109820009F4201D3FF2300E03368C0B2D2B21202DC -:109830000243214800880704174320480088C9B222 -:1098400009040143DBB21E060E43002200991C48A6 -:10985000FFF73CFA00280FD0320039001948FFF713 -:1098600035FA002808D018480168491C016000201A -:1098700001002970206003E014480168491C016060 -:10988000F1BD0000D41B00285B1C0028FC1200283E -:10989000FE120028591C0028DC1B0028FD1200289D -:1098A000E01B00285C1C0028571C0028561C0028C0 -:1098B000D81B0028B01B0028381C0028361C0028A4 -:1098C000FA04000005030000CC1B0028D01B002870 -:1098D00000B5FEE700B5010009B2002905D4012159 -:1098E000C006C00E8140B748016000BDF0B502005F -:1098F00012B2002A18D41822844B040024B2A408FF -:10990000A4001C59FF250600F6001640B540AC43E4 -:109910008901C9B20500ED002A409140214300B2FF -:109920008008800019501CE00F22A74C1825030066 -:109930001BB21340083B9B089B00060036B2324026 -:10994000083A92089200A258FF260700FF002F4015 -:10995000BE40B2438901C9B2C0000540A9401143CD -:10996000E150F0BD00B59D48012102680A43026044 -:1099700002680A40002AFBD100BD99480168012213 -:109980000A43026070479748016801220A43026057 -:1099900070471FB5684602F049F900280DD08B4C7E -:1099A00018228B492000FDF7A9FD0020E075492011 -:1099B000884908600020FDF701FE01208A490870EF -:1099C000FFF7D0FF1FBD80B5C0B201280ED1032123 -:1099D000814802F05BF903210320FFF787FF032092 -:1099E000FFF778FF01208149087002E000207F49DD -:1099F0000870FFF7C2FFFFF7C6FF01207A49087021 -:109A000001BD7CB505000E00794803C86A4603C253 -:109A1000083A3000C0B2002814D1744800780128F8 -:109A20000DD06A4C18226A492000FDF767FD00201E -:109A3000E0759420674908600020FDF7BFFD002015 -:109A400069490870684601210171002421004171B3 -:109A500000953200D2B26946002002F027FB0028B0 -:109A60000CD05A4D18225A492800FDF747FDEC75D5 -:109A70009E20584908600020FDF7A0FD73BD7CB50D -:109A800006000D00300002F013FA00280DD04F4CF4 -:109A900018224F492000FDF731FD0020E075B52068 -:109AA0004C4908600020FDF789FD2800C0B200285D -:109AB00014D14E48007801280DD0444C1822444956 -:109AC0002000FDF71BFD0020E075B920414908602A -:109AD0000020FDF773FD0020434908700096300018 -:109AE00002F024FA002801D0202001E0802080002C -:109AF00001902A00D2B26946002002F03FFB002804 -:109B000001D1012000E0002076BD000000E400E06B -:109B1000F8B584B007000E001500380002F0C8F94F -:109B200000280DD0294C182229492000FDF7E6FC19 -:109B30000020E075DF20274908600020FDF73EFD8A -:109B400068461021FCF7F2FD2800C0B2002814D1AD -:109B50002648007801280DD01C4C18221C492000F2 -:109B6000FDF7CCFC0020E075E6201A4908600020D3 -:109B7000FDF724FD00201C490870012168460A00F9 -:109B800002720A00427202228272C1720024210013 -:109B90000173009701962A00D2B26946002002F0B4 -:109BA00027F900280CD0094D182209492800FDF793 -:109BB000A5FCEC75F520074908600020FDF7FEFCC8 -:109BC00005B0F0BD00E100E01CED00E0C41A002883 -:109BD000F0D50010881B002893990010080024403D -:109BE00000F4244000F52440431C0028441C0028B5 -:109BF00088DA001000B5002801D0002901D1A04862 -:109C000008E0A04A904206D1002008808020800110 -:109C10004860002000BD9C4A904205D18020800110 -:109C200002000A804860F4E7BA4A904206D18020D8 -:109C3000C0010880802080014860EAE7B64A90426F -:109C400006D1C020C0010880802080014860E0E784 -:109C5000B24A904206D18020000208808020800114 -:109C60004860D6E7AE4A904205D1002008808020A7 -:109C700080014860CDE7AB4A904205D18020800149 -:109C800002000A804860C4E7A74A904206D18020BB -:109C9000C0010880802080014860BAE7A34A904252 -:109CA00006D1C020C0010880802080014860B0E754 -:109CB0009F4A904206D180200002088080208001C7 -:109CC0004860A6E76E48A5E700B5002100E0491C02 -:109CD0000A290AD2974A18234B43D3589842F6D1FF -:109CE000182041435018001D00E0002000BD10B5B1 -:109CF0000A00D2B2402A01DB002017E0020C120455 -:109D000080235B02D218AC23C3589B089B049B0C96 -:109D10009B00D218C9B2884BBC240059000A4007E6 -:109D2000400F185C801C41438800101810BD10B50E -:109D30000A00D2B2202A01DB002016E0020C120435 -:109D400080235B02D218C023C3589B089B049B0C42 -:109D50009B00D218C9B2784BC82400594007400F65 -:109D6000185C801C41438800101810BD10B50B0012 -:109D7000DBB2022B01DB002028E0030C1B04802453 -:109D800064021B190C00E4B2002C05D1A024045974 -:109D9000A408A404A40C04E0B0240459A408A40456 -:109DA000A40CA4001B19C9B2002904D1BC2140583D -:109DB0004007400F04E0BC21405800094007400F15 -:109DC0005D49085C801C42439000181810BD00B526 -:109DD0005A49884201D3052100E00021400A40068B -:109DE000400E0818C0B200BD38B504000020002C99 -:109DF00044D02000FFF7EBFF0121226D520F0A40F3 -:109E0000002A05D00A004E4B0500EDB26D005A53F2 -:109E1000226D120F0A40002A05D00222484B05008D -:109E2000EDB26D005A53226DD20E0A40002A05D0C1 -:109E30000322434B0500EDB26D005A53226D920E82 -:109E40000A40002A05D004223D4B0500EDB26D000A -:109E50005A53226D520E0A40002A05D00522384B73 -:109E60000500EDB26D005A53226D520D11400029CC -:109E700004D00621324AC0B24000115231BD000068 -:109E800001006200000052400002524070B5002202 -:109E90001300130000283CD003689B0F1C00E4074C -:109EA000E40F0C720B7A002B05D10368DB00DB0892 -:109EB0009B144B6003E00368DB00DB084B604368E6 -:109EC0005B0D1C00E407E40F0C7043681B0C1B07C0 -:109ED0001B0F4C240B554C23CB5C082B01DA1300D1 -:109EE00002E04C23CB5C083B0AE01400A4B2A400BF -:109EF0000419A4681500ADB2AD004D19EC60521CF8 -:109F000014000D4D1E00B6B2AD5DA4B2ADB2AC42B0 -:109F1000EBD370BD0004524000065240000852408E -:109F200000005440000254400004544000065440D5 -:109F3000000854405808002880DA001001085240F8 -:109F4000DC1A0028F1B5A8B0002000900020289865 -:109F5000FFF7BAFE0700002F29D0289E306D9749E1 -:109F60000140002902D02898FFF73EFF0125306DFF -:109F7000C00C284000281CD1306D2840002868D132 -:109F8000306D00092840002800D0BAE0306D400A4A -:109F90000540002D0BD03000503001688022920027 -:109FA0000A4302603868002801D03868804729B029 -:109FB000F0BD300050300168802212030A43026075 -:109FC00098203058002816D0002400E0641C20009F -:109FD000C0B220282CDA98203058E04028400028D1 -:109FE000F4D02100C9B22898FFF781FE0090A54067 -:109FF000982035501CE09C203058002818D00024B0 -:10A0000000E0641C2000C0B2202811DA9C203058E7 -:10A01000E04028400028F4D020342100C9B228981C -:10A02000FFF765FE00902000E03085409C20355011 -:10A0300000980028BBD013A90098FFF727FF786885 -:10A040000028B4D013AA2100C9B200207B68984729 -:10A05000ADE73000503001682943016017E0289ACD -:10A06000D4235B00D45801AA0300DBB29B00D45078 -:10A07000401C02000B00D2B2DBB29A42EFD3B868A8 -:10A08000002804D001AAC9B20020BB689847A420C8 -:10A0900030584006400E012889DB2898C02149002D -:10A0A00040582840002822D1A420305800903F2456 -:10A0B0000098020A224000212898FFF757FE002846 -:10A0C000E5D013A9FFF7E2FE3000A83001683F2277 -:10A0D0009143009A120A14400C43046078680028E7 -:10A0E000D5D013AA002101207B689847CFE73448D8 -:10A0F0002899BC2289584907490F415C891C0020D6 -:10A10000B7E730005030016810220A43026017E0C0 -:10A11000289ADC235B00D45801AA0300DBB29B0021 -:10A12000D450401C02000B00D2B2DBB29A42EFD3F3 -:10A13000B868002804D001AAC9B20120BB689847BA -:10A14000B42030584006400E012800DA2FE7289846 -:10A15000C0214900405840082840002822D1B4209E -:10A16000305800903F240098020A2240012128988C -:10A17000FFF7FCFD0028E3D013A9FFF787FE3000AE -:10A18000B83001683F229143009A120A14400C43F0 -:10A19000046078680028D3D013AA012101207B68CD -:10A1A0009847CDE706482899BC22895809094907EC -:10A1B000490F415C891C0020B4E70000EEE0F73F46 -:10A1C00080DA0010F1B594B0D34800681290D348FB -:10A1D00000681190D2480768D2480668D2480068E3 -:10A1E0001090D24800680F90D14800680490D14880 -:10A1F00000680E90D04800680190D04800680D902B -:10A20000CF4800680C90CF4800680B90CE4800689B -:10A210000A90CE4800680990CD4800680890CD4863 -:10A2200000680390CC4800680290DC480068079002 -:10A23000DB48006800901498002810D00C00002C17 -:10A240000DD02820205C002802D0E06A002806D02B -:10A250003020205C002804D0606B002801D1D14858 -:10A2600024E31498FFF730FD002801D1CD481DE309 -:10A270002168016061684160A1688160E168C16036 -:10A2800021690161149D0120A861A869C007FCD55E -:10A290000320A86105A91498FFF7ACFC002801D0A1 -:10A2A000C04803E32820215C129ABF4810400A04EA -:10A2B000FF21090411400143BC4808406946898ACE -:10A2C00089B2890889B2890001438420295030204D -:10A2D000205C4006400EFE21C903119BE44A1A404F -:10A2E0000004084010438422AA5892082823E35C03 -:10A2F000D2189204920CAD4B03409200DD481040FE -:10A3000018438822A850A06BC000C0087A0F5207DB -:10A3100010439022A85007224020205C1040099F43 -:10A32000D54B3B400702E020C00038401843412392 -:10A33000E35C13407027B8431F0170233B40034385 -:10A340004220205C10400727BB431843BC23E85041 -:10A350004420235C1800C007C00F73005B08C607C9 -:10A360001E434520205C4006400EC44B1E4007069D -:10A37000FE20C005384030434626A65D7606760EA0 -:10A38000BB4F07403004084038438826AE59B60812 -:10A390003027E75D7F00F619B604B60C834F0740FF -:10A3A000B600B44830403843A026A8514820265C67 -:10A3B0003000C007C00F109E76007608C0073043FB -:10A3C0004926A65D7606760E03403606FE20C005B9 -:10A3D000304018434A23E35C5B065B0EA44E064004 -:10A3E000180401403143A64FA02028588008462376 -:10A3F000E35C4226A65DBE5DB61C7343C0188304B1 -:10A400009B0C6A4808409B009A4919400143B020C0 -:10A4100029504720205C002801D1002100E00121C3 -:10A42000009B012083430800C007C00F18434B2145 -:10A43000615C002901D1002100E001210223984341 -:10A4400049000223194001431498C0235B00C15006 -:10A45000B020285880084A21615C4123E35CFB5C02 -:10A460009B1C5943401883049B0C82484F490F9E04 -:10A470000E409B0003403343AC26AB514323E35CC7 -:10A480001A40089B0726B3431A43C823EA507D4A63 -:10A49000049E16407C4B1E400496AC26AE59B6086E -:10A4A00000964C26A65DB4464026A65DBE5DB61C51 -:10A4B00067467743009EF619B604B60C049F0F401A -:10A4C000B60006403E43F027EE510E9F6F4E3E40D1 -:10A4D00032404D26A65DB606B60E13403604FC2269 -:10A4E000920332401A43F023EB589B0814339B0429 -:10A4F0009B0C11409A0010400843C02168508022F4 -:10A5000052021498000C00046946898A4018801889 -:10A5100006998B08002125E0D0DA0010D4DA00106B -:10A52000D8DA0010DCDA0010E0DA0010E4DA00100B -:10A53000E8DA0010ECDA0010F0DA0010F4DA0010BB -:10A54000F8DA0010FCDA001000DB001004DB001069 -:10A5500008DB00100CDB001010DB0010002606608A -:10A56000001D491C9942F9D3019901200843022199 -:10A570000143CF480840217D012901D1012100E09C -:10A580000021CC4B03404802802189000840184339 -:10A59000217D01290CD101210BE000BF14DB00104B -:10A5A00018DB001001006200FFFF00FF0300FFFF47 -:10A5B0000021C14B03400802802149000840184394 -:10A5C00080218843402188432021884310218843EB -:10A5D0000421884301900198A861E08AC005C00D5C -:10A5E0000D99B64B0B400104B54808401843217E35 -:10A5F000B44B03400902FF200002084018437F23A8 -:10A60000617E19407F26B0430143A07E1840C901F6 -:10A61000C90940060843E861207D012853D11F2065 -:10A62000A18B01400C9FA84E3E400F04F821490326 -:10A6300039403143A67F3040A44E0E400102F8203D -:10A640004001084030430F21E67F0E40F027B84319 -:10A650003701F0263E4006432020205C01400F20B9 -:10A66000864331432220205C012811D1012610E0CD -:10A67000FFFF80FFFCFF0000FFF8FFFFFFFFFF80F0 -:10A6800080DA0010FFFFFFC0FFFFC0FFFFFFFFBF2A -:10A6900000268F480840F1058026360431400143EA -:10A6A000E9602320215C19400B9E8A4830400E024D -:10A6B000FE21C901314001432420205C03407F205A -:10A6C00081430B43AB6403203C21635C03400A9944 -:10A6D0003026B1431E01302333400B433D21615CE2 -:10A6E00008400C218B4381000C20084018433E2178 -:10A6F000615C012901D1012100E00021022398437E -:10A7000049000223194001433F20205C012801D168 -:10A71000012000E000200126012399433040084336 -:10A72000802168501498000C00048421695889081D -:10A730008904890C890040188018002105E0E36A2B -:10A740008F00DB598F00C351491C2823E35C9942D9 -:10A75000F5D31498000C00048821695889088904ED -:10A76000890C890040188218002308E0606BD9002A -:10A77000401803C8DF00D71903C7083F5B1C30200F -:10A78000205C8342F2D3844803990140834A0A4003 -:10A7900083491140834A0A4083491140834A0A4051 -:10A7A0004B491140824A0A4082491140824A0A407C -:10A7B000802109031143814A0A4081491140814A9D -:10A7C0000A40814911403A4A0A4080491140804A72 -:10A7D0000A4080491140804A0A4036491140364BB0 -:10A7E0000B4080218B434021C9430B402022D243A0 -:10A7F000134010271F4308239F430423DB431F40BC -:10A800000224E443274037430397039F6F65029F69 -:10A81000384002900298614F074061483840614FCC -:10A82000074061483840614F074029483840604F31 -:10A83000074060483840604F0740684838405F4FE5 -:10A8400007405F4838405F4F07405F483840184F27 -:10A8500007405E4838405E4F07405E4838405E4FD4 -:10A86000074014483840144F074080208743394040 -:10A870000A401020824308208243134023400120D5 -:10A880008343AB65079830430440EC651498FFF7A9 -:10A890009EFA4000B04900220A52019801218843E3 -:10A8A000A861A86930400028FBD1002015B0F0BD98 -:10A8B000FFBFFFFFFFFDFFFFFFFEFFFFFFFF00FEEB -:10A8C0000000FF01FF00FFFFFFFFE0FFFFE0FFFFD1 -:10A8D000FFFF7FFFFF80FFFFFEB50700002F01D1C4 -:10A8E0009E4857E03800FFF7EFF9002801D19B4858 -:10A8F00050E0002404604460C46004613D00012015 -:10A90000A861A96901400029FBD00326AE61694610 -:10A910003800FFF76FF9002801D090483AE0842012 -:10A920002C5088202C508E4890216850BC202C50F0 -:10A93000A0202C50B0202C50C02040003C50AC2017 -:10A940002C50C8202C50F0202C50C0202C50380CFB -:10A95000000469460988401880214902401801997D -:10A960008A08210002E00460001D491C9142FAD3CC -:10A97000AE617C48E8617C48E860AC6480202C5083 -:10A980006C65AC65EC653800FFF721FA4000724950 -:10A990000C520020FEBD0000FFFFFFDFFFFFFFEFB6 -:10A9A000FFFFFFF7FFFFFFFBFFFFFFFDFFFFFFFEC6 -:10A9B000FFFFBFFFFFFFDFFFFFFFEFFFFFFFFBFF1B -:10A9C000FFFFFDFFFFFFFEFFFF7FFFFFFFDFFFFF3A -:10A9D000FFEFFFFFFFF7FFFFFFFBFFFFFFFFF7FFAB -:10A9E000F8B50600002E02D01400002C01D15B48FF -:10A9F000B0E06846017068460078202801DB5748BF -:10AA0000A8E03000FFF760F9002801D15348A1E029 -:10AA100037000125B8692840002808D1CC203958D2 -:10AA200068460078C1400800C007C00F00E0280059 -:10AA3000C0B2002801D049488CE068460178300057 -:10AA4000FFF775F9002801D1444883E001000A6846 -:10AA5000464B13400B60217A012901D12B0000E005 -:10AA6000002302001668424931409B078026F60504 -:10AA700033400B4313600168890F2940002902D13C -:10AA800061688A0400E0626801000B685B0F5B0785 -:10AA9000D200D2081A430A60011D0A68354B1340E0 -:10AAA0000B60011D0A681202120A0A604C21615CE7 -:10AAB0000B071B0F011D0E682F4A32401B04F026A6 -:10AAC00036031E4016430E602178012901D12B0068 -:10AAD00000E00023021D1668284931405B058026EE -:10AAE000B60333400B4313602178012901D12B00B9 -:10AAF00000E00023021D1668214931401B05802615 -:10AB0000760333400B4313604C21615C082901DA62 -:10AB1000002102E04C21615C08391A4A89B2515C7B -:10AB200000220AE013009BB29B00E318DB681600CA -:10AB3000B6B2B6008619B360521C13000E00F6B20E -:10AB40009BB2B6B2B342EDD3684600788540D020C0 -:10AB50003D500020F2BD0000DC1A00280100620018 -:10AB6000FFFFFF1F030A0006330A0000FFFFFFDF9D -:10AB7000FFFFFFBFFFFF7FFFFFFFF0FFFFFFDFFFD4 -:10AB8000FFFFEFFF80DA001010B50200002A03D0AB -:10AB90000800C0B2202801DB002021E000200123B2 -:10ABA000CC241459CC401C40002C09D0D42010587F -:10ABB000C8401840002801D1180010E003200EE022 -:10ABC000D8241459CC401C40002C01D0022006E0AF -:10ABD000DC241259CA401340002B00D00420C0B21C -:10ABE00010BD000080B500F029FE00F097FD0028A0 -:10ABF00004D1E02000F01EF9002020E001F024FB49 -:10AC0000002804D1E02000F015F9002017E0002012 -:10AC100001006F4A11706F4908606F4908606F4901 -:10AC2000086001006E4A117001006E4A1170012126 -:10AC30006D4A11706D49086086490860012002BDA7 -:10AC400038B585480168491C0160654C20780428A6 -:10AC500003D3E02000F0EEF853E05D4800780028D0 -:10AC600002D000F0EBFD4CE020785E4D2978C0B2B8 -:10AC7000884208D0207800F062F8002803D1E02054 -:10AC800000F0D8F83DE02878002814D0F7F75EFFF0 -:10AC90007049504A1268801A086008686F498842F3 -:10ACA00009D36F480168491C01600020207005200D -:10ACB00000F0C0F825E048480168491C01600168BF -:10ACC0000A291ED30024046001F0CBFA00280AD020 -:10ACD0004248046001F0D8FA6249088001F0D7FACE -:10ACE000614908600DE061480168491C01603B480A -:10ACF0000168491C01600068032802D3E02000F0CD -:10AD000099F831BD00B50100C9B2042901D3002072 -:10AD10000CE02F490978002905D00100C9B20029AB -:10AD200001D0002002E02E490870012000BD80B54E -:10AD300000202B490870E02000F07CF801BD70B5C0 -:10AD400004002000C0B200280FD100F077FD254894 -:10AD500004700120244908700020454908603D49DD -:10AD600008601C49086001202FE02000C0B200F0FC -:10AD70003FF80500002D01D1002026E000F068FD1D -:10AD8000002806D0280000F03BFD002808D1002054 -:10AD90001BE0280000F0E8FC002801D1002014E0AE -:10ADA000104E3078002806D1F7F7D0FE0949086028 -:10ADB00000202849086034702000C0B200F029F853 -:10ADC000094908702A480560012070BD0000000094 -:10ADD000581C0028B81B0028BC1B0028C01B0028DA -:10ADE000551C0028561C0028571C0028A01B0028B2 -:10ADF00000B5C0B2012804D009D3032805D002D37E -:10AE000005E01E2004E03C2002E05A2000E0002083 -:10AE100000BD00B5C0B2012804D009D3032805D075 -:10AE200002D305E0022004E0032002E0042000E059 -:10AE3000012000BD10B5040000F000FD01200D4907 -:10AE40000870002001000C4A1170094908600B4885 -:10AE5000047010BDA41B0028A81B0028C0270900EF -:10AE6000AC1B0028361C0028B41B0028B01B00288F -:10AE7000A01B0028581C0028561C0028571C00281E -:10AE800070B5B14BC018C0090001C64BC3180429E6 -:10AE90000CD21F251C68CE002800B0408443D2B2DB -:10AEA0001540C800854025431D600CE0FC311F257E -:10AEB0005C68CE002800B0408443D2B21540C80080 -:10AEC000854025435D6070BD00B59F4A8018C0096C -:10AED0000001B44A8018042905D20068C900C8409E -:10AEE000C006C00E05E0FC314068C900C840C0067D -:10AEF000C00EC0B200BD00B5002A03D101228A40B5 -:10AF0000426002E001228A40826000BD30B403004A -:10AF10008C000F25596C2800A04081431540A540A6 -:10AF20000D435D6430BC704730B403004C001034F6 -:10AF30000325D96C2800A04081431540A5400D434E -:10AF4000DD6430BC704700B5022801D301200FE05A -:10AF50000B00DBB2042B01DB012009E0A44B8000D5 -:10AF60001818C9B2405C824201D3012000E00020E1 -:10AF700000BDF8B504001F00022C01D3012023E01E -:10AF800015000E002A003100C9B22000FFF7DBFFD8 -:10AF9000012801D1012017E03000C0B2002816D1ED -:10AFA000FF2F12D8B74861034018A900401880212C -:10AFB000490140180168B44A0A403902FF231B02C4 -:10AFC0000B40134303600020F2BD0120FCE7F6B202 -:10AFD000012E16D180204002874210D2A948610379 -:10AFE0004018A9004018A021490140180168BB4A37 -:10AFF0000A403902BA4B0B4013430360E3E70120D8 -:10B00000E2E70120E0E700B20012C0B27047F8B5F5 -:10B0100005000F001600280000B2FFF7F4FF04003F -:10B020002000C0B2022801D301202CE032003900F8 -:10B03000C9B22000C0B2FFF786FF012801D101206C -:10B0400021E090482100C9B2490341182A00D2B238 -:10B0500092008918C02212018A58A2491140FFB2F9 -:10B060003B02C02292001A400A43FF218A43F1B2F8 -:10B070001143E4B262038018EDB2AA008018C02226 -:10B08000120181500020F2BD70B50400022C01D3E2 -:10B09000012028E015000E002A003100C9B220006E -:10B0A000FFF751FF012801D101201CE07548610321 -:10B0B0004158802212060A43C02189041143FF220D -:10B0C00012040A43874B1340F6B23202C0218900B2 -:10B0D00011401943FF229143EAB20A4361034250EF -:10B0E00061034058002070BD70B50400022C01D3EC -:10B0F000012028E015000E002A003100C9B220000E -:10B10000FFF721FF012801D101201CE05D48610308 -:10B1100041588022D2050A43C02189041143FF22ED -:10B1200012040A436F4B1340F6B23202C021890069 -:10B1300011401943FF229143EAB20A43610342508E -:10B1400061034058002070BD0000CFBFF0B58DB046 -:10B15000684665493422F9F737FD644F6A46012194 -:10B160003800F8F7F0FE0600002420006946087257 -:10B170006A4602213800F8F7E6FE050000220121A8 -:10B180003800FFF7B8FE002202213800FFF7B3FEB7 -:10B190003543002D01D1012000E02000C0B20DB0E8 -:10B1A000F0BD00000000304010B500F0ABF8002802 -:10B1B00001D100201BE04E4C2000F9F7E1F84D4989 -:10B1C0002000F8F757FF002801D000200FE02000F2 -:10B1D000F9F7E3F84849884207D12000F9F7D9F890 -:10B1E0004649884201D1012000E00020C0B210BDD4 -:10B1F00098DA001070B5424C0021216000F046F84A -:10B20000002803D10120206000203AE0374E0022C0 -:10B2100001213000FFF76FFE354D37492800F9F75F -:10B22000BAF82800F9F7A6F82800F9F768FB022019 -:10B23000F9F7B4FE2800F9F7A8F8000405D40220B5 -:10B24000206000F03AF800201BE0002201213000CD -:10B25000FFF76AFE062201213000FFF757FE0822A1 -:10B2600001213000FFF70CFE01213000FFF72CFE1A -:10B27000082805D00320206000F01FF8002000E01F -:10B28000012070BD00000440FF00FFFF38B56528B5 -:10B2900001D3002010E000F087F80400144D2100D5 -:10B2A0002800F9F774F82800F9F773F8A04201D1E3 -:10B2B000012000E00020C0B232BD10B50C48F9F703 -:10B2C0005FF80A4C00220121200000F07BF80022E8 -:10B2D0000221200000F076F810BD0000FF0000FF02 -:10B2E00000FFFF00FFFCFFFF40D70010800531404A -:10B2F000001E584020D300101F4E0000204E0000BA -:10B30000581B0028F8B5002500956846FCF7ACF8F6 -:10B31000002801D0002045E0274C0098A04205D32A -:10B3200000982100F8F74EFE002901D0002039E0F6 -:10B3300000982100F8F746FE0400002C02D01F48B8 -:10B34000844201D300202DE0FF266A363000FFF74B -:10B350005AFE0700002201213800FFF7C5FE002831 -:10B3600001D000201EE0002201213000FFF74FFE37 -:10B37000002801D0002015E023005B1E00220121DF -:10B380003800FFF7F6FD002801D000200AE0002277 -:10B3900001213800FFF778FE002801D1012000E0EC -:10B3A0002800C0B2F2BD000000B505494843642141 -:10B3B000F8F708FE00BD000080841E0001000100B7 -:10B3C000204E000070B505000C0016000022210080 -:10B3D0002800FFF790FD3200D2B221002800FFF7CD -:10B3E0004FFD002221002800FFF79EFD06222100CC -:10B3F0002800FFF78BFD002221002800FFF77BFDCE -:10B4000070BD000070B5B14BC018C0090001C24B3F -:10B41000C31804290CD21F251C68CE002800B04098 -:10B420008443D2B21540C800854025431D600CE01E -:10B43000FC311F255C68CE002800B0408443D2B2A6 -:10B440001540C800854025435D6070BD00B59F4A2A -:10B450008018C0090001B04A8018042905D200688C -:10B46000C900C840C006C00E05E0FC314068C900F4 -:10B47000C840C006C00EC0B200BD00B5002A03D14E -:10B4800001228A40426002E001228A40826000BDBF -:10B4900030B403008C000F25596C2800A040814374 -:10B4A0001540A5400D435D6430BC704730B40300C7 -:10B4B0004C0010340325D96C2800A040814315406E -:10B4C000A5400D43DD6430BC704700B5022801D3B0 -:10B4D00001200FE00B00DBB2042B01DB012009E0AF -:10B4E000A04B80001818C9B2405C824201D30120F1 -:10B4F00000E0002000BDF8B504001F00022C01D3BD -:10B50000012023E015000E002A003100C9B22000FE -:10B51000FFF7DBFF012801D1012017E03000C0B2A6 -:10B52000002816D1FF2F12D8B34861034018A90094 -:10B5300040188021490140180168B04A0A40390288 -:10B54000FF231B020B40134303600020F2BD0120C8 -:10B55000FCE7F6B2012E16D180204002874210D2BD -:10B56000A54861034018A9004018A02149014018CE -:10B570000168B14A0A403902BA4B0B4013430360D9 -:10B58000E3E70120E2E70120E0E700B20012C0B2E9 -:10B590007047F8B505000F001600280000B2FFF74D -:10B5A000F4FF04002000C0B2022801D301202CE0E7 -:10B5B00032003900C9B22000C0B2FFF786FF01286F -:10B5C00001D1012021E08C482100C9B24903411872 -:10B5D0002A00D2B292008918C02212018A58A249C8 -:10B5E0001140FFB23B02C02292001A400A43FF21E1 -:10B5F0008A43F1B21143E4B262038018EDB2AA00AB -:10B600008018C022120181500020F2BD70B50400E4 -:10B61000022C01D3012028E015000E002A00310081 -:10B62000C9B22000FFF751FF012801D101201CE021 -:10B63000714861034158802212060A43C0218904DF -:10B640001143FF2212040A43874B1340F6B2320221 -:10B65000C021890011401943FF229143EAB20A43F5 -:10B660006103425061034058002070BD70B5040072 -:10B67000022C01D3012028E015000E002A00310021 -:10B68000C9B22000FFF721FF012801D101201CE0F1 -:10B690005948610341588022D2050A43C0218904D8 -:10B6A0001143FF2212040A436F4B1340F6B23202D9 -:10B6B000C021890011401943FF229143EAB20A4395 -:10B6C0006103425061034058002070BD0000CFBFAD -:10B6D00078B58DB0684665493422F9F775FA644E3D -:10B6E0006A4607213000F8F72EFC040000220721EB -:10B6F0003000FFF7C2FE00255E480560002C07D130 -:10B7000007213000FFF7A2FE002801D1012000E050 -:10B710002800C0B20EB070BD0000304010B500F07F -:10B72000B3F8002801D100201AE0534C2000F8F7AC -:10B7300027FE52492000F8F79DFC002801D0002088 -:10B740000EE02000F8F729FE4D49884206D120007E -:10B75000F8F71FFE002801D1012000E00020C0B250 -:10B7600010BD000098DA001070B5464C0021216031 -:10B7700000F046F8002803D10120206000203AE0C4 -:10B780003B4E002207213000FFF777FE3A4D3C493F -:10B790002800F8F700FE2800F8F7ECFD2800F9F77C -:10B7A000AEF80220F9F7FAFB2800F8F7EEFD0004E6 -:10B7B00005D40220206000F041F800201BE00022A8 -:10B7C00007213000FFF772FE062207213000FFF745 -:10B7D0005FFE082207213000FFF714FE072130002A -:10B7E000FFF734FE082805D00320206000F026F87B -:10B7F000002000E0012070BD00000440FF00FFFFBA -:10B8000070B50400002C01D0652C01D3002012E09B -:10B81000200000F08BF80600174D31002800F8F7E3 -:10B82000B6FD2800F8F7B5FDB04201D0002002E0D7 -:10B8300010480460012070BDFF0000FF80B50E4875 -:10B84000F8F79EFD00F07AF800200A49086001BD73 -:10B8500080B50948F8F799FDC10B0800C007C00F73 -:10B8600002BD000000FFFF00FFFCFFFF0CD700102F -:10B8700000083140501B002880205840ACD20010F6 -:10B880001F4E0000541B0028F8B50025009568469F -:10B89000FBF7EAFD002801D0002045E0354C009878 -:10B8A000A04205D300982100F8F78CFB002901D0B5 -:10B8B000002039E000982100F8F784FB0400002CF8 -:10B8C00002D02D48844201D300202DE0B726760017 -:10B8D0003000FFF75AFE0700032201213800FFF76E -:10B8E000C5FE002801D000201EE003220121300007 -:10B8F000FFF74FFE002801D0002015E023005B1E5B -:10B90000032201213800FFF7F6FD002801D00020B6 -:10B910000AE0032201213800FFF778FE002801D158 -:10B92000012000E02800C0B2F2BD000000B51349BC -:10B9300048436421F8F746FB00BD000010B5104CE9 -:10B94000002207212000FFF798FD00220721200098 -:10B95000FFF758FD002207212000FFF7A7FD062270 -:10B9600007212000FFF794FD002207212000FFF7A8 -:10B9700084FD10BD80841E0001000100204E0000E7 -:10B980000008314038B50500082D0DD3914C182220 -:10B9900091492000FBF7B2FD0020E075E8208F49B7 -:10B9A00008600020FBF70AFE8D486901401832BD8F -:10B9B000994B1B689BB212041A43120C120489B2F1 -:10B9C000114381607047C0687047944B1B689BB2FD -:10B9D00012041A43120C120489B211430160006868 -:10B9E0007047C069C00FC0B27047F8B502000E00C2 -:10B9F000002A01D105204EE00F2089490B681B0A5F -:10BA00000340002B01D1002007E00968090A084023 -:10BA10000E2801D1012000E00220824940010F18C8 -:10BA2000814C984D280011001022F9F7E7F828689A -:10BA300001218843286010212800FBF7E2FD924B8A -:10BA40002A000121380000F04CFC002804D001201D -:10BA500021E0641E002C15D03800FFF7C2FF00283B -:10BA6000F7D1002E08D010212800FBF7C9FD3000C7 -:10BA700029001022F9F7C2F800F0B4F8012803D128 -:10BA8000032008E0022006E000F0ACF8002801D115 -:10BA9000002000E00420F2BD38B50100002901D1EA -:10BAA00005202BE00F205E4A13681B0A0340002B81 -:10BAB00001D1002007E01268120A10400E2801D1BF -:10BAC000012000E00220574A400115186D4C20006B -:10BAD0001022F9F793F82068012188432060102193 -:10BAE0002000FBF78EFD684B22000121280000F0AA -:10BAF000F8FB002801D0012000E0002032BDFEB597 -:10BB000003001600002B03D001910198002801D1F9 -:10BB100005205DE00F2042490A68120A0240002A0F -:10BB200001D1002007E00968090A08400E2801D168 -:10BB3000012000E002203B49400108180090804CA1 -:10BB4000504D280019001022F9F758F87D4F3800A1 -:10BB500001991022F9F752F82868012188432860DA -:10BB6000386801218843386010212800FBF749FD1F -:10BB700010213800FBF745FD3B002A000121009809 -:10BB800000F0AFFB002804D0012021E0641E002C4F -:10BB900015D00098FFF725FF0028F7D1002E08D018 -:10BBA00010212800FBF72CFD300029001022F9F7A6 -:10BBB00025F800F017F8012803D1032008E002203F -:10BBC00006E000F00FF8002801D1002000E004207A -:10BBD000FEBD0000C41A00282CD10010881B0028CC -:10BBE0000010224010B5274C10212000FBF708FD63 -:10BBF0002068000F0007A0210906884201D100201B -:10BC000009E02068000F0007F0210906884201D1F1 -:10BC1000012000E0022010BD50DB001054DB0010BA -:10BC20000000204000002240FFFFFF0F38B5040055 -:10BC3000FFF7D8FF05002800C0B2022801D1424812 -:10BC40000DE0002C04D0200027491022F8F7D6FF81 -:10BC5000EDB2002D01D1002001E02348006832BD83 -:10BC600000B5010F0907A0221206914201D1002060 -:10BC700006E0010F0907F0221206914200D0324877 -:10BC800000BD0000001B0028841B00281CB502001A -:10BC90000B002E4803C86C4603C4083C6C46638006 -:10BCA0002B4802606846F8F75DFF2A490020205EB5 -:10BCB000F8F777FF0220FFF765FE0F21264A136889 -:10BCC0001B0A0B40002B01D1002307E01268120A67 -:10BCD00011400E2901D1012300E00223002201219D -:10BCE0009940FFF765FE13BD001B002870B50026C4 -:10BCF00030000220FFF746FE04002000FFF763FE3D -:10BD000005000F2014490A68120A0240002A07D0D1 -:10BD10000968090A08400E2801D1012600E0022620 -:10BD20002800F040C00705D509480168002901D066 -:10BD3000006880472A0CA9B22000FFF746FE70BDBC -:10BD4000FFFFFF00201B0028FFFFFF0F90DA00100D -:10BD5000801B0028EDBC0010000020405048006807 -:10BD6000410B0800C007C00F70474D480068010B29 -:10BD70000800C007C00F704700B54A48012102689B -:10BD80000A43026002680A40002AFBD100BD1FB5C9 -:10BD90000400C9B2012921D168461021FAF7C6FC76 -:10BDA00069462000FFF721FE0100C9B2012901D137 -:10BDB0005B481BE00100C9B2022901D13A4815E0F5 -:10BDC000C0B2042801D1394810E0009800F01CF9F5 -:10BDD00000280BD1FFF7D0FF002007E02000FFF77D -:10BDE0005BFE002801D04E4800E0002004B010BDEA -:10BDF0007FB50C001500002C01D14A484DE02068A9 -:10BE000000F0F0F8012802D06068002801D1454810 -:10BE100043E068461021FAF789FC00980002000A06 -:10BE2000C021C90401430091227AFF2000023E494B -:10BE3000009B0B40120202401A430092637A009E5C -:10BE4000494A32401B04FF2636041E401643009622 -:10BE5000E27A019B19401202104008430190A07A37 -:10BE60000199FF229143C0B208430190207B0199C0 -:10BE70000902090A000608430190206802906068E0 -:10BE800003903A48A17A4900415A6068FBF7B9FB30 -:10BE90002900C9B26846FFF77AFF04B070BD000000 -:10BEA000000024400800244010005200FF0052000F -:10BEB00010B50400FFF752FF002810D1EC20000657 -:10BEC0002018C0218902884201D2002026E044487F -:10BED00020188021490288421FD200201EE0C02085 -:10BEE0004002EC2109066118814201D2002015E0D0 -:10BEF000802109026B4AA2188A4201D200200DE07B -:10BF0000EB221206A218824201D2002006E0664807 -:10BF10002018884201D2002000E0012010BD00005E -:10BF2000040052000F005200FF00FFFF10B5040094 -:10BF3000FFF714FF002807D1294820188021490263 -:10BF400088420FD201200EE080200002554961187E -:10BF5000814201D2012006E053496118814201D299 -:10BF6000012000E0002010BDFFFF00FFF0D900100D -:10BF700010B50400FFF7F9FE002810D1F0200006EC -:10BF80002018FE21C903884201D2002026E065481E -:10BF900020188021C90288421FD200201EE0FE2006 -:10BFA0008003F02109066118814201D2002015E0CA -:10BFB000802189025C4AA2188A4201D200200DE049 -:10BFC000EE221206A218824201D2002006E0574853 -:10BFD0002018884201D2002000E0012010BD00009E -:10BFE0000000FDEB10B504002000FFF761FF002802 -:10BFF00001D1002007E02000FFF7BAFF002801D19F -:10C00000002000E0012010BD80B5FFF729FE0028C8 -:10C0100001D1002044E04649884201D145483FE033 -:10C020004549401A1CD0801E1DD0401E1DD0401E08 -:10C030001DD0401E1DD0001F1DD087381DD0401EB2 -:10C040001DD012381DD0401E1DD0401E1DD0801E98 -:10C050001DD0801E1DD008381DD009381DD01EE00F -:10C06000A420C0031CE035481AE0354818E03548E4 -:10C0700016E0354814E0354812E0354810E0354800 -:10C080000EE035480CE035480AE0354808E0354810 -:10C0900006E0354804E0354802E0354800E0254830 -:10C0A00002BD00000080FEEB0080FEEA38B584B0DF -:10C0B0000C001500002C01D12E4831E02068FFF75C -:10C0C00091FF012801D12B482AE02078800701D078 -:10C0D000284825E068461021FAF728FB009800025E -:10C0E000000AA02149050143009120790099224AC4 -:10C0F0000A400002FF2109020140114300916079CA -:10C1000000994C4A0A400004FF21090401401143F0 -:10C110000091206801902900C9B26846FFF737FEF8 -:10C1200005B030BD000081EF0080C0EF0080C0EDA1 -:10C13000FFFFFF0FFF005200010000F0010052005E -:10C140000200520003005200040052000500520099 -:10C150000600520007005200080052000900520079 -:10C160000A0052000B0052000C0052000D00520059 -:10C170000E0052000F005200FF00FFFF38B588B0DC -:10C180000C001500002C01D12E4851E060680028F9 -:10C1900001D12C484CE02068FFF78AFE012808D026 -:10C1A0002068616889004018401EFFF781FE012861 -:10C1B00001D124483CE068461021FAF7B7FA00980C -:10C1C0000002000AA821890501430091206801901E -:10C1D0006068401E80B20299090C0904084302906D -:10C1E000EDB2012D1CD104A81021FAF79FFA04A981 -:10C1F0006846FFF7FAFB0100C9B2012901D11048D6 -:10C2000016E00100C9B2022901D10B4810E0C0B20A -:10C21000042801D109480BE00498FFF7F5FE07E078 -:10C220006846FFF739FC002801D0054800E00020EF -:10C2300009B030BDFFFF00FF10005200FF005200A8 -:10C24000040052000F00520080B5F8F7C4F900282E -:10C2500001D1002004E001201349087000F001F82A -:10C2600002BD80B510480078002805D0694604203A -:10C27000F8F740FA002801D1002004E06846008861 -:10C280000A490880012002BD08480088704780B52F -:10C29000064800880021064A0023F8F781F8054A7D -:10C2A0000023F7F78AFD02BD3E1C0028341C00283D -:10C2B00040787D0150FB4A00174A1268120C1204A4 -:10C2C00089B2114381607047C16070470161704756 -:10C2D00000B50068C00F002801D1104800E0002020 -:10C2E00000BDF8B507000C0015001E003800FFF770 -:10C2F000EFFF00280DD129003800FFF7E5FF3100DE -:10C300003800FFF7E3FF21003800FFF7D5FF0020DA -:10C3100000E00248F2BD00003CDB001001008A0092 -:10C32000F8B584B0F8F7F1FEBA490127086803228E -:10C33000904338430860B8480A6802400A60B74929 -:10C340000A6803239A433A430A600A6802400A6073 -:10C35000B3490A6803239A433A430A600A680240D1 -:10C360000A60B0490A6803239A433A430A600A689C -:10C3700010400860AC4801680F22914339430160C6 -:10C38000AA480168072291430160A9480168072271 -:10C39000914304220A4302600168F0229143C022C3 -:10C3A0000A4302600168C02292000A4302600168E9 -:10C3B000C02212010A43026001689E4A0A4080219D -:10C3C000490111430160E1480168802212060A43D5 -:10C3D0000260DF48016839400029FAD00168490845 -:10C3E00039400029FAD0DB480168DB4A0A40026084 -:10C3F000DA480168D84A0A408021490011430160A7 -:10C40000D7480168D44A0A4080214900114301609D -:10C41000D4480168D04A0A400260D3480168072224 -:10C42000914302220A430260D0480168490049084A -:10C430000160CF480168890A890229220A43026003 -:10C440000168CC4A0A4002600168802252040A4313 -:10C4500002600168C84A0A40026001688022120630 -:10C460000A430260C5480168C54A0A408021C900E4 -:10C47000114301600168FF229143AF220A43026029 -:10C48000802189020268BF4B13400B430360802266 -:10C4900092040368BC4C1C4014430460BB4B04680A -:10C4A0001C400460046880252D0625430560B848BB -:10C4B00004680725AC43022525430560B548046898 -:10C4C000240E2406B44D254305600468B34D254071 -:10C4D000802464052C430460046880252D062543D0 -:10C4E0000560AF480468640064080460AD4C8025B2 -:10C4F000AD002668A2483040284320602068FF260F -:10C50000B04362260643266026689E483040802657 -:10C51000F6020643266026689B48304002432260AC -:10C5200020681840206020688022120602432260A2 -:10C530009D4802680724A2430224144304609B48D8 -:10C5400002687F24A24328241443046002688C4CB0 -:10C5500014402C43046002688A4C1440214301605B -:10C560000168894A0A400260914902680A400260F3 -:10C5700002681A40026002688024240614430460A2 -:10C580008C4802680724A243022414430460B04884 -:10C5900002687F24A2431E24144304600268784C7E -:10C5A0001440254305600268764C1440C022920274 -:10C5B000224302600268744C144004600268114017 -:10C5C000016001680B4003600168802212060A4383 -:10C5D0000260A048006838400028FAD09E480068F1 -:10C5E00038400028FAD09D48006838400028FAD02A -:10C5F0009B48006838400028FAD09A480168072212 -:10C6000091430160684698491022F8F7DDFA002648 -:10C6100035E000BFC4132040FFFCFFFF00132040A3 -:10C6200080132040A0132040000024400015264025 -:10C6300044152640FF8FFFFF32200021F8F76EFCE3 -:10C64000300040B280002818016830229143220057 -:10C6500052B21201302313400B430360641E2000CA -:10C6600040B26946320052B25200895C00B209B24F -:10C670008842E1DA32200021F8F750FC761C3000C5 -:10C6800040B208283FD2300040B204280DD1EFF369 -:10C690001084002080F31088FA239B0000220121DF -:10C6A000102000F00BFA84F31088704D300040B277 -:10C6B0008000281801680F2291436A4633005BB25C -:10C6C0005B00D21852781207120F0A430260300042 -:10C6D00040B280002818016830220A43026030000E -:10C6E00040B2800028180168802252000A4302608C -:10C6F000300040B2800028180168802212060A43E8 -:10C7000002600224ABE75A48134A016811400160F5 -:10C71000F821C94303680B400360564803681A4078 -:10C720000260026811400160F8F7D0FC52480168CD -:10C73000802212060A43026001680F430760F8F77F -:10C74000BAFC00F039F805B0F0BD00BF1C1526405A -:10C750002415264010102040FF00FFFF0810204045 -:10C760000C102040200320400412264004192640CB -:10C7700008192640FFFFF8FFFFFFFFEF00192640D2 -:10C78000FFE0FFFFFFFFE0FFFFFFFFF9FFFFFFCF2D -:10C790000812264014192640F1D24D00FFFFFF8FEA -:10C7A00018192640101926400C1226400016264063 -:10C7B000FFFFFFF71012264038B586B068462F49B4 -:10C7C0001822F8F701FA6846FAF702FCC0B200280E -:10C7D0000ED02B4C18222B492000FAF78FFE002098 -:10C7E000E075FF20A830284908600020FAF7E6FE2F -:10C7F000264D2800FAF77EFEC0B200280ED0204C4D -:10C80000182220492000FAF779FE0020E075FF2069 -:10C81000AA301D4908600020FAF7D0FE1C4C286899 -:10C82000206020681B4940181B49F7F7CBFB1B49C8 -:10C8300008601B4D20681B494018FA218900F7F752 -:10C84000C1FB28602868C0031749086007B030BDE5 -:10C85000041626400C1926401C1926404016264076 -:10C86000441626401412264054DA00104012264086 -:10C87000080020400804204008152640C4D90010B4 -:10C88000C41A002874D40010881B0028201C00281B -:10C89000241C00283F420F0040420F002C1C00289F -:10C8A000281C0028E7030000301C0028F3B595B0D1 -:10C8B000170000210D000800684601801C00A4B28A -:10C8C000A408200080B280218900884203D301257A -:10C8D000684604807E4C1C9E00F011F9002800D0B0 -:10C8E00099E06846877016A8077801A81021F9F723 -:10C8F0001DFF0198022188433100C9B2490002227C -:10C90000114001430191019804218843FFB2B9000D -:10C91000042211400143019101980821884369468E -:10C920008978C90008221140014301910198102122 -:10C93000884301900198202188430190019840216B -:10C94000884301900198802101430191614F019832 -:10C95000384015A909780902F82252010A40024319 -:10C96000019201985C490140019101980002000A7E -:10C97000A82149050143019111A81021F9F7D6FE1C -:10C980001198800A8002A4B2A105890D014311917A -:10C9900052480068002806D101980740D020400185 -:10C9A0003843019007E0002805D001980740802017 -:10C9B000400138430190002211A901A8FFF79FF818 -:10C9C000EDB2002D03D06846008800F08DF809A86C -:10C9D0001021F9F7ABFE099802218843F6B27100E5 -:10C9E000022211400143099109983D4901400991F2 -:10C9F00009983C4901408020400208430990099869 -:10CA00000002000A8821490501430991002109A873 -:10CA1000FEF7EBFF50E000F07DF80128FBD000F0BE -:10CA200073F80128F7D10DA81021F9F77FFE0DA8A2 -:10CA30000078FD2101400DA801700DA800780C219F -:10CA400001430DA801700D980002000AB0214905AC -:10CA500001430D9100210DA8FEF7C7FF00F054F827 -:10CA6000002829D1EDB2002D03D06846008800F0DF -:10CA70003BF805A81021F9F759FE059802218843D3 -:10CA8000F6B2710002221140014305910598144944 -:10CA90000140059105981349014080204002084358 -:10CAA000059005980002000A882149050143059177 -:10CAB000002105A8FEF799FF17B0F0BD1CB50124B1 -:10CAC00000949BB2D2B2C9B2C0B2FFF7EFFE13BD61 -:10CAD000FF010000FFE0FFFFFF1FFFFF300700170F -:10CAE000FF00FFFFFFFF00FF0D490A680D4B1340D9 -:10CAF00080B200050C4A02401A430A607047084899 -:10CB00000068C00FC0B27047084801680800C0073D -:10CB1000C00F704705480068C00FC0B270470000E2 -:10CB200028102640FFFF0FC00000F03F2C102640C9 -:10CB300000B5010009B2002905D40121C006C00ECC -:10CB400081408F48016000BDF0B5020012B2002A9A -:10CB500018D418228B4B040024B2A408A4001C593A -:10CB6000FF250600F6001640B540AC438901C9B266 -:10CB70000500ED002A409140214300B2800880006A -:10CB800019501CE00F22804C182503001BB21340E3 -:10CB9000083B9B089B00060036B23240083A9208D8 -:10CBA0009200A258FF260700FF002F40BE40B2436C -:10CBB0008901C9B2C0000540A9401143E150F0BD50 -:10CBC00080B500F012F87148714902680A400260AD -:10CBD000704802680A4002606F48026811400160B4 -:10CBE00000F092F800F0A9F801BDFEB568466B4967 -:10CBF0000CC90CC008390838002630000AE06A4623 -:10CC00000300DBB2DB00D2185268521C114000292D -:10CC10000ED1401C0100C9B200290AD107216A4681 -:10CC20000300DBB2DB00D2580A40002AE7D0FEE75F -:10CC3000FEE75B4C072021680140002900D0FEE799 -:10CC4000584F3968491C0840002800D0FEE73500DD -:10CC500024E068462900C9B2C90040184168684606 -:10CC60002A00D2B2D200805800F044F815E030001B -:10CC70000028EED02168491E68462A00D2B2D200B0 -:10CC8000805800F037F868462900C9B2C90040183A -:10CC900041683868401C00F02DF86D1C2800C0B2B7 -:10CCA000002826D168462900C9B2C900405800288A -:10CCB00014D0206869462A00D2B2D200895888422E -:10CCC0000AD368462900C9B2C900401840682168E3 -:10CCD000884201D30120CBE73000C9E7684629002C -:10CCE000C9B2C9004018406821688842BFD30120FA -:10CCF000BEE7F7BD80B50022002302E00CC0083873 -:10CD000008308842FAD301BD30B52748800827494A -:10CD1000274A002308E01C00E4B2A40014591D00B7 -:10CD2000EDB2AD004C515B1C1C000500E4B2EDB24D -:10CD3000AC42F0D31F48016030BD10B51023112163 -:10CD40001A4800221C00E4B2A4001459DBB29B0074 -:10CD5000C4500B00DBB29B00D258C9B289004250CC -:10CD600001210020FFF7F0FE00210120FFF7ECFE7B -:10CD70000020FFF7DDFE0120FFF7DAFE10BD000006 -:10CD800000E100E000E400E01CED00E000132040C2 -:10CD9000FFFFF7FF80132040A0132040A8DA001007 -:10CDA0006CD4001070D4001080000000001D00281A -:10CDB0000000001008ED00E000B5010009B20029F4 -:10CDC00005D40121C006C00E81404A48016000BD63 -:10CDD00000B5FEE780B54848006848480068C10FC4 -:10CDE000002905D046498005800D800008588047FD -:10CDF0000020FFF7E1FF01BD80B5424800684248CE -:10CE00000068C10F002905D03D498005800D8000D4 -:10CE1000085880470120FFF7CFFF01BD80B53B4890 -:10CE200000683B480068C10F002905D034498005DF -:10CE3000800D8000085880470220FFF7BDFF01BD2C -:10CE400080B53448006834480068C10F002905D017 -:10CE50002B498005800D8000085880470320FFF78C -:10CE6000ABFF01BD80B52D4800682D480068C10F9B -:10CE7000002905D022498005800D80000858804790 -:10CE80000420FFF799FF01BD80B5264800682648B9 -:10CE90000068C10F002905D019498005800D800068 -:10CEA000085880470520FFF787FF01BD80B51F4860 -:10CEB00000681F480068C10F002905D0104980058F -:10CEC000800D8000085880470620FFF775FF01BDE0 -:10CED00080B51848006818480068C10F002905D0BF -:10CEE00007498005800D8000085880470720FFF71C -:10CEF00063FF01BD80E200E01CDB00100011204058 -:10CF00004809002820DB00100411204024DB001019 -:10CF10000811204028DB00100C1120402CDB0010F1 -:10CF20001011204030DB00101411204034DB0010C1 -:10CF30001811204038DB00101C112040ACD8001024 -:10CF400004DA0010800231400400000008000000F4 -:10CF5000800658403A0100000009314002000000FC -:10CF60000A0F0D07E0010000FC53000098210000AB -:10CF7000F4010000E8030000F401000038D90010BB -:10CF800014DA0010800231400500000008000000A3 -:10CF9000000758403B01000000053140010000003F -:10CFA0000AF0D07076010000E0150000D4170000F0 -:10CFB0005E010000E8030000F401000054D90010F5 -:10CFC00024DA0010000431400000000008000000D6 -:10CFD0008009584040010000000731400000000077 -:10CFE000090F0D0795030000901A00002823000088 -:10CFF000F4010000E8030000F401000070D9001003 -:10D0000034DA001080003140000000000800000009 -:10D0100000065840390100000006314005000000BC -:10D0200009F0D07087020000201C00009821000049 -:10D03000F4010000D0070000F401000080B5F4F70F -:10D0400024F9FCF773F9FCF761F8FA208000F7F790 -:10D05000A5FFF4E710B5FEF73BFBFEF777F8FFF707 -:10D060005FF9F4F712F9FEF733FB002803D0FEF75F -:10D070006DF8002801D1FFF7E1FF204C00F042F8E5 -:10D08000206000F042F82068FBF7DEFFFCF76EF846 -:10D09000002801D0FFF7D2FF62B6194CF6F7F8FD71 -:10D0A00020602068002804D00120FCF737F8FFF743 -:10D0B000C5FF0120F5F7E1FDFCF778F8002804D161 -:10D0C0000120FCF72BF8FFF7B9FFF8F741F800282B -:10D0D00001D1FFF7B3FFF8F78AF8FCF7C7F8FCF7C0 -:10D0E00045F8002803D0F4F7D0F8FCF71FF9FCF757 -:10D0F0000DF8FA208000F7F751FFECE78C1B0028B1 -:10D10000281200280648006870470020C0430449E0 -:10D110000860044908600020034908607047000067 -:10D12000001826400418264008102640443A5C683F -:10D1300075616E672E7875657765695C4769745CA3 -:10D14000436F676E69746976655F4167656E745C8D -:10D150002E636F6465785F746D705C736561742DA8 -:10D160006669726D776172652D6275696C642D6494 -:10D17000636532383438396139643334386432386D -:10D180003933353239353533343638336466375CC4 -:10D19000636F6D6D6F6E5C7372635C6472697665EC -:10D1A00072735C6970635C63795F6970635F6472FA -:10D1B000762E6800F1B401684118436858080A18CF -:10D1C00000988068DB0701D54B46C01891422DD0EE -:10D1D0000D78491C032403262E4002D10E78F61C3C -:10D1E000491C2B090F2B07D10B780F33491C03E087 -:10D1F0000F78491C0770401C761EF9D1002BE5D032 -:10D200000E78491CAD082C40032C01D10C78491C28 -:10D2100024023419654244190025AE1E9E42D5D021 -:10D220002678641C0670401C6D1CF6E700980C30D4 -:10D23000F2BC70470005314006000000000000000D -:10D2400080189040020000000006314001000000FC -:10D25000000000004019904005000000000531402A -:10D260000700000000000000C0189040030000000C -:10D27000000531400500000000000000401890400B -:10D280000100000000063140020000000000000024 -:10D2900080199040060000000006314006000000A2 -:10D2A00000000000801A90400A0000000400000006 -:10D2B0000000000000000000000000000100030367 -:10D2C0001F4E0000000000000000000000000000F1 -:10D2D000000000000000000000000000000000004E -:10D2E0000000000000000000000000000203000039 -:10D2F0000000000003000000000000000300000028 -:10D300000000000003000000000000000300000017 -:10D310000000000003000000010000000102000006 -:10D3200004000000000000000000000000000000F9 -:10D33000010003031F4E0000000000000000000079 -:10D34000204E00000000000000000000000000006F -:10D3500000000000000000000000000000000000CD -:10D3600002030000000000000300000000000000B5 -:10D3700003000000000000000300000000000000A7 -:10D380000300000000000000030000000100000096 -:10D390000102000004000000000000000000000086 -:10D3A0000000000001000303630000000000000013 -:10D3B000000000003200000000000000000000003B -:10D3C000000000000000000000000000000000005D -:10D3D0000000000002030000000000000300000045 -:10D3E0000000000003000000000000000300000037 -:10D3F0000000000003000000000000000300000027 -:10D40000010000000102000072B6104810490860D7 -:10D41000BFF34F8F0120C0040E490A6802430A601F -:10D420000D490A6802430A600C490A6802430A600F -:10D43000002000210D4A03C26A45FCD1084FB847BD -:10D44000084FB847084FB847FEE70000000000103B -:10D4500008ED00E00013204080132040A01320407E -:10D46000C1CB001045D80010A9D9001000FF012839 -:10D47000FFFF0128443A5C6875616E672E78756518 -:10D480007765695C4769745C436F676E6974697638 -:10D49000655F4167656E745C6669726D7761726520 -:10D4A0005C7432675C747669696268386D5C73724B -:10D4B000635C73797374656D5C7265765F645C73CD -:10D4C000797374656D5F747669696268386D5F63DE -:10D4D0006D30706C75732E6300000000443A5C6818 -:10D4E00075616E672E7875657765695C4769745CF0 -:10D4F000436F676E69746976655F4167656E745CDA -:10D500006669726D776172655C7432675C747669A6 -:10D51000696268386D5C7372635C647269766572A7 -:10D52000735C737973636C6B5C63795F737973633A -:10D530006C6B2E6800000000443A5C6875616E6791 -:10D540002E7875657765695C4769745C436F676EB3 -:10D5500069746976655F4167656E745C6669726D52 -:10D56000776172655C7432675C7476696962683889 -:10D570006D5C7372635C647269766572735C7379F7 -:10D5800073636C6B5C63795F737973636C6B2E632D -:10D5900000000000443A5C6875616E672E7875651E -:10D5A0007765695C4769745C436F676E6974697617 -:10D5B000655F4167656E745C6669726D77617265FF -:10D5C0005C7432675C636F6D6D6F6E5C7372635C0D -:10D5D000647269766572735C7379737469636B5C8A -:10D5E00063795F7379737469636B2E630000000065 -:10D5F000443A5C6875616E672E7875657765695C1D -:10D600004769745C436F676E69746976655F4167EB -:10D61000656E745C6669726D776172655C743267A1 -:10D620005C636F6D6D6F6E5C7372635C6D775C666F -:10D630006C6173685C63795F6D775F666C6173685A -:10D640002E6300009F0F000000000000000000009B -:10D6500000000000000000000000030000000000C7 -:10D6600000000000000000000003000000000000B7 -:10D6700003000000000000000300000000000000A4 -:10D680000300000000000000030000000100000093 -:10D690000000000001000000000000000000000089 -:10D6A0001000000010000000100000000100000148 -:10D6B000000000000000000000000000000000006A -:10D6C000000000000000000000000000000000005A -:10D6D00070B40123002413E00168001D194202D038 -:10D6E0004D466918491E0C60091D121F042AFAD202 -:10D6F0000D00960701D50C80AD1C1A4000D02C708F -:10D700000268001D002AE7D170BC704700000000CD -:10D710000600000000000000000000000000000003 -:10D7200000000000000000000000000000000000F9 -:10D7300000000000000000000000000000000000E9 -:10D7400000000000060000000000000000000000D3 -:10D7500000000000000000000000000000000000C9 -:10D7600000000000000000000000000000000000B9 -:10D77000000000000000000008000000150000008C -:10D780000000000000000000000000000000000099 -:10D790000000000000000000000000000000000089 -:10D7A0000000000000000000010000000E0000006A -:10D7B0001500000000000000000000000000000054 -:10D7C0000000000000000000000000000000000059 -:10D7D0000000000000000000000000000100000048 -:10D7E0000600000000000000000000000000000033 -:10D7F0000000000000000000000000000000000029 -:10D800000000000000000000000000000000000018 -:10D810000000000006000000000000000000000002 -:10D8200000000000000000000000000000000000F8 -:10D8300000000000000000000000000000000000E8 -:10D840000000000010B5074979441831064C7C44AB -:10D85000163404E0081D0A68891888470100A142AF -:10D86000F8D110BD080000002400000065FEFFFF95 -:10D8700068090000081300280000000039F9FFFFC4 -:10D880003E030000380100000008002800000301EA -:10D890000000000001000000000000000000000087 -:10D8A00001000000FF0F0100000000004D4F544F29 -:10D8B000525F494E325F4842375F4842385F484FB7 -:10D8C00052495A4F4E54414C00000000042071460A -:10D8D000084202D0EFF3098001E0EFF3088000B5C1 -:10D8E0000149884700BD0000C375001000F00EF824 -:10D8F000002801D0FFF7A6FF00BF00BF002000BF37 -:10D9000000BFFFF7A7FB00F003F8000000207047FE -:10D9100080B500F001F801BD0746384600F002F876 -:10D92000FBE7000080B500BF00BF024A11001820CD -:10D93000ABBEFBE7260002004D4F544F525F494EED -:10D94000335F4842355F4842365F534541545F502C -:10D95000414E00004D4F544F525F494E345F484294 -:10D96000335F4842345F4241434B524553540000B9 -:10D970004D4F544F525F494E315F4842315F4842EC -:10D98000325F4C4547524553540000000420714615 -:10D99000084201D0EFF30980EFF3088000B5014998 -:10D9A000884700BD65DA00100548014603B46846A3 -:10D9B00080F3098800BF00BF00BF00BFFFF796FFDC -:10D9C000A5EDF5FE00127A00000000000024F4002E -:10D9D0000080000000800000008000009E029E0A7F -:10D9E000AA02AA0ACE03CE0B2A042A0C0003000BBB -:10D9F0000100020004000800100020004000800028 -:10DA000000010002484F52495A4F4E54414C5F4862 -:10DA1000414C4C00534541545F50414E5F48414C8E -:10DA20004C0000004241434B524553545F48414C27 -:10DA30004C0000004C4547524553545F48414C4C04 -:10DA400000000000E02E0000401F0000E02E00005B -:10DA5000102700000003000100040103020200027D -:10DA6000000300058169891E0978C9B20160704709 -:10DA7000000000000001010101010100000100009F -:10DA80000203040506080C1000000000000000005E -:10DA9000020000000100000004030001131400153F -:10DAA000C70103000100000000080028FFFF012853 -:10DAB0000000000000000000000000000000000066 -:10DAC0000000000000000000000000000000000056 -:10DAD0000000000000000000000000000000000046 -:10DAE0000000000000000000000000000000000036 -:10DAF0000000000000000000000000000000000026 -:10DB00000000000000000000000000000000000015 -:10DB10000000000000000000000000000000000005 -:10DB200000000000000000000000000000000000F5 -:10DB300000000000000000000000000000000000E5 -:10DB400000000000000000000000000000000000D5 -:10DB500000000000000000000000000000000000C5 -:10DB600000000000000000000000000000000000B5 -:10DB700000000000000000000000000000000000A5 -:10DB8000000000000000000000000000000102038F -:10DB90005A5A5A5AFEE70000FEE70000FEE700006E -:10DBA000FEE70000FEE70000FEE70000FEE70000E1 -:10DBB000FEE70000FEE70000FEE70000FEE740048D -:10DBC000550002000100015003D58E001000012312 -:10DBD0008D8F0CA0040900040101000112050E83C1 -:10DBE000DCD9286004FFFFFF1F020225920807F01E -:10DBF000010352400001F2060218F2060418F20670 -:10DC00000618F2060818F306005478F10618F20612 -:10DC10000418F2060618F2050818F002FFD1CD002C -:10DC20001004F1FF04F1FF04F1FF04F1FF04F1FF20 -:10DC300004F1FF04F1FF04F147046C0248090028D5 -:10DC4000060AF321060001F12334F25208680008A5 -:10DC500001010102030203010F0F00000000000098 -:10DC600000000000000000000000000000000000B4 -:10DC700000000000000000000000000000000000A4 -:10DC80000000000000000000000000000000000094 -:10DC90000000000000000000000000000000000084 -:10DCA0000000000000000000000000000000000074 -:10DCB0000000000000000000000000000000000064 -:10DCC0000000000000000000000000000000000054 -:10DCD0000000000000000000000000000000000044 -:10DCE0000000000000000000000000000000000034 -:10DCF0000000000000000000000000000000000024 -:10DD00000000000000000000000000000000000013 -:10DD10000000000000000000000000000000000003 -:10DD200000000000000000000000000000000000F3 -:10DD300000000000000000000000000000000000E3 -:10DD400000000000000000000000000000000000D3 -:10DD500000000000000000000000000000000000C3 -:10DD600000000000000000000000000000000000B3 -:10DD700000000000000000000000000000000000A3 -:10DD80000000000000000000000000000000000093 -:10DD90000000000000000000000000000000000083 -:10DDA0000000000000000000000000000000000073 -:10DDB0000000000000000000000000000000000063 -:10DDC0000000000000000000000000000000000053 -:04DDD000000000004F -:040000051000D9A965 +:100F700070BD0000F01B002870B50026340019E099 +:100F800030009021685430009121685411E0300005 +:100F9000912168548220285C00280AD1C348006847 +:100FA000E96B401A9949884203D305212000FFF7D5 +:100FB000E9FC641C042C00D387E028488421490004 +:100FC000614345182000FFF75CFF7E20285C002865 +:100FD00007D08220285C002803D18C20285C0028C0 +:100FE00000D1E6E783204000285C00280AD0F320E7 +:100FF000285C002806D130009021685430009121EF +:101000006854D6E78B20285C002814D0300090214B +:101010006854300091216854286F00280AD17E203E +:10102000285C022801D1022100E00321C9B220007E +:10103000FFF7A8FCBDE7286F0328A1D22000FFF727 +:1010400089FBC0B200280BD07820285A3349A2016E +:101050008918898F884203D3012002E008130028F1 +:1010600030009021695C00290BD101219022A95404 +:101070008E490968E9636968296431009122A9549D +:1010800008E069682A6C914204D06968296487493C +:101090000968E963C0B2002800D178E79120285C94 +:1010A000002806D1012091216854804800686864B6 +:1010B00070E77E480068696C401A642800D269E7CE +:1010C00004212000FFF75EFC64E770BD38B59E4C3C +:1010D000200003F0C9FD00281BD0200003F0C9FD4B +:1010E00072480168491C01600024250003E02800C3 +:1010F000FFF732FE6D1C042DF9D3FFF784FCA748DF +:101100000168491C01600168192902D30460FFF7D6 +:1011100033FF31BD8D48006870470000ACDC001023 +:10112000CF07000070B528250026340009E0022210 +:1011300001219B48A301C0181823C05EFFF742F9A4 +:10114000641C042CF3D302220121FF204230FFF75C +:1011500039F9934C1820205EFFF730F92B005B1E05 +:1011600002220121C0B2FFF76BF81820205EFFF7C2 +:1011700025F902220121C0B2FFF764F9350011E020 +:101180008849A8012018406903F008F8A801201830 +:10119000406903F083F90021A8012018406903F099 +:1011A0008EF96D1C042DEBD3012420007E490870BC +:1011B0003E48066079480660634E7C49300003F083 +:1011C0003BFC300003F055FD300003F047FD784D47 +:1011D000280003F057FD77490020285E03F071FDD9 +:1011E00003210220285EFEF763FF0220285EFEF73F +:1011F00053FF0220285EFEF743FF300003F028FD76 +:10120000300003F00CFCAD48047070BDC409000050 +:10121000F8B500220121AA48FFF765F90122022151 +:10122000A848FFF760F900220121A748FFF75BF902 +:10123000A64D012201212800FFF755F900220021C7 +:10124000A348FFF750F9A34C002204212000FFF728 +:101250004AF9002205212000FFF745F9002200216C +:101260002800FFF740F9FFF705FC9B480090082095 +:1012700000990860994E13243470994FC14A002197 +:10128000380002F0F4FE0625009805603470BD4A6F +:101290000121380002F0EBFE009805603470B94A75 +:1012A0000221380002F0E3FEF1BD0000F01B00282F +:1012B00078B58DB06846B449342203F015FD3A483C +:1012C000007800280BD0B14803F0AFFBB04803F022 +:1012D000ACFBB04803F0A9FBAF4803F0A6FB7C4E83 +:1012E0006A460021300002F0C2FE7A4D6A460421AF +:1012F000280002F0BCFE6A460521280002F0B7FE75 +:10130000724C6A460021200002F0B1FE002130003C +:10131000FEF714FF04212800FEF710FF0521280026 +:10132000FEF70CFF00212000FEF708FF01200090CF +:101330006A460121200002F09AFE01212000FEF7FA +:10134000F9FE0EB070BD0000000A5840F01B0028E6 +:101350001CB591246400012203212000FFF732F81C +:10136000012000908D4A00238D480021FFF79AF854 +:101370002000FFF723F801220321C0B2FFF762F833 +:10138000884C200003F012FE00228749200003F061 +:10139000D3FC2000FEF720FF13BD0000F41B002843 +:1013A000ACDC001004E10010AE1C0028B4E3001017 +:1013B000A0E80010CD100010F2B5060000273C0098 +:1013C0000098002801D1002077E0380000990880BB +:1013D00003F01EFBCD490978002903D003F01CFB64 +:1013E00000206AE00121C94A117003F015FB6D4D20 +:1013F0002800FEF7FBFE2800FEF700FF022131481F +:10140000FEF79CFE012003F059FEB6B23100280021 +:10141000FEF7FCFE01283ED1BD4E00E0761E2800FE +:10142000FEF7E8FE002801D1002EF7D12800FEF7D4 +:10143000E1FE00282FD0B64E00E0761E2800FEF711 +:10144000D1FE002801D1002EF7D12800FEF7CAFEF8 +:10145000002820D0012200992800FEF7D3FE0128A1 +:1014600019D1C0200002009909880140814201D1B0 +:10147000012400E03C002000C0B200280BD0A548A9 +:101480000078002807D000980088FC2189010140DD +:10149000002900D03C00012003F010FE0221094881 +:1014A000FEF748FE012003F009FE03F0B1FA974968 +:1014B0000F7003F0B1FA2000C0B2F2BDAD1C0028DD +:1014C00080013140800F31408004314000043140C0 +:1014D00080003140800231406412002868120028E8 +:1014E0000003314080B5C0B20202FC2080011040F0 +:1014F000C9B20843694680B2FFF75EFF02BD1CB562 +:101500000C00C0B20002FC21890101408020C00112 +:101510000843002C05D0694680B2FFF74DFF002834 +:1015200001D1002003E0684600882070012016BD2C +:1015300038B505000C002100C9B22800C0B2FFF781 +:10154000D1FF002801D100200FE069462800C0B279 +:10155000FFF7D5FF002806D068460078E4B2A04225 +:1015600001D1012000E00020C0B232BD80B5B44AF4 +:1015700000211160017C1172C168806802F077FD62 +:1015800001BD00006012002880E5001000065840F0 +:1015900080065840000758408009584000B4C404F1 +:1015A0000024F4000000644004E40010F8B50126B3 +:1015B0003000002468460470564804700121A14898 +:1015C000FEF7B8FDC24F01213800FEF7B3FD9E4D76 +:1015D000280003F073FD01219C48FEF7ABFD2800B5 +:1015E00003F06CFD02210820FFF7A2FF0500280090 +:1015F000C0B2002804D000210920FFF799FF0500A0 +:101600002800C0B2002804D000210A20FFF790FF74 +:1016100005002800C0B2002804D00F210B20FFF7DE +:1016200087FF05002800C0B2002804D0A5210C20A7 +:10163000FFF77EFF05002800C0B2002804D000217B +:101640000D20FFF775FF05002800C0B2002804D068 +:1016500000210E20FFF76CFF05002800C0B2002813 +:1016600008D087210720FFF73DFF0500FA20800002 +:1016700003F024FD2800C0B2002804D086210720F2 +:10168000FFF756FF05002800C0B200280ED06946BB +:101690000020FFF734FF002807D068460078BF21FC +:1016A0000140802901D1350000E025002800C0B2AA +:1016B000002810D0A1480470A1480470B9480470F3 +:1016C00014480670B8480068B8490860012138001D +:1016D000FEF734FD07E0B34806700E4804700121A0 +:1016E0003800FEF727FD2800C0B2F2BD10B5040097 +:1016F000534A002010601072E168A06802F0B7FC45 +:10170000E168A068FEF71AFD10BD0000B21C0028B9 +:10171000A0860100B51C0028F8B501242000A149CD +:10172000087000252800A949087001216848FEF7C3 +:1017300001FD2E000FE0A6480078002805D0A5483E +:10174000B1014018406903F070F9A248B101401896 +:10175000FFF7CCFF761C042EEDD303F059F900906F +:10176000280044E02A0011E0B84984225200424394 +:1017700089188A228A5C002A07D197228A5C002A6B +:1017800003D198228A5C002AECD022002B007E260E +:101790008B552B007F268B552B0080268B552B00DD +:1017A00082268B55072383268B552E008A27CE55FC +:1017B0002E008B27CE552E009427CE552E00952730 +:1017C000CE552E009627CE552E009727CE552E00AB +:1017D0008927CE55D2B2002A08D084228B549C226D +:1017E0008A58A023CA5022009823CA54401C0428B7 +:1017F000BAD3009803F010F9F1BD80B573480078B2 +:1018000000280AD067480078002806D16748664952 +:101810000A680368D21A192A00D20FE00968016029 +:1018200069460020FFF76BFE002805D06846007867 +:10183000BF210140802901D0FFF76EFF01BD0000EC +:10184000C812002880013140102700008004314078 +:1018500070B5604A80011018524A1278002A01D0EF +:10186000002034E02422825C092A14D1334D2A78E6 +:101870002523C35C9A432523C45C0C4014432100F8 +:10188000C9B20920FFF754FE06003000C0B200289C +:1018900015D02C7013E02A4D2A782523C35C9A4377 +:1018A0002523C45C0C4014432100C9B20A20FFF771 +:1018B0003FFE06003000C0B2002800D02C7030007F +:1018C000C0B2002801D1FFF727FF3000C0B270BDC1 +:1018D0000004314038B504003E48A101451868694C +:1018E00003F0A3F82800FFF701FF00212000FFF715 +:1018F000AFFF32BD70B505003648AA018618C9B2DF +:10190000012902D12620345C01E02720345C0F201D +:10191000E840C00701D400200FE0706903F085F8AB +:101920003000FFF7E3FE2100C9B22800FFF790FF67 +:10193000002801D1002000E0012070BDAB1C002870 +:10194000AC1C002870B504002248A10145183F488E +:101950008421490061434018F421465C83214900F9 +:10196000415C00290AD08B21415C002906D1F2217B +:10197000465C3100C9B2322900D23226F3214654E6 +:10198000FEF712FE3100C9B22000FEF7FAFD002179 +:10199000686902F094FD686903F041F82800FFF7D8 +:1019A000E5FD70BDAF1C0028F01B0028F81B0028C7 +:1019B00000B50A00D2B2002A07D081228154AD4975 +:1019C0000968016201219522815400BDB51C0028DF +:1019D000AE1C0028ACDC0010842281549C214158AC +:1019E000A0228150012198228154704700B59C218A +:1019F0004158491C9C2281509C214158002902D108 +:101A000001219C22815000210A008423C254A0227B +:101A100081509822815400BD00B58B21415C002982 +:101A200004D08169002901D0816900E092499622A1 +:101A3000825C002A07D08F4A12684069101A8842D7 +:101A400001D3012000E00020C0B200BD081300282F +:101A500080B500217E2281547F22815480228154CE +:101A6000942281549522815481228154962281545A +:101A70008A22815497228154012183228154012199 +:101A8000FFF7AAFF01BDF3B583B07C480399842218 +:101A90005200514344180020694608700025002078 +:101AA000694648700027002069468870002602F0C9 +:101AB000AFFF01909420205C00284DD08220205C54 +:101AC000002849D16E480078002845D12000FEF753 +:101AD00028FD002840D06846007CC0B2002809D00C +:101AE00064480068E169401A322835D39520205CAB +:101AF000002831D12000FFF78FFF002804D00521F6 +:101B00000398FEF73FFF27E08A20205C002808D0DA +:101B1000A0682169884204D12000FFF799FF0127BE +:101B20001AE08A20205C002807D0A068216988423A +:101B300001D2012003E0022001E08020205C694600 +:101B4000087068460078002803D001206946487074 +:101B500002E0002069464870019802F05DFF3800FD +:101B6000C0B2002803D00398FFF7B4FE80E06846B7 +:101B70004078002801D100207AE068460178039877 +:101B8000FFF7B8FE002801D1002071E002F040FF0D +:101B900001909420205C002856D08220205C0028F0 +:101BA00052D13748007800284ED12000FEF7B9FC0A +:101BB000002849D02000FFF72FFF002804D005217E +:101BC0000398FEF7DFFE3FE08A20205C002810D05B +:101BD000A0682169884204D12000FFF739FF01275E +:101BE00009E0A0682169884201D2012503E00225AD +:101BF00001E08020255C3800C0B200281CD12800FC +:101C000069460978C0B2884216D1684600787E21BC +:101C100060540020802160549421605495216054C8 +:101C2000812160542000FEF75FFD0398FFF78AFED4 +:101C300001266846867007E0FFB2002F03D180209E +:101C40002554012600E00126019802F0E5FE6846D1 +:101C5000807800280AD10A480078002804D1039827 +:101C6000FFF738FE002801D1002001E03000C0B2AB +:101C700005B0F0BDF01B0028B8880000081300284C +:101C8000AF1C0028F6B583B00D001F000400E4B2BD +:101C90009C490978002916D0C0B2FEF72FFC002815 +:101CA00011D09948007800280DD198480078002874 +:101CB00009D16846057068460078012805D0684655 +:101CC0000078022801D001201AE102F0A1FE019063 +:101CD000842676008E4D2000704328188221405CB7 +:101CE000002806D1200070432818FEF71AFC0028AF +:101CF00004D1019802F090FE012001E12000704320 +:101D000028187E21415C0CA80078002813D10CA86B +:101D100001700CA8007800280DD12000704328180D +:101D20009522805C002806D020007043281881226C +:101D3000805C0CAA10700800C0B2002803D00120FB +:101D40006A46507002E000206A4650700CA8007885 +:101D500000280CD0C9B2002905D00CA8007869462B +:101D60000978884203D001206946887002E000208B +:101D70006946887068464078002805D0C548A101AA +:101D80004018406902F051FE0A9902976846027CA9 +:101D900000272000704328188223C7542000704376 +:101DA00028187F23C7542000704328188A23C25460 +:101DB000029B2000704328180361200070432818FC +:101DC0008B23C15420007043281897214754D2B266 +:101DD000002A08D00BA80078002804D02000704307 +:101DE0002818FFF703FE0D98C0B2002806D0200087 +:101DF000704328189621405C002810D1A64801683D +:101E000020007043281841610121200070432818E8 +:101E100096228154200070432818862147540BA82D +:101E20000078002804D020007043281883214754EC +:101E30006846807800281ED02000704328187E2134 +:101E40004754684601782000704328188022815446 +:101E500091480168200070432818C16101212000C9 +:101E600070432818942281540CA801786643A8195D +:101E7000FFF79EFD20E02000704328187E21475484 +:101E800068460178200070432818802281548248D7 +:101E90000168200070432818C161012120007043AF +:101EA0002818942281542000704328189521475403 +:101EB0006643A81981214754019802F0ADFD684698 +:101EC000407800280CD07348A1014018FFF70EFCA1 +:101ED00000212000FFF7BCFC002801D101200FE009 +:101EE00068468078002801D0002009E00021200009 +:101EF000FFF7C9FD002801D0380000E00120C0B282 +:101F000005B0F0BDAD1C0028B01C0028AF1C002897 +:101F10000813002880B50121FFF7B5FD01BDF1B51B +:101F200086B05E4806998422520051434418002727 +:101F3000002502F06DFD01908220205C694608704A +:101F400068460078002803D1019802F065FD9EE004 +:101F50007F20205C694608748B20205C69464870AD +:101F60009720205C694688700026300082216054EA +:101F700030007E21605430007F2160543000802189 +:101F8000605430009421605430008A2160546846C7 +:101F90000078832160543000972160546846017CAA +:101FA0002000FFF705FD68468078002804D06846C9 +:101FB00001782000FFF710FD6846007802280FD155 +:101FC00001252F0068464078002807D19220205C28 +:101FD000002803D08620205C002830D035002EE079 +:101FE00068460078032810D1022768464078002808 +:101FF00009D19220205C002805D08620205C002892 +:1020000001D101251BE0350019E06846007804285D +:1020100015D16846007C012801D1022700E0012784 +:1020200068464078002809D19320205C002805D01C +:102030008620205C002801D1012500E03500280021 +:10204000C0B2002805D08620205C401C8621605448 +:1020500001E096202654019802F0DEFC0698FFF776 +:1020600039FC002813D0EDB2002D10D001200390D0 +:102070006846007C02900020019000200090002320 +:1020800000223900C9B20698C0B2FFF7FBFD07B0C5 +:10209000F0BD0000ACDC0010F01B00280813002885 +:1020A000F1B584B0B14804998422520051434518D7 +:1020B00002F0AEFC0090AE48046883204000285C2B +:1020C000002818D07E20285C002814D08B20285CA3 +:1020D000002810D19420285C00280CD18220285C94 +:1020E000002808D1A3480078002804D1C02028582F +:1020F000201A322803D2009802F08EFC34E12868BE +:102100000190F020285CF121695C05290AD2C421E4 +:1021100069580391BC216958F122AA5C521CF12331 +:10212000EA540CE00100C9B289006918C822895834 +:1021300003910100C9B289006918DC228958019A0B +:102140000300DBB29B00EB18C8269A510200D2B202 +:102150009200AA18DC23D450401C0200D2B2052AF7 +:1021600000D30020F022A854C0202C50601A029006 +:10217000BC202858201A0021FA22D200002302F0A5 +:10218000A3F9FA229200002301F0ABFE0200A42082 +:102190002858904201D2A4202A58AC202858A421C3 +:1021A0006E580021002302F08FF902000B00700826 +:1021B000002180185941A422AA58002301F091FE61 +:1021C00006000198C4216958471ABC202858201AD3 +:1021D000322812D33000401CB8420ED2F320285CC3 +:1021E000002806D00020F321685400210498FEF74F +:1021F000C8F9009802F010FCB6E0BC202858201A5C +:10220000FA2802D30298FA2803D2009802F004FCBC +:10221000AAE002980021FA22D200002302F054F929 +:10222000FA229200002301F05CFE0400002C03D18E +:10223000009802F0F1FB97E001980399401A002101 +:10224000AF4A002302F040F902000B0060080021B1 +:10225000801859412200002301F043FE0190B02074 +:1022600028580290F3202C5C0198B421685030006B +:10227000401CB84201D200245BE07F1CB74210D260 +:102280002000C0B2322801D2322452E02000C0B275 +:102290005F284ED2641D2000C0B2602849D35F245D +:1022A00047E0019800216422002302F00DF90600A6 +:1022B0000F00029800215A22002302F005F98F42F4 +:1022C00013D801D3864210D22000C0B2322801D2E6 +:1022D00032242EE02000C0B25F282AD2641D2000E4 +:1022E000C0B2602825D35F2423E0029800216E222B +:1022F000002302F0E9F806000F0001980021642293 +:10230000002302F0E1F88F4213D801D3864210D2A5 +:102310002000C0B2332807D32000C0B2372801D331 +:10232000FB3406E0322404E02000C0B2002800D0D4 +:1023300000242000F321695CC0B2884211D0F32050 +:10234000285C002806D12000C0B2322802D3280021 +:10235000FEF7CAF9F3202C542100C9B20498FEF705 +:1023600010F9009802F058FB05B0F0BD08130028E2 +:10237000F01B0028AF1C0028FEB5A54800780028F7 +:102380005DD002F045FBC3490978002902D002F074 +:1023900043FB54E001273900BE4A1170B8490A785E +:1023A0006B461A70002422000A7002F035FB684662 +:1023B000007800282BD0250027E026001AE0684688 +:1023C00000783900A94008421ED002F021FB01909C +:1023D00084214900B04A28004843101882235B003A +:1023E000C05C0028E9D069435018FEF79AF800282D +:1023F000E3D13E00019802F00FFBF6B2002E03D0AD +:102400002800C0B200F059F96D1C042DD7D3FEF797 +:102410000FFAFFF7F2F9250009E02800FFF77FFD2A +:102420002800FFF777FD2800FFF73AFE6D1C042D0A +:10243000F3D302F0EDFA97490C7002F0EDFAF7BD14 +:10244000964800787047F8B50E000700FFB2704953 +:102450000978002904D0C0B2FEF750F8002801D155 +:10246000012046E002F0D4FA04008B4884214900A0 +:10247000794345188A480078002804D0200002F0EB +:10248000CBFA012035E0FF20801D285C00280CD00D +:10249000310089B2F820285AFEF739F8002804D014 +:1024A000200002F0B9FA012023E082204000285CDD +:1024B00000280FD0F620285A310089B2884219D15D +:1024C00000208221490068546D4801780122BA40F9 +:1024D00091430170F8202E52FC2028588021490099 +:1024E00068500120FF21891D6854200002F094FAF1 +:1024F0000020F2BD200002F08FFA0120F9E7000071 +:10250000A0860100F2B50400E4B24149097800292F +:1025100004D0C0B2FDF7F2FF002801D1002025E071 +:1025200002F076FA070084256D005B4E20006843B8 +:102530003018FDF7F6FF002812D02000684330184D +:10254000FF21891D405C00280AD0684600886C4342 +:102550003119F822895A80B2814201D1012400E068 +:102560000024380002F058FA2000C0B2F2BDF3B5E2 +:1025700081B000262DE000200EE0002482204000E3 +:10258000385C0028F7D068460189F620385AFDF7F4 +:10259000BEFF0028EFD028002043C0B2002817D18A +:1025A00068460089F6217852FC203858401CFC21EE +:1025B0007850280082214900785431480178B5408C +:1025C0000D430570AF48B1014018406902F02DFA83 +:1025D000761C042E1AD20125684600792900B140E4 +:1025E0000842F5D02C488421490071434718FF2048 +:1025F000801D385C0028C0D068460189F820385A10 +:10260000FDF785FF0028B8D02C00B7E7F7BD000024 +:10261000AD1C0028F1B5002425002EE084214900DE +:102620001D4A68460388280048431018F62683533D +:10263000280048431018FC23C3585B1C280048435B +:102640001018FC26835101231E002800484310184F +:1026500082277F00C655200069435118FF22921D32 +:10266000885407480178AB400B4303708548A901A3 +:102670004018406902F0D9F96D1C042DCED3F1BD8C +:10268000B31C002880B50121054A117080B2FFF704 +:10269000C1FF01BDB11C002808130028AF1C002891 +:1026A000B01C002810B5002404E02000C0B200F0E7 +:1026B00004F8641C042CF8D310BDFEB50400E4B289 +:1026C000B9490978002904D0C0B2FDF717FF0028E6 +:1026D00001D10120D5E002F09BF9019084256D0025 +:1026E000B24E2000684330187E21415C20006843D0 +:1026F00030188322805C6A461070200068433018CE +:102700008A22805C002806D1200068433018972276 +:10271000805C002803D001206A46507002E000204F +:102720006A465070C9B2200068433018FFF740F97C +:10273000002739002000684330187E228154390078 +:102740002000684330187F228154390020006843FC +:1027500030188022815439002000684330188222CA +:102760008154B3480078002806D007212000684330 +:1027700030188322815430E068464078002806D023 +:1027800006212000684330188322815425E06846E2 +:102790000078022813D06846007803280FD06846D6 +:1027A000007804280BD068460078052807D06846D2 +:1027B0000078072803D068460078082807D16846C3 +:1027C00001782000684330188322815405E03900E5 +:1027D0002000684330188322815439002000684368 +:1027E00030188A22815439002000684330188B2227 +:1027F00081543900200068433018942281543900F4 +:102800002000684330189622815439002000684324 +:1028100030189722815468464078002805D0062158 +:1028200065437019FFF7D8F80FE0390020006843BE +:10283000301884228154200068433018A02147506A +:1028400038006543711998228854019802F0E4F821 +:102850007748007800280BD00A4DA001281840695D +:1028600002F0E3F8A0012818FEF740FF012008E07D +:102870002000FFF72FF8002801D0380000E00120E9 +:10288000C0B2FEBDACDC0010FEB50D000400E4B229 +:1028900045490978002913D0C0B2FDF72FFE002862 +:1028A0000ED0AC4E307800280AD1684605706846D4 +:1028B000007832382E2803D25D4D2878002801D0C8 +:1028C00001206FE002F0A4F80190307800280CD1CC +:1028D0002878002809D184256D00344E20006843F3 +:1028E0003018FDF71EFE002804D1019802F094F87C +:1028F000012057E068460178200068433018F42230 +:102900008154002739002000684330188322520088 +:102910008154200068433018A421475020006843A8 +:102920003018A8214750200068433018AC21475088 +:10293000200068433018B0214750684601782000D5 +:1029400068433018F22281546846017820006843B9 +:102950003018F3228154200068433018FDF724FE1C +:102960002000684330187E21405C00280ED02000F3 +:10297000684330188B21405C002807D165437019EB +:102980008221405C002801D10127FFE7FFB2002F20 +:1029900004D0684601782000FDF7F3FD019802F0AD +:1029A0003BF80020FEBD0000AD1C002808130028E5 +:1029B000F8B5002203920022029201220192002225 +:1029C000009200230022C9B2C0B2FFF75BF905B044 +:1029D00000BD38B50400E4B2AE490978002904D03E +:1029E000C0B2FDF78BFD002801D100201FE002F0EE +:1029F0000FF884225200A84B2100514359187E251C +:102A0000495D00290CD12100514359189425495D95 +:102A1000002905D1544319199522895C002901D058 +:102A2000012400E0002401F0F7FF2000C0B232BD15 +:102A3000AF1C002838B50C000500EDB2002C1FD0EB +:102A4000C0B2FDF75BFD00281AD06068002817D0DF +:102A50006168280000F00CFF002811D0207C0028BD +:102A600003D06068216888420AD3A068002807D094 +:102A70008A48A9014018006B4000A168884201D231 +:102A8000012000E0002032BDF8B50400E4B2814A24 +:102A90001278002A06D00F003900C0B2FFF7CAFF33 +:102AA000002801D0012053E001F0B2FF00908425FE +:102AB0006D00794E2000684330187E21405C00286C +:102AC00014D12000684330189421405C00280DD1B7 +:102AD0002000684330189521405C002806D1200072 +:102AE000684330188221405C002804D0009801F02F +:102AF00093FF01202CE03968200068433018816082 +:102B00007968200068433018C160B96820006843C4 +:102B10003018B8228150F968200068433150397C60 +:102B20002000684330188922815400212000684326 +:102B3000301883228154200068433018FDF7D4FDFB +:102B40006C433019FDF730FD009801F065FF00205F +:102B5000F2BD0000B01C002870B50C000500EDB2FD +:102B6000002C08D04B490978002904D0C0B2FDF7E9 +:102B7000C5FC002801D1012020E001F049FF84229A +:102B80005200454B2900514359188968216029009A +:102B900051435918C9686160290051435918B82632 +:102BA0008959A160290051435958E1605543591989 +:102BB0008922895C217401F02FFF002070BDF8B5D7 +:102BC0000D000400E4B233490978002918D0C0B2DE +:102BD000FDF794FC002813D07348007800280FD12B +:102BE000C048007800280BD100950098002807D035 +:102BF0002A48A1014018006B40000099884201D288 +:102C0000012036E001F004FF070084256D00B74E77 +:102C10002000684330187E21405C00281BD1200032 +:102C2000684330189421405C002814D12000684388 +:102C300030189521405C00280DD1200068433018E1 +:102C40008221405C002806D1200068433018FDF73F +:102C500068FC002804D1380001F0DEFE012008E005 +:102C600000986C433119B8228850380001F0D4FE26 +:102C70000020F2BD00B59E4800680021FA22D20073 +:102C8000002301F021FCFA229200002301F029F92F +:102C900000BD0000AD1C002808130028ACDC0010AB +:102CA000F8B505000C002E00F6B2002C09D09148B2 +:102CB0000078002805D02800C0B2FDF71FFC0028CE +:102CC00001D101206CE001F0A3FE070088480168F3 +:102CD00084225200854B300050431818806B091A2B +:102CE00025703000504318188E25405D002803D011 +:102CF000332901D2012000E00020607030005043F1 +:102D000018188F25405DA0703000504318187425A6 +:102D1000405BE0803000504318187625405B2081EE +:102D20003000504318187825405B60816E48B5012B +:102D30004019808FA0816078002808D0A0780028F2 +:102D400005D06089A589A84201D3012000E00020B8 +:102D5000E0703000504318188C25405D002807D0E3 +:102D6000300050431818006F032801D2012000E002 +:102D700000202071564398198B22805C60710800F6 +:102D80000021FA22D200002301F09EFBFA229200D9 +:102D9000002301F0A6F82061380001F03DFE00207C +:102DA000F2BDA84908707047B01C0028FEB50500A8 +:102DB0000C002E00F6B2002C09D04E4800780028F6 +:102DC00005D02800C0B2FDF799FB002801D10120F1 +:102DD00086E001F01DFE019084214900434A300045 +:102DE000484310188768300048431018C0680090A6 +:102DF0003000484310188923C05C6070300048439D +:102E000010187E23C05CA070714350188321405C71 +:102E1000E070019801F000FE0098002801D1012027 +:102E20005EE0019700980199884201D200980190D4 +:102E30002D48B1014018C26A257067600098A060F3 +:102E4000226101980021002301F03EFB02000B00EB +:102E500000984008002180185941009A002301F091 +:102E600040F8E06001980021774A002301F02CFB34 +:102E700002000B0000984008002180185941009A78 +:102E8000002301F02EF860620026A661E6612800AA +:102E9000C0B2002805D1E0686061E068A0612662E8 +:102EA0001DE0EDB2012D17D1E068606101980021AD +:102EB000664A002301F008FB02000B00009840085E +:102EC000002180185941009A002301F00AF8A061FE +:102ED000E068E061266202E06661E068206200204E +:102EE000FEBD0000AF1C0028ACDC00100813002859 +:102EF000F01B0028AD1C0028F8B588B00D001600A6 +:102F00000400E4B27A49097800290CD0C0B2FDF778 +:102F1000F5FA002807D077480078002803D17648D2 +:102F20000078002801D001208AE006960795FFF777 +:102F300023FA01F06DFD842676006C4D210071436B +:102F40006918CF6801F068FD03A8029004A80190F9 +:102F500005A80090069B079A39002000FDF73EFB6C +:102F6000002801D101206BE001F052FD070061480B +:102F7000007800280AD160480078002806D1200097 +:102F800070432818FDF7CDFA002804D1380001F06D +:102F900043FD012054E00799200070432818A42223 +:102FA00081500699200070432818A8228150059965 +:102FB000200070432818AC228150049920007043EF +:102FC0002818B02281506846017B200070432818E1 +:102FD000F22281546846017B200070432818F322B6 +:102FE000815401212000704328188322520081540B +:102FF000200070432818FDF7D7FA200070432818E6 +:103000007E21405C00280ED02000704328188B21C0 +:10301000405C002807D16643A8198221405C002843 +:1030200001D1012000E00020C0B2002804D0684691 +:10303000017B2000FDF7A5FA380001F0EDFC00202F +:1030400009B0F0BDB41C002810270000EC130000EC +:1030500070B505000C002E00F6B2002C09D02448F3 +:103060000078002805D02800C0B2FDF747FA0028F4 +:1030700001D1012038E001F0CBFC25708422520000 +:10308000B84B31005143591883256D00495D61707B +:10309000310051435918A425495961603100514309 +:1030A0005918A8254959A160310051435918AC2538 +:1030B0004959E160310051435918B02549592161FE +:1030C000310051435918B4254959616131005143C8 +:1030D0005918F225495D217656439919F322895CE6 +:1030E000617601F099FC002070BD000008130028F3 +:1030F000AD1C0028B01C0028AF1C0028F1B586B01C +:103100000C006846007E01900026300030006946C1 +:1031100008743000694688703000694648709248EB +:103120000078002809D06846007EFDF7E7F90028FE +:1031300003D08E4D2878002801D0012010E103949F +:10314000FFF71AF98A48019989014018C76A03985C +:10315000874201D2012003E101F05AFC029081482C +:10316000019984225200514344188920205C002890 +:1031700012D0E06800280FD08B20205C00280BD1F3 +:103180008220205C002807D12000FDF7CAF9002822 +:1031900002D02878002804D0029801F03DFC0120DC +:1031A000DEE003980021E268002301F08DF90200BF +:1031B0000B0078080021801859413A00002300F0E4 +:1031C00090FE07007E20205C694608702000FEF714 +:1031D0000DFC276101258A20255430008B21605485 +:1031E0003000972160543000832160549420205C8B +:1031F000002819D0A068874201D1300005E0A068FE +:10320000B84201D2280000E00220802160549620BC +:10321000205C00287DD157480068606196202554C5 +:1032200030008621605474E068460078002839D068 +:1032300068460078012802D1A068B84206D36846E3 +:103240000078022804D1A068874201D2280000E05B +:1032500030009621615C002907D146490968616107 +:103260009621655431008622A154C0B2002850D165 +:103270003F48019989014018406901F0D6FB3000B0 +:103280007E2160543000802160543A480068E0613B +:1032900094202554684601782000FEF789FB684693 +:1032A000857036E09520205C00281DD0A0688742FC +:1032B00001D1300005E0A068B84201D2280000E04A +:1032C000022080216054206AE061942025549620D9 +:1032D000205C00281DD12748006860619620255495 +:1032E00030008621605414E0A068874206D1300087 +:1032F000862160542000FEF7ABFB0AE0A068B842CC +:1033000002D26846057402E00220694608746846E5 +:103310004570029801F080FB68468078002809D04B +:103320000198FEF7D7FA002801D0300000E028000D +:10333000C0B215E068464078002810D00020039005 +:103340000020029000200190002000903B0001220C +:103350006846017C6846007EFEF794FC00E0002091 +:1033600007B0F0BD08130028AD1C0028AF1C0028D2 +:10337000ACDC0010F01B0028FEB5C0B20400FDF765 +:10338000C9FE019010E0FFB2002F46D0FDF7C2FE4B +:103390000199401A9349884241D234480078002864 +:1033A00001D001F05DFF30BFFEF7E6FF02F013F839 +:1033B00001F02EFB009084256D002B4E2000684309 +:1033C00030189521475C8848007800281AD12000E1 +:1033D00068433018FDF7A5F8002813D02000684393 +:1033E00030187E21405C00280CD120006843301842 +:1033F0009421405C002805D1654370198221405C0E +:10340000002801D0012500E00025009801F004FB10 +:10341000EDB2002DB7D0002002E0012000E0002036 +:10342000FEBD0000FBB51700089C0299002901D1E0 +:10343000002C18D0060001F0EBFA842252006B4BEE +:10344000310051435D58564399194E6801F0E4FA32 +:103450000298002803D00198281A02990860002CCD +:1034600001D0F01B2060F7BD08130028B41C002811 +:10347000F9B585B00D0016006846047D0698002851 +:1034800002D00020069908606846007DFFF774FFAF +:10349000002801D10120A2E02F0001F0B9FA0500B7 +:1034A00030000021FA229200002301F00DF8020002 +:1034B0000B00B348002180185941FA22D2000023A2 +:1034C00000F00FFD49498422520062438918886147 +:1034D000280001F0A1FA00200390002002900120B2 +:1034E000019001200090002300223900C9B26846F3 +:1034F000007DFEF7C7FB002801D001206FE001F03E +:1035000087FA3A498422520062438918C96A0191B4 +:1035100001F082FA0FE0FFB2002F4FD1EDB2002D83 +:1035200002D1F6B2002E49D0D0480078002801D050 +:1035300001F096FE30BFFEF71FFF01F04CFF01F0D7 +:1035400067FA84225200294B2100514359184968D7 +:10355000009121005143591883254F5D21005143AB +:1035600059187E254D5D6243991894228E5C01F0B6 +:1035700053FA00980199401A0428CCD36846007D7C +:10358000FFF79BF8002805D16846007DFFF7F4FEA1 +:10359000002809D1069800900023019A00212000FC +:1035A000FFF740FF01201AE0069800900023019ADF +:1035B00000212000FFF736FF002010E06846007D64 +:1035C000FFF77BF86846007DFFF7D6FE069800906F +:1035D0000023019A00212000FFF724FF012007B0FB +:1035E000F0BD0000C4090000AF1C0028081300282B +:1035F000F1B586B00E0015006846047E3000C0B2FA +:10360000022803D102206946087402E003206946BB +:10361000087405930598002802D0002005990860D9 +:103620000C98002802D000200C9908606846007EA3 +:10363000FFF7A2FE002801D1012014E12F0001F0C4 +:10364000E7F9050038000021FA229200002300F07B +:103650003BFF02000B004A48002180185941FA2222 +:10366000D200002300F03DFC9D49842252006243B9 +:1036700089188861280001F0CFF90020039000200C +:1036800002900120019001200090002300223100CF +:10369000C9B26846007EFEF7F5FA002801D0012085 +:1036A000E1E001F0B5F984256D008D4E21006943FC +:1036B0007118896A0291210069437118C96A0191E0 +:1036C00001F0AAF913E068464078002800D0B9E07C +:1036D00068460078002803D1FFB2002F00D1B1E086 +:1036E00062480078002801D001F0BAFD30BFFEF733 +:1036F00043FE01F070FE01F08BF92100694371185F +:103700008322895C6A4651702100694371187E22C8 +:10371000895C6A46117021006943711894228F5C9C +:103720002100694371189522895C6A46917001F005 +:1037300073F9684640786946097C8842C3D1684677 +:1037400000780028BFD13800C0B20028BBD168463D +:103750008078002816D06846007EFFF70DFE00280E +:1037600010D16846007EFEF7A8FF0C980090059BDC +:10377000019A02992000FFF755FE012073E000BF77 +:10378000CF07000001F044F907002000684330181B +:103790008321405C6946097C88421FD12000684330 +:1037A00030187E21405C002818D120006843301872 +:1037B0009421405C002811D12000684330189521E5 +:1037C000405C00280AD1200068433018FCF7A9FEAD +:1037D000002803D043480078002810D0380001F0BA +:1037E0001BF96846007EFEF768FF0C980090059B69 +:1037F000019A02992000FFF715FE012033E0200016 +:1038000068433058039020006843301840680090A7 +:1038100000206C4331198B228854380001F0FCF8E9 +:103820000598002804D003980299401A0599086069 +:103830000C98002804D000980199401A0C9908604F +:10384000002010E06846007EFEF737FF6846007EE5 +:10385000FFF792FD0C980090059B019A02992000B9 +:10386000FFF7E0FD012007B0F0BD0000B41C002808 +:10387000F2B582B01C4980010818806A00216A46AE +:1038800003C2083A64240025684603C84622002380 +:1038900000F01AFE22002B0000F023FB06000F00B0 +:1038A000684603C88222002300F00EFE22002B008F +:1038B00000F017FB029A082A0FD3029A0023BB429A +:1038C0000BD301D8B24208D3029A0023994204D301 +:1038D00001D8904201D3012000E00020C0B2FEBD1B +:1038E00008130028AF1C0028ACDC0010F9B58FB01D +:1038F0000F0016000FA80478002004900020079005 +:1039000000200A90002000200020002009900020C4 +:10391000089032206946487301250020002069463E +:103920000871002069460875002005A9487000202C +:1039300006902448007800281FD00FA80078FCF7D4 +:10394000DDFD002819D020480078002815D11F4837 +:103950000078002811D10296029800280DD0684600 +:1039600007736846007B002811D06846007B012859 +:103970000DD06846007B022809D01098002804D09A +:1039800005A803C8109A03C2083A012012E201F008 +:103990003FF8009084277F000D4E200078433018B8 +:1039A000FCF7BFFD002815D1009801F035F81098FC +:1039B000002804D005A803C8109A03C2083A0120C1 +:1039C000F8E100BFAD1C0028B01C0028AF1C002887 +:1039D00008130028200078433018C0680B90009826 +:1039E00001F01AF80FA80078FEF767FE002800D053 +:1039F00095E16846007B002860D107A8009004ABE1 +:103A0000029A02210FA80078FFF7F2FD05002800B6 +:103A1000C0B200282BD10798042828D20AAB029AFA +:103A200001210FA80078FFF723FD05002800C0B290 +:103A300000281CD107A8009004AB029A02210FA80D +:103A40000078FFF7D5FD05002800C0B200280ED190 +:103A5000079800210022401C514102000B000A98E7 +:103A600000218B4203D801D3824200D201252800D5 +:103A7000C0B2002820D100F0CBFF00902000784396 +:103A80003018FCF74EFD002804D1009800F0C4FF68 +:103A9000012544E100212000784330188160012194 +:103AA00020007843301889228154009800F0B4FF38 +:103AB00001206946087521E101251FE16846007B68 +:103AC000012830D10020009004AB029A01210FA8F8 +:103AD0000078FFF78DFD05002800C0B2002820D136 +:103AE00000F096FF0090200078433018FCF719FD95 +:103AF000002804D1009800F08FFF01250FE10B99F9 +:103B0000200078433018816001212000784330186C +:103B100089228154009800F07FFF012005A9487098 +:103B2000ECE00125EAE0002000900023029A022147 +:103B30000FA80078FFF75CFD05002800C0B2002840 +:103B400028D100F065FF0500200078433018FCF70D +:103B5000E8FC002804D1280000F05EFF0125DEE02B +:103B6000002120007843301881602000784330180D +:103B700089228154280000F04FFF01206946087512 +:103B80000020009004AB029A01210FA80078FFF7F3 +:103B90002FFD05002800C0B2002800D0ADE0049938 +:103BA0002000FFF765FE002800D1A6E000F030FFFE +:103BB00021007943711883225200895C6A4691730F +:103BC000210079437118A42289580D91210079436D +:103BD0007118A82289580C9100F01EFF6846807B5E +:103BE00000280ED003A8401C029008A8019009A844 +:103BF00000900C9B0D9A04992000FCF7EFFC69469D +:103C0000087100F005FF0090200078433018FCF7A1 +:103C100088FC002804D1009800F0FEFE01257EE01B +:103C20000499200078433018C1600499200078433B +:103C30003018816001212000784330188922815496 +:103C40006846807B00284FD06846007900281FD046 +:103C50000999200078433018AC228150089920003F +:103C600078433018B02281506846417B2000784369 +:103C70003018F22281546846417B20007843301886 +:103C8000F3228154200078433018FCF78DFC2BE0A0 +:103C900000210A0020007843301883235B00C254BF +:103CA000200078433018A422815020007843301837 +:103CB000A8228150200078433018AC228150200087 +:103CC00078433018B0228150200078433018B42255 +:103CD00081503221200078433018F2228154200094 +:103CE00078433018F3228154009800F095FE0120AB +:103CF00005A948700498069000E001252800C0B28C +:103D000000280CD16846007B022808D000F080FE15 +:103D1000210079437118C968069100F07DFE2800E2 +:103D2000C0B200283CD034480078002803D10FA846 +:103D30000078FEF7C2FC00F06BFE00906846007B46 +:103D4000022808D16846007D002804D0049920008C +:103D50007843301881600B99200078433018C16097 +:103D600000210A002000784330188923C2540A0039 +:103D70002000784330188B23C25420007843301839 +:103D8000962281541C480078002801D0072000E0CA +:103D900008207C43311983228854009800F03CFEAF +:103DA0001098002804D005A803C8109A03C2083A46 +:103DB0002800C0B211B0F0BD38B500200F4908701E +:103DC000FDF726FAFDF7C4FAFDF7F0FB050000F059 +:103DD00096FC0400FDF7A6F9EDB2002D06D0E4B282 +:103DE000002C03D0FCF7D2FC002803D1FDF794FC93 +:103DF000012000E0002032BDAF1C0028B01C0028CC +:103E0000D021890040587047C22189004058C00520 +:103E1000C00D704790229200815070478221890026 +:103E20004058C005C00D704700B50068800B800782 +:103E3000800F002801D1802000E0402000BD00B5A7 +:103E4000C02189004058C006C00E082801D20120B8 +:103E500000E00020C0B200BDF8B504000D0016005F +:103E60002000FFF7ECFF002809D02F000025B54205 +:103E700010D22000FFF7C4FF78556D1CF7E72F0024 +:103E8000002505E02000FFF7BBFF690078526D1C9C +:103E9000B542F7D3F1BDF8B507000D0016003800A4 +:103EA000FFF7B2FF0400A64200D23400290022002E +:103EB0003800FFF7D1FF2000F2BDF8B505000C0077 +:103EC00000262800FFF7B0FF07002800FFF7A6FF35 +:103ED000874204D021002800FFF79CFF0126300014 +:103EE000F2BD12422DD0994231D970B500251B4246 +:103EF00009D00C00002112E0110000F0F7F80A00D0 +:103F00000021002370BD0942F6D000240126491883 +:103F10006441944200D3A41A7641F8D331000126BB +:103F200001E0764109D2001864416D41A41A9D4117 +:103F3000F7D2A4185D41B619F5D3300022002B004A +:103F400070BD1B42CFD108B502F0D2FD08BD01D132 +:103F50009042CAD202000B000021002070470000EE +:103F600070B55F4BC018C00900015E4BC31804292F +:103F70000CD21F251C68CE002800B0408443D2B26A +:103F80001540C800854025431D600CE0FC311F250D +:103F90005C68CE002800B0408443D2B21540C8000F +:103FA000854025435D6070BD00B5002A03D1012224 +:103FB0008A40426002E001228A40826000BD30B443 +:103FC00003008C000F25596C2800A0408143154048 +:103FD000A5400D435D6430BC704730B4030001253B +:103FE0009C6C28008840844315408D4025439D6487 +:103FF00030BC704730B403000125DC6C28008840D9 +:10400000844315408D402543DD6430BC704730B497 +:1040100003004C0010340325D96C2800A0408143D4 +:104020001540A5400D43DD6430BC70474269012254 +:104030008A4042614069704730B4030001259C69A1 +:1040400028008840844315408D4025439D6130BC45 +:10405000704730B403004C000325196C2800A040C1 +:1040600081431540A5400D431D6430BC7047F8B531 +:1040700004000025002C30D01600002E2DD00F009B +:10408000326839002000FFF78FFF327A39002000B4 +:10409000FFF766FF726939002000FFF79EFFB269E3 +:1040A00039002000FFF7A6FFF26939002000FFF772 +:1040B000AEFF726839002000FFF781FFF268390017 +:1040C0002000FFF7C6FF39002000FFF7AFFF32697D +:1040D00039002000FFF7B0FF00E0034D2800F2BDDB +:1040E0000000CFBF0000304001005A000022030A48 +:1040F0008B420BD203098B4219D243088B422ED23A +:10410000411A00D20146524110467047FF2209026F +:104110003FD012068B4205D3121209028B4201D303 +:104120001212090203098B4219D300E0090AC309DC +:104130008B4201D3CB01C01A524183098B4201D378 +:104140008B01C01A524143098B4201D34B01C01A63 +:10415000524103098B4201D30B01C01A5241C308DB +:104160008B4201D3CB00C01A524183088B4201D34A +:104170008B00C01A524143088B4201D34B00C01A36 +:104180005241884200D3401A5241CFD201461046D4 +:10419000704708B502F0AEFC08BD0000F8B5012379 +:1041A0001A00002800D151E1002900D14EE1A84AAF +:1041B00012680C7AA74D1540A4048022D202144044 +:1041C0002C430322CE681640A34D25403604C0245C +:1041D000A40234402C430D786E07760F9F4D254086 +:1041E0003606E024E40434402C438E789C4D254070 +:1041F000B4078026F60534402C4328254D5D012662 +:10420000B4431D40254334240C5D0226B5436400AD +:10421000022634402C430D7F0426B443AD0004260F +:10422000354025434C7F0826B543E400082634403A +:104230002C4340254E5D1E408A4D2540B402802609 +:10424000F60034402C4340254D5DEDB26D081E0054 +:104250002E40F6B2844D254074028026B6003440CC +:104260002C4370254E5D814D25403402802676001A +:1042700034402C4371254E5D16407D4D254036035C +:10428000C024A40134402C4304600C7A002C02D1D9 +:104290000023836006E00C7A012C02D14B69836015 +:1042A00000E083600B6A03614B6A4361CB6A836100 +:1042B0000B6BC3614B6903628B6943626D4B1C6876 +:1042C0004423CB5CDBB2FF25AC4323434C240C5D81 +:1042D000E4B2694D1D402404FF231B0423402B43FB +:1042E0005C240C5DE4B21D022D0A23062B436C24D2 +:1042F0000C5DE4B2614D1D402402FF231B022340EC +:104300002B4343645E4B1B6864240C5DE4B25B4D3D +:104310001D402402FF231B0223402B4354240C5D29 +:10432000E4B2FF25AB431C438464564B1C68412315 +:10433000CB5C13400325AC43234360240C5D144045 +:10434000514E1E40A302C0252D011D403543482378 +:10435000CE5C16403023DB4330241D40370127401C +:104360002F4350254D5D1540484E3E402F02C0253D +:10437000AD003D40354358268E5D1640C027BD43F5 +:10438000B701C0263E402E4368254D5D15400C27E1 +:10439000BE43AF000C253D403543C5643C4D2D6800 +:1043A00007267227CF5D374000970727BD432F00B0 +:1043B000009D3D437327CF5D3E407027BD433701CD +:1043C00070263E402E43466535254D5D8567314D4F +:1043D0002D680E7C16400327BD432E43CD7C15402F +:1043E000C027BE43AF01C0253D4035434E7C16403B +:1043F0000C27BD43B7000C263E402E438D7C2A403F +:104400003340120114401C430465234A1268CB88D0 +:1044100094B21A0422438B889BB21B0A9BB2174C9E +:1044200014401B02FF2212021A4022430B78052B74 +:1044300005D10979C9B2FF239A43114304E04978B1 +:10444000FF239A43C9B21143016300221000F2BD59 +:1044500080E90010FFFFFBFFFFFFFCFFFFFFFFF8FD +:10446000FFFFFFBFFFFBFFFFFFFDFFFFFFFEFFFFA3 +:10447000FFCFFFFF84E90010FFFF00FFFF00FFFFF9 +:1044800088E900108CE90010FFF3FFFFFFFCFFFF3D +:1044900090E9001094E9001098E90010016880226A +:1044A00012060A430260704701684900490801602A +:1044B00070474068704701617047006970478160CC +:1044C0007047006A7047000030B4434351435D18A1 +:1044D000010C0C00130C5C432D1980B2434392B2C3 +:1044E00051430024C918644124040B04090C091920 +:1044F0005043C018694130BC7047000000B5022825 +:1045000001D301200FE00B00DBB2042B01DB012003 +:1045100009E0BE4B80001818C9B2405C824201D34A +:10452000012000E0002000BDF8B504001F00022CAF +:1045300001D3012023E015000E002A003100C9B28A +:104540002000FFF7DBFF012801D1012017E0300038 +:10455000C0B2002816D1FF2F12D8AD486103401811 +:10456000A90040188021490140180168A94A0A4061 +:104570003902FF231B020B40134303600020F2BDEE +:104580000120FCE7F6B2012E16D1802040028742BE +:1045900010D29F4861034018A9004018A02149018A +:1045A000401801689C4A0A403902C94B0B4013432A +:1045B0000360E3E70120E2E70120E0E700B2001238 +:1045C000C0B27047F8B505000F001600280000B211 +:1045D000FFF7F4FF04002000C0B2022801D301203D +:1045E0002CE032003900C9B22000C0B2FFF786FFCC +:1045F000012801D1012021E085482100C9B24903E9 +:1046000041182A00D2B292008918C02212018A5899 +:10461000B0491140FFB23B02C02292001A400A4347 +:10462000FF218A43F1B21143E4B262038018EDB274 +:10463000AA008018C022120181500020F2BD70B57E +:104640000400022C01D3012028E015000E002A00EE +:104650003100C9B22000FFF751FF012801D101202C +:104660001CE06B4861034158802212060A43C021B6 +:1046700089041143FF2212040A43964B1340F6B2F9 +:104680003202C021890011401943FF229143EAB24E +:104690000A436103425061034058002070BD70B569 +:1046A0000400022C01D3012028E015000E002A008E +:1046B0003100C9B22000FFF721FF012801D10120FC +:1046C0001CE05348610341588022D2050A43C021AF +:1046D00089041143FF2212040A437E4B1340F6B2B1 +:1046E0003202C021890011401943FF229143EAB2EE +:1046F0000A436103425061034058002070BDF8B581 +:1047000098B00BA8342102F007FA9A4803C801AA0E +:1047100003C2083A03A8A549202200F0E5FAAA48F6 +:104720000078002801D001206DE000252C0007E072 +:104730002800A649620088522800A5490855641C33 +:10474000062C14D2A348142161434118097A0BAAFC +:1047500011720BAA14216143411849681423634361 +:10476000C058FFF784FC0028E2D000204BE06846E8 +:1047700000F0B2F8002801D1002044E000980021A8 +:10478000962292000023FFF79FFE934A00231218FF +:104790004B4110001900914A0023FFF7A2FB0028AB +:1047A00000D1012003AFB8818D4E300002F032FA03 +:1047B00001A9300002F0CAF9002801D0002022E04F +:1047C0002C0006E0142060432818C06802F020FB8B +:1047D000641C062C13D27F4D142060432818007CE3 +:1047E000787103A9142060432818C06802F016FAF3 +:1047F0000028E7D0300002F00DFA002003E001208D +:1048000071490870012019B0F0BD000098E800104F +:1048100000000440FF00FFFFFF0000FFF8B584B078 +:104820000E00C0B2029000252800694608800421CD +:104830002A0003AC200002F05FF92C0062480078E7 +:10484000002806D0674F3878002802D10298062841 +:1048500001D3002039E0012038705E48029914220B +:1048600051434018C0680190019800F0A1F80198E8 +:1048700002F0DAFA019800F07FF800281FD003AAAE +:104880006946019802F0D6FA002818D103A8C0782A +:10489000002814D0684600880005000D694608808D +:1048A000684600884949029A5200885201244848C3 +:1048B00002994454002E02D0684600883080019846 +:1048C00000F076F83D702000C0B205B0F0BD0000E9 +:1048D00000FFFF00FFFCFFFFF8B50700002000907D +:1048E000FF262C363000FFF769FE0500002F04D0AC +:1048F000684602F0AFFF002801D0002038E00098A1 +:10490000394940183949FFF7F1FB0400002C02D067 +:104910003748844201D300202AE0042201212800E4 +:10492000FFF7BDFE002801D0002021E00422012174 +:104930003000FFF747FE002801D0002018E0631E7A +:10494000042201212800FFF7EFFD002801D00020FC +:104950000EE0042201212800FFF771FE002801D09B +:10496000002005E000982100FFF7C0FB386001201F +:10497000F2BD000070E800107CB505001D4C06215A +:1049800000226E46300002F0B7F86946280002F0B7 +:104990003DFB68460078002803D1641E002CF4D14A +:1049A00001E0012000E0002076BD00008CE6001050 +:1049B000E0B511490CC9083969460CC10839694686 +:1049C00002F0CEFA07BD0000A31C0028901B0028AF +:1049D000A81B0028A4DF0010FFC99A3B00CA9A3B1D +:1049E00000109040A41C00285F8DCB00608DCB0090 +:1049F00001000100A086010078E80010000000001E +:104A0000801C800803D0401C801EFCD100BF704772 +:104A1000EFF3108072B6704780F310887047403013 +:104A2000016810220A430260704740300168082282 +:104A30000A43026070470000F8B5012422004C23AD +:104A4000CB5C052B03D24D23CB5C052B01D310008F +:104A5000E2E0002800D1DEE0002900D1DBE06F4A6F +:104A600012684B7923406E4D15409B048022D20280 +:104A700013402B4303228D7915406A4E1E402B04B0 +:104A8000C025AD021D40354307230E7A1E40664FF8 +:104A90002F403606E025ED0435403D43CE79634F87 +:104AA0002F40B5078026F60535403D430E7D012792 +:104AB000BD4326402E4324254D5D0227BE436D0095 +:104AC00002273D40354305600D79060030360096DB +:104AD000009E3668FF27BE43EDB23543009E356029 +:104AE0004D79012D0BD18C79002C02D100248460EA +:104AF00006E08C79012C03D10C68846000E08460AE +:104B0000CC6804610C694461CC6984610C6AC4613D +:104B10000C680462464C25680C7EE4B2FF26B5435F +:104B20002C4330254D5DEEB2424D25403604FF2426 +:104B3000240434402C4340254D5DEDB22402240A68 +:104B40002E06264348240C5DE7B2FF2424023A4D8A +:104B50002E403F02274037434764384E3668382797 +:104B6000CF5DFFB20097FF27BE43009F3743282643 +:104B70008E5DF6B23D40360234402C438464304CA6 +:104B800025688C7D14400326B5432C4325254E5DB6 +:104B900016402C4D2540B602C024240134402C433D +:104BA0002C254D5D15403026B4432E01302535406F +:104BB000254334240C5D1440234E2E402502C0248E +:104BC000A4002C4034433C254D5D1540C026B44321 +:104BD000AE01C0253540254344240C5D22400C2401 +:104BE000A54394000C2222402A43C264174A146849 +:104BF0004C228A5C1A400725AC4322434D240C5DAD +:104C000023407024A2431C017023234013434365B7 +:104C1000497D816700221000F2BD00006CE90010A0 +:104C2000FFFFFBFFFFFFFCFFFFFFFFF8FFFFFFBFE2 +:104C300070E90010FFFF00FFFF00FFFF74E90010A4 +:104C400078E90010FFF3FFFFFFFCFFFF7CE9001095 +:104C50000168802212060A430260704778300168BA +:104C600001220A4302607047C16F0800C007C00FED +:104C70007047010070310A68012313430B60006F15 +:104C80007047000030B5010000221000134B1B6874 +:104C9000002914D08C786407640F0725AB431C43AC +:104CA0000B79002B01D00122FFE763005B08D207DC +:104CB0001A430B4B0024095F89005A5000E0064854 +:104CC00030BD00B5074A1368002B03D0126800B24C +:104CD0008000115000BD00000100560068E900107E +:104CE000008020402412002870B4103A03D378C901 +:104CF000103A78C0FBD2530701D318C918C001D5A8 +:104D000008C908C0D20704D30B880380891C801C03 +:104D1000002A01D50B78037070BC70478B0701D156 +:104D20008307E1D0124205D00B78491C0370401C68 +:104D3000521EF9D170470000F7B5AD4BAD4A15686A +:104D4000AD4A1668AD4A12680192AD4A12680092E7 +:104D5000002422002200002800D11EE10A00002ABF +:104D600000D11AE15168002901D1936805E051682A +:104D7000022901D1230000E0022311695769B942D9 +:104D800001D3116900E05169092909D29D492940DF +:104D90002125555D002D15D080256D000D4313E0B4 +:104DA000112905D2974F2F408021C9013943EFE7E0 +:104DB000212905D2934F2F40802109023943E7E78B +:104DC0008B48EBE0904D0D40D168491E0907090F53 +:104DD0000F27BD4329438D4D0D40802149042943B0 +:104DE0000160117F002901D0210000E0012101258F +:104DF0000127BE43294031430E005168090929406B +:104E00000227BE434900022739403143D67E10278E +:104E1000B943360110273E400E43517E2027BE4342 +:104E200049012027394031431668012E00D0250062 +:104E30004E007608E90731430425A9435D000426A6 +:104E400035400D4308218D43D900082319402943DB +:104E5000537F6D4D0D40190280235B00194029439B +:104E6000957F80239B006A4E0E40690219403143B2 +:104E7000D67F684D0D40B1028026F60031402943AF +:104E80002025565D644D2940F60280273F013E40B3 +:104E90000E4311798F07BF0F5C4931403F06C02692 +:104EA000B6043E400E430662167E009F56493940C6 +:104EB000360280277F003E400E43977E54493140A2 +:104EC0007E021E400E431169491EC906C90E1F27E6 +:104ED000BE433143C026B60081512421515CC9B282 +:104EE0000091C121890041180E68FF27BE43009F31 +:104EF00037430F60167E019F4349394036028027B1 +:104F00007F003E400E435169491EC906C90E1F2746 +:104F1000BE4331438026B60081512C21515CC9B279 +:104F200000918121890041180E68FF27BE43009F30 +:104F300037430F60116B1B4E8151916A184E81519E +:104F40003821515CF026360186190096009E37689C +:104F50002F4E3E4049020B40334300990B603921EC +:104F6000515CF4221201821813681D40C90280238B +:104F70001B011940294311600B4944500298002835 +:104F80000AD002980460029884610298C460029872 +:104F9000C46126480299086223001800FEBD000083 +:104FA000C80F0000880F0000C80E00001B490160F8 +:104FB000C02189040162FF220832C02189004250C9 +:104FC0000021C1239B00C15080239B00C25081223D +:104FD00092008150124A8150154A8150114A8150E5 +:104FE000114A8150134A8150134A81507047000082 +:104FF0000140AA0050E9001054E9001058E90010DF +:105000005CE90010FF3FFFFFFFFEFFFFFFFFFFFC1B +:10501000FFFDFFFFFFFBFFFFFFF7FFFF0F00000398 +:10502000C80E0000C80F0000880F0000EFCDAB00D5 +:10503000880E0000080F0000480F0000F8B50400BB +:105040000D00334F387800280ED02D4E18222D49F0 +:10505000300002F049FC0020F075CF2040002A49C2 +:105060000860002002F0A0FC2000290001223A7014 +:1050700080225204002399420AD301D8904207D3D8 +:10508000244A04000D0024A003C80019694102E06D +:105090000200002000211D4B00241C60204D2A60CE +:1050A000214A146005221A601A68D203FCD51C60DC +:1050B0000029DDD10028DBD13C70F1BD70B50500C1 +:1050C000184E306800280ED10D4C18220D492000D2 +:1050D00002F00AFC0020E075E52040000A49086063 +:1050E000002002F061FC2C0030681049FEF7FEFF42 +:1050F000002122000023FFF7E7F9FFF79FFF70BDB3 +:10510000181B002804E30010E81B002810E000E052 +:10511000AA1C0028FFFFFF00010000FFFFFFFFFFA8 +:1051200014E000E0841C002818E000E040420F007A +:1051300043490A680860704742490A680860704736 +:1051400041490A680860704740490A6801239A4348 +:10515000C0B20300DB07DB0F13430B6070473B4912 +:105160000A6810239A43C0B200011023184010436C +:105170000860704735490A68354B1340C0B20002D9 +:10518000802252001040184308607047314801687F +:1051900001220A430260704710B5FFF739FC040092 +:1051A00000F024F80020FFF7C3FFFA20C001FFF74A +:1051B000C3FF0020FFF7C4FF0020FFF7C5FF012059 +:1051C000FFF7CDFF0020FFF7D5FF00F004F8200027 +:1051D000FFF722FC10BD80B5FFF71AFC1E490A68D4 +:1051E000032313430B60FFF717FC01BD80B5FFF7E6 +:1051F0000FFC19490A6803239A43012313430B60E8 +:105200000A6803239A43022313430B60FFF704FC4D +:1052100001BD80B5FFF7EAFF104801688022120641 +:105220000A430260FFF7D7FF01BD80B5FFF7DEFF3D +:105230000A480168490049080160FFF7CCFF01BD39 +:1052400004C0264008C026400CC0264010C026409E +:10525000FFFEFFFF44C0264040C0264000C026405D +:1052600080B5FFF7C3FFFFF791FFFFF7B4FF01BD64 +:1052700070B53021002422008B4D280001F03CFC49 +:10528000E0212200894D280001F036FC042631007F +:105290002200874D280001F02FFC2200854D3100AF +:1052A000280001F029FC200083490870A44804600C +:1052B00002F0E4FD03F032FB03F0C6FE04F072F8E6 +:1052C000002809D004F071F8002805D003F040FF51 +:1052D000002801D103F0B0FF04F028FB002804D11E +:1052E000062004F0D3FD002016E0FDF7C3FC95492D +:1052F0000860954908609549086095490860954996 +:1053000008600120054908700F21054A1170054AFF +:105310001170B7490870012070BD00000313002808 +:10532000041300280513002838B584B0B14800687C +:10533000002802D0022004F0A9FD04F0BAFD04F018 +:10534000CDFD00282BD003F0F7FB00280ED0AA4893 +:10535000008803F0D7FB012457480470FDF78AFC4E +:10536000A649401876490860B4480470002001003E +:1053700008E002004C4B0C00E4B20C256C431B19F6 +:105380009A72491C0A00D2B2042AF2D39C490870CE +:105390000120AB49087002E0684600F0B9FB68469E +:1053A00004F00CFB002808D00098C0218900884236 +:1053B000F2D0684604F0E8FDF1E700F073FE02F079 +:1053C0005BFE03F00AFB00F0CCFE00F00FFF01F0E3 +:1053D00069FA05B030BDF8B502E0684600F098FB08 +:1053E000684604F0EBFA002808D00098C021890034 +:1053F0008842F2D0684604F0C7FDF1E77D480068B6 +:10540000002802D0022004F041FD04F052FD00F01B +:10541000A8FE01F047FA05B000BDF1B503F08CFB22 +:1054200007006846008803F06DFB68460088FDF7BA +:10543000F1F8FCF7A1FF0026340018E02000C0B20C +:1054400000F071F80500684601882800C0B2FCF73A +:10545000FAFF684601882800C0B202F019FD124820 +:105460002100C9B20C22514340188672641C2000EE +:10547000C0B20428E2D3624806700F207149087058 +:105480007149087001206E49087059490870FFB2CF +:10549000002F07D008490870FDF7ECFB574940186A +:1054A00027490860F1BD0000AC1A0028181900282F +:1054B000601C0028681C0028C81C002800B5401A81 +:1054C000002801D4012000E00020C0B200BD00B5DA +:1054D000401A00B2012801DB012000E00020C0B228 +:1054E00000BD00B500281BD0002919D002780B7828 +:1054F0009A4215D142784B789A4211D182788B78B2 +:105500009A420DD182888B889A4209D1C288CB8871 +:105510009A4205D100890989884201D1012000E021 +:105520000020C0B200BD00B50100C9B2042903D2F9 +:105530004649C0B2085C00E00420C0B200BD0000D3 +:10554000641C00286C1C0028701C0028741C002897 +:10555000781C00287C1C002810B50C000100C9B282 +:10556000042901D2002C01D1002006E0C0B2FFF7CF +:10557000DAFF2100C0B203F06DF910BD00B50028BC +:1055800002D04178042901D3002013E001780A29D0 +:1055900002D001780B2904D10189FA208000484308 +:1055A00008E00189002901D0008903E028494078FA +:1055B0008000085800BD00B5002802D041780429B9 +:1055C00001D3002012E00178032903D0214940785B +:1055D000085C0BE00089401D0A21FEF787FD322898 +:1055E00000D23220602800D35F20C0B200BD00008E +:1055F00006130028DC1B00289E1C0028B80B0000A6 +:10560000C41C002800B5144B1870144B1970002AE4 +:1056100005D01178124B19709188124A1180C0B2CE +:10562000002803D001209C49087002E000209A491C +:10563000087001200249087000BD00000613002810 +:10564000031300280413002805130028A8E90010FC +:1056500044E80010ACE90010C11C0028C21C00285E +:10566000C31C00289E1C0028F8B50500002D05D09D +:105670000C00002C02D01600002E01D1002039E0D1 +:105680000A2100222700380001F036FA68682070ED +:105690006868000A03210A00024062700200D2B268 +:1056A00092080A40A2706A68120CA280AA68E2807E +:1056B000AA68120C22812A68C0239B009A4202D158 +:1056C0002A7B082A03D001203070002012E0F0224B +:1056D0000240102A03D00220307000200AE0207817 +:1056E000401E022802D9C01F072801D8012001E06E +:1056F00031700020F2BD00B5002801D0002901D191 +:10570000002054E04278042A03D3042008700020CB +:105710004DE00278092A05D002780E2A02D00278DC +:105720000F2A06D14278002A03D0042008700020F6 +:105730003DE00278032A09D18278012A0DD08278CF +:10574000022A0AD005200870002030E08278002A62 +:1057500003D005200870002029E00278521E13D0E3 +:10576000521E25D0521E37D0521F012A44D9921EF4 +:105770004DD0521E59D0521E3ED0521E63D0521EE2 +:105780006DD0521E79D083E0C2887C4B9A4207D2FA +:105790000289002A08D000896438794A904203D3EC +:1057A00006200870002002E000200870012000BDE3 +:1057B000C28812B2734BD218734B9A4207D2028935 +:1057C000002A08D0008964386D4A904203D306202D +:1057D00008700020EBE7E7E7C288643A684B9A421A +:1057E00005D20089694A8018694A904203D306208D +:1057F00008700020DBE7D7E7C288002A02D10089C1 +:10580000002803D0062008700020D0E7CCE7C2882B +:10581000AE4B9A4204D100890A38AD4A904203D374 +:10582000062008700020C2E7BEE7C288A94B9A4252 +:1058300004D100890A38A64A904203D30620087092 +:105840000020B4E7B0E7C288A34B9A4202D1008996 +:10585000002803D0062008700020A8E7A4E7C2882B +:10586000012A02D0C288022A02D10089002803D06E +:105870000620087000209AE796E7C288002A02D125 +:105880000089002803D00620087000208FE78BE7EE +:105890000320087000208AE7C71C002800B501001B +:1058A000C9B2012902D0C0B2022801D1012000E012 +:1058B0000020C0B200BD10B504002000C0B2FFF748 +:1058C000EDFF00280AD12000C0B2032806D0200036 +:1058D000C0B20A2802D0E4B20B2C01D1012000E0B2 +:1058E0000020C0B210BD80B58EB00100C9B204293D +:1058F00008D27A490200D2B20C235A438918897A15 +:10590000002901D001200EE06946C0B2FFF724FE55 +:10591000002806D068463221405C002801D00120D2 +:1059200000E00020C0B20FB000BD00B56C480078A8 +:10593000002801D0012000E00020C0B200BD38B531 +:105940008EB067480478002510E069462800C0B290 +:10595000FFF702FE002808D068463221405C00288C +:1059600003D020000124AC4004436D1C2800C0B2C9 +:105970000428EAD32000C0B20FB030BD11270000C8 +:10598000FDE9000010270000214E0000D4FEFFFFBB +:10599000BD02000038B58EB000252C0018E0694625 +:1059A0002800C0B2FFF7D8FD002810D06846417823 +:1059B000042908D04178072905D04178082902D068 +:1059C0004078092803D120000124AC4004436D1C19 +:1059D0002800C0B20428E2D3FCF732FD002802D030 +:1059E00020000F2404432000C0B20FB030BD38B5F2 +:1059F0008EB000252C0010E069462800C0B2FFF7E9 +:105A0000ABFD002808D068463421405C002803D054 +:105A100020000124AC4004436D1C2800C0B20428BF +:105A2000EAD32000C0B20FB030BD80B5FFF787FFCA +:105A30000100002005E00A00D207D20F8018C9B289 +:105A400049080A00D2B2002AF5D1C0B202BD10B591 +:105A50008EB0002418E069462000C0B2FFF77CFD3C +:105A6000002810D068463221415C00290BD0017813 +:105A7000052926D00178062923D00178072920D0CE +:105A8000007808281DD0641C2000C0B204281AD257 +:105A900012482100C9B20C2251434118897A0029C9 +:105AA000D9D02100C9B20C225143415C0A2906D049 +:105AB0002100C9B20C225143405C0B28CBD10120FC +:105AC00002E0012000E000200EB010BD5AA5000049 +:105AD0004F020000524B00003CC30000AC1A0028EB +:105AE000C41C002810B5002400E0641C2000C0B2D3 +:105AF00004280AD22000C0B2FFF715FDC0B2FCF79F +:105B000068FF0028F1D0012000E0002010BD000057 +:105B100070B592B0012421006A461170AF490A683D +:105B2000521C0A606A4601A9FFF79EFD002805D0B5 +:105B3000694601A8FFF7DFFD00280AD1A8480168DF +:105B4000491C016001AA684601780220FFF75AFD4E +:105B5000BCE101AD2878092836D0A2480178002997 +:105B60001ED0A988A04A1288914219D19F48007876 +:105B700000280BD09E4901A8FFF7B3FC002805D0F0 +:105B800001AA00210320FFF73DFD08E094480168C9 +:105B9000491C016001AA08210220FFF733FD95E1AD +:105BA0000078002810D090480188A888FFF78FFC63 +:105BB000002809D18A480168491C016001AA08210E +:105BC0000220FFF71FFD81E12000864908702000B8 +:105BD00086490870A88884490880854801A94CC96D +:105BE0004CC00C390C38287809280CD1A888FFF74C +:105BF00014FC01AA00210420FFF704FDBB48016842 +:105C0000491C016062E128780F280CD1A888FFF7B1 +:105C100004FC01AA00210120FFF7F4FCB34801684D +:105C2000491C016052E12878082815D102F084FF50 +:105C3000002803D0A888FFF7F0FB03E0A988687864 +:105C400000F056F901AA00210120FFF7DBFCA7486C +:105C50000168491C016039E128780C2813D1687863 +:105C60008440C348017821430170C24801780C4345 +:105C7000047001AA00210120FFF7C4FC9B480168C1 +:105C8000491C016022E128780D283BD16878FFF794 +:105C90002AFE002809D0CA480168491C016001AAEF +:105CA00009210220FFF7AEFC10E104F017F90028EB +:105CB0000BD1FCF7C5FB002807D16878FFF733FC50 +:105CC000C0B202F09BFD002805D101AA0B210220E1 +:105CD000FFF798FCFAE0A64801786A782300934021 +:105CE0000B430370A34801786A7894400C43047016 +:105CF00001AA00210120FFF785FC7C480168491CAE +:105D00000160E3E004F0EAF8002805D001AA0B21C5 +:105D10000220FFF777FCD9E028780E286AD102F03C +:105D20000BFF002807D102F0DEF8002803D1FFF7AF +:105D3000FCFD002809D0A2480168491C016001AAA5 +:105D400009210220FFF75EFCC0E0FFF750FE0F289C +:105D50000CD003F02DFB002801D00D2100E007211D +:105D600001AAC9B20220FFF74DFCAFE004F086F8AB +:105D700003F069FA002808D1032004F087F801AA8B +:105D80000E210220FFF73EFCA0E020008D490870A4 +:105D9000FCF770FF8C494018C0490860A988E88862 +:105DA000C0B202F0C6FD002807D101AA0E210220D0 +:105DB000FFF728FCBA48047088E00F206C4908708F +:105DC0006C490870B648047001AA00210120FFF751 +:105DD00019FC46480168491C016077E0481C00280E +:105DE0004C1C0028C51C0028A01C0028C61C00282C +:105DF0009C1B002802F0A0FE002809D07048016812 +:105E0000491C016001AA09210220FFF7FBFB5DE0AC +:105E10002878FFF743FD00281DD004A96878FFF714 +:105E20009BFB002805D101AA0E210220FFF7EAFB07 +:105E30004CE004A83421405C00280CD103F0B8FAEF +:105E4000002801D00D2100E0072101AAC9B20220DB +:105E5000FFF7D8FB3AE0FFF7FAFD002809D05848D1 +:105E60000168491C016001AA09210220FFF7CAFB51 +:105E70002CE028780A2802D028780B2811D102F0CB +:105E800032F8002803D1FFF750FD002812D04C480B +:105E90000168491C016001AA09210220FFF7B2FB39 +:105EA00014E06878FFF71FFD002811D0A9886878F2 +:105EB00000F01EF801A800F05FF801AA00210120FF +:105EC000FFF7A0FB09480168491C016012B070BDD2 +:105ED000FFF7ABFD0428EDD339480168491C016088 +:105EE00001AA0A210220FFF78DFBEFE7541C0028CE +:105EF000F8B504002000C0B2042837D20F002000FB +:105F0000C0B2FFF710FB06000125390089B2280056 +:105F1000B040C0B2FCF72BFBFCF72EFA390089B277 +:105F20003000C0B2FCF78FFABFB239003000C0B207 +:105F300001F0AEFF0020AB492200D2B20C235A433D +:105F400089188872A8490A782800A04082430A70FC +:105F5000074801782A00A2400A43027005480178E8 +:105F60002A00A2400A430270BD480570F1BD00003E +:105F7000041300280513002838B501004C78994D0A +:105F80002000C0B20C22504328180A22FEF7C6FE99 +:105F9000012001002200D2B20C235A43AA189172A8 +:105FA00091490A780300A34013430B70AD490A7866 +:105FB0000300A34013430B70A949087031BD0000D2 +:105FC000501C0028C81C0028B80B0000F8B50400BD +:105FD0006078FFF7A8FA05002000FFF7CFFA070066 +:105FE0002000FFF7E8FA06002078FFF764FC00289D +:105FF00015D003F043FF03F026F9002804D1032055 +:1060000003F044FF002047E003F038FF01209649E9 +:106010000870FCF72FFE95494018954908602078D4 +:10602000012808D0022811D003281BD00A2824D028 +:106030000B2829D02FE0A08800903300DBB23A0073 +:10604000E1882800C0B202F093F925E0A088009012 +:106050003300DBB23A00E18809B22800C0B202F096 +:10606000C7F919E0A08800903300DBB2E288A1787C +:106070002800C0B202F0E4F90EE0A288390028003E +:10608000C0B202F01EFB07E0A28839002800C0B2AF +:1060900002F065FB00E00020F2BD0000641C002857 +:1060A00006130028F8B584B0FCF7E4FD009003F077 +:1060B00015FF002806D16F4801680098FFF7FEF928 +:1060C000002800D14BE0002000E0401C0100C9B2D4 +:1060D000042944D20326684F39780D183540414CC5 +:1060E0002900C9B20C2251436118897A0029ECD0E9 +:1060F00001A82900C9B20C22514361180A22FEF7F7 +:106100000DFE00202900C9B20C225143611888728B +:10611000012435490A782000A84082430A702800EB +:10612000401C06403E70009864305249086001A847 +:10613000FFF74CFF002804D101AA0E210220FFF72F +:1061400061FA484801782200AA400A4302704B488D +:1061500001782200AA400A4302704148047005B049 +:10616000F0BD38B58EB0002435E069462000C0B2DD +:10617000FFF7F2F900282DD0414D2000C0B2285C75 +:1061800000280AD03F482100C9B2382251434118A3 +:10619000684600F079F800281CD03A482100C9B2BE +:1061A00038225143401869463822FEF79DFD0120F0 +:1061B00001002200D2B2A9542A490A780300A34060 +:1061C00013430B702D490A780300A34013430B704F +:1061D00023490870641C2000C0B20428C5D30FB046 +:1061E00030BD0000AC1A0028C41C002838B51E4C75 +:1061F0002078002832D002F09FFC00282ED1FCF736 +:1062000039FD0500FFF791FB002807D101F06BFE77 +:10621000002803D1FFF766FC002804D01348281893 +:10622000134908601AE0124801682800FFF746F990 +:10623000002813D003F022FE03F03CF8002803D11D +:10624000032003F023FE09E003F018FE0020207075 +:106250000120034908700F200849087031BD000073 +:106260000313002804130028C81C0028B80B0000E2 +:10627000641C00286C1C0028C91C00280513002879 +:10628000601C00281819002800B502780B789A4283 +:1062900027D142784B789A4223D182788B789A42E0 +:1062A0001FD1C278CB789A421BD142684B689A4280 +:1062B00017D13022825C3023CB5C9A4211D132223A +:1062C000825C3223CB5C9A420BD13122825C312337 +:1062D000CB5C9A4205D13422805C3422895C8842AE +:1062E00001D0012000E00020C0B200BD00B5007860 +:1062F00000280FD0022811D00ED304280CD00FD3C1 +:1063000006280FD00ED308280CD00BD30A280DD0A6 +:106310000AD30DE000200CE001200AE0022008E092 +:10632000032006E0042004E0062002E0072000E04D +:10633000072000BD00B5407800280ED0022810D0FC +:106340000DD3042811D00ED3062812D00FD308285D +:1063500013D010D3092812D013E0002012E001203E +:1063600010E002200EE003200CE005200AE00420EB +:1063700008E0062006E0072004E0092002E00B20E8 +:1063800000E0092000BD7CB5FFF7D9FA0400FFF753 +:1063900001FB0500684602F0DCFB002805D06846DA +:1063A0004078032801D1012600E0002603F096FD85 +:1063B000002808D003F09CFD002801D1032000E054 +:1063C0000420C0B21BE0FFF742FB002801D00520EB +:1063D00015E0EDB2002D06D1F6B2002E03D103F088 +:1063E00087FD002801D0042009E0E4B2002C03D18D +:1063F00002F0A2FB002801D0022000E0012076BDBF +:10640000F8B584B0FFF79BFA69464871FFF7C2FA06 +:106410000400FFF7ECFA69460871FFF718FB6946BC +:10642000C87002A802F095FBC0B2002805D002A8EF +:106430004078032801D1012000E000202100C9B2EA +:1064400000290AD1C0B2002807D103F051FD00286D +:1064500003D102F0ADFF002801D0012500E00025A6 +:10646000934806780F273E40FFF78DFF0001304329 +:10647000694688708F480078694648708E48007871 +:106480006946087003F02AFD002801D0102600E0BC +:10649000002602F051FB002801D0202000E000205F +:1064A0006946C978002901D0402100E000216A46F0 +:1064B00052793A40164330430143E80108433C40D7 +:1064C000694609790A012243BB4909780F40D02364 +:1064D0003B43694689786C46647824020C43B7498B +:1064E0000988090421436C462478C0B20002204385 +:1064F000D2B214040443DBB21A062243B04803F0BC +:106500009DFA05B0F0BDF1B594B0AE4814A9097874 +:106510000C2251434018019006A914A80078FFF7F7 +:106520001BF8002801D10020C0E006A8FFF7DEFE1E +:10653000040006A8FFF7FEFE070006A8C07869461B +:10654000087006A83221405C002803D006A830213C +:10655000455C00E00025079869464880994814A9E1 +:1065600009780C2251434018807A002817D00198EE +:1065700000780A2803D0019800780B2801D1042460 +:1065800000E001240127019880786946087001988D +:106590008088694648800198FFF70DF8050006AE2F +:1065A0003220305C002808D1864814A909780C22D2 +:1065B00051434018807A002802D00420059001E061 +:1065C000002005903420305C002802D00820049080 +:1065D00001E0002004903420305C002805D00998A8 +:1065E000002802D11020039001E000200390342005 +:1065F000305C002809D00A98002806D009980A992A +:10660000884202D32020029001E00020029070789E +:10661000042802D14020019001E000200190707810 +:10662000072803D0FBF70CFF002801D0802000E0F2 +:106630000020694609788907890F059A0A43049959 +:106640001143039A0A4302991143019A0A431043E2 +:106650003421715C002907D00D998C4A914201D3F5 +:106660008B4A02E00D9A00E08A4A14A90978E4B244 +:1066700023071B0FFFB23C01F02626401E433302C6 +:106680000B43C0B200041843694649880906014318 +:106690006846408880B2000A80B292B21302034377 +:1066A000EDB22A061A437C4803F0C8F915B0F0BDD4 +:1066B000C11C0028C21C0028C31C0028F1B590B0E2 +:1066C00001A910A80078FEF747FF002801D100209B +:1066D00070E0802040020499814203D36D496A46EC +:1066E000518002E004996A4651800599814203D3A2 +:1066F00068486946088002E005986946088007985E +:1067000019303221FDF7F2FC0400FF2C00D9FF24E0 +:1067100001A84078042801D1012700E0002701A842 +:106720004078072803D0FBF78BFE002801D0022514 +:1067300000E0002501A84078082801D1042600E0E7 +:10674000002601A84078092803D002F031FE002875 +:1067500001D0082100E000213D432E4331430F20AA +:1067600001AA93780340090119433123D25C1040F8 +:106770004A4A10AB1B78D25C1201024310A8007881 +:10678000C9B20B02034368464088010419436846B6 +:106790000088E4B223040343D2B212061A434048ED +:1067A00003F04CF9002801D1002003E010A8007884 +:1067B00000F00AF811B0F0BDD01C00289E1C002883 +:1067C00001030000AC1A002878B585B00400200051 +:1067D000C0B2042809D22000C0B2FEF7A4FE694668 +:1067E000C0B2FCF75DFA002801D0002031E0684615 +:1067F0004178002901D0012100E000218278002A9F +:1068000001D0022200E00022C378002B01D0042333 +:1068100000E000230579002D01D0082600E00026C5 +:106820004579002D01D0102500E000250A431343CF +:106830001E433543E4B2EDB22A022243C188090463 +:1068400011430389808902041A43C120800003F0A8 +:10685000F5F806B070BDE0B5684602F07AF9002898 +:1068600001D1002011E068460178427812020A4303 +:1068700081780B041343C178090619438388C088C3 +:1068800002041A43844803F0D9F80EBD1127000012 +:1068900010270000FFFF000002030000681C002812 +:1068A00003030000F8B5FCF7E5F904007B4D296807 +:1068B0002000FEF703FE002805D00120784908706B +:1068C000200064302860774D29682000FEF7F6FD2F +:1068D000002805D001207449087020006430286029 +:1068E00072480078002814D1714801682000FEF732 +:1068F000E5FD00280DD06F4A6F4800781070012028 +:106900006E490B781278050095401D430D7067495C +:1069100008706B480078002814D16A48016820008C +:10692000FEF7CCFD00280DD0674A6848007810704B +:10693000674901200B781278050095401D430D70C2 +:106940005F490870564D287800281ED0FFF758FD83 +:10695000002815D0002028705E490A78521C1207C2 +:10696000120F0A705C490A78002A04D05B4A107042 +:106970005B4A107008705B480168491C016003E0C5 +:1069800059480168491C016085E0474D2878002876 +:106990000FD0FFF760FF002806D000202870514874 +:1069A0000168491C016003E04F480168491C01600F +:1069B00071E0002500E06D1C2800C0B204282CD234 +:1069C0000127AF403D4E30783842F4D02800C0B2A5 +:1069D000FFF799FD00281BD03078B843307033485A +:1069E000017800290FD033490978EDB28D420AD1E0 +:1069F00031490A78521C9207920F0A7000210170E7 +:106A000019342B48046037480168491C016003E0D1 +:106A100035480168491C01603DE0002500E06D1C1F +:106A20002800C0B2042836D20127AF40284E307863 +:106A30003842F4D02800C0B2FFF740FE002825D02D +:106A40003078B843307029482900C9B2415C491CEC +:106A50000907090F2A00D2B2815419480178002988 +:106A60000FD019490978EDB28D420AD117490A7839 +:106A7000521C9207920F0A700021017019341148BC +:106A8000046018480168491C016003E01648016869 +:106A9000491C0160FFE7F1BD06030000701C0028DF +:106AA000031300287C1C002806130028CE1C002895 +:106AB000741C0028CC1C0028CA1C002804130028C1 +:106AC000CF1C0028781C0028CD1C0028CB1C0028D7 +:106AD00005130028D01C0028C71C0028C11C002852 +:106AE000C21C0028581C00285C1C0028681C0028B8 +:106AF00070470000704700001206130A1A43130C77 +:106B00001A4300BF094205D0830707D00270401C1A +:106B1000491EF9D1704700000022FFE71300103929 +:106B200006D330B41400150010393CC0FCD230BC80 +:106B3000490700D30CC000D504C0890002D30280ED +:106B4000801C002900D5027070470000F8B50200D3 +:106B500000231800A94C2468002959D000920A7813 +:106B60001207120F009D10352E680F27BE433243C7 +:106B70002A604A78FF25AC43D2B222438C78002C9D +:106B800001D0012400E01C009D4D1540240280220C +:106B9000520014402C430122CE781640994D2540D6 +:106BA00074028026B60034402C430D79002D01D0AC +:106BB000160000E01E00944D2540B4028026F60029 +:106BC00034402C434D79002D01D0160000E01E000A +:106BD0008E4D254074078026B60534402C438D79B0 +:106BE000002D01D0160000E01E00A14D2540B40785 +:106BF0008026F60534402C43C979002901D01300C2 +:106C0000FFE762005208D9071143009A116000E0C3 +:106C10009848F2BD0021016001617047F0B585B070 +:106C20000C000025019594490E6894490968049167 +:106C300093490968039193490F6893490968029140 +:106C4000002C00D1D4E00090009800F0E7F8029901 +:106C50008020C0000843802189000143802040003B +:106C600008430222024301210A4304201043009AF0 +:106C7000106120784007400F072296433043627826 +:106C80005207520F70239843120170261640064394 +:106C90000322A07810407D4B33400602C0208000C4 +:106CA00030401843E378002B01D00B0000E02B00AC +:106CB000774E0640D80280231B01184030432379C9 +:106CC000002B01D00B0000E02B0046007608D8070F +:106CD0003043009B186060798006800E049B3F263D +:106CE000B3431843A3791340C026B0439B01C02689 +:106CF0001E400643E07943075B0F664830401E02A2 +:106D0000E023DB0033400343207A002801D00D004C +:106D1000FFE75F4E1E40E80280231B01184030430E +:106D2000657A1540874B03402D03C0208001284021 +:106D30001843A57A1540844B0340AD03C0200002E0 +:106D400028401843A3891D052D0D804B03402D04B9 +:106D50007F4828401843A37B0B4045006D08D807A7 +:106D60002843009B5860E07B4007400F039B0725AA +:106D7000AB431843237C0B404025A8439B0140258F +:106D80002B400343607C014080208343C801802165 +:106D900008401843A17C6F4B03400902FF2000020A +:106DA00008401843E17CC906C90E6B4B0340090437 +:106DB000F820400308401843217D0A4067490140FC +:106DC0009205C02000041040084300998860E08AC2 +:106DD000390C090480B20843218B82B208041043A5 +:106DE0000099C86021001A31009800F055F801E0C0 +:106DF00020480190019805B0F0BD0000C0E80010E7 +:106E0000FFFEFFFFFFFDFFFFFFFBFFFFFFFFFFDFB9 +:106E10003830016801220A43026070473830016847 +:106E200001229143016070473C30016801220A430E +:106E30000260704710B503000020002916D0002A18 +:106E400014D05B6A1C000C80190F0C00E407E40FDF +:106E50001470990F0C00E407E40F9470590F0C00A4 +:106E6000E407E40F5470D90FD17000E0014810BD61 +:106E7000FFFFFFBF0100DA00C4E80010C8E80010FF +:106E8000CCE80010D0E80010D4E80010FFFCFFFFB1 +:106E9000FFF7FFFFFFF8FFFFF0B50A00002319001E +:106EA0006F4C2468002A49D05579002D01D0012665 +:106EB00000E01E006B4D2540B4028026F6003440F1 +:106EC0002C431579002D01D0012600E01E00664DEF +:106ED000254074028026B60034402C43D578002D1E +:106EE00001D0012600E01E00604D254034028026BE +:106EF000760034402C435578002D01D0012500E068 +:106F00001D000226B4436D00022635402543147847 +:106F1000002C01D0012400E01C0001260127BD4304 +:106F200034402C439278002A00D11E00042294435E +:106F3000B20004231A402243826100E0474908005E +:106F4000F0BD0000FFCFFFFFFF3FFFFFFFFF00F09E +:106F50000000FF0FFF00FFFFFFFFE0FFFFFF3FFF0D +:106F6000F0B50A0000231900414C2468002A49D0DA +:106F70005579002D01D0012600E01E00394D254035 +:106F8000B4028026F60034402C431579002D01D040 +:106F9000012600E01E00344D254074028026B60014 +:106FA00034402C43D578002D01D0012600E01E008E +:106FB0002E4D254034028026760034402C435578EF +:106FC000002D01D0012500E01D000226B4436D0014 +:106FD0000226354025431478002C01D0012400E01E +:106FE0001C0001260127BD4334402C439278002A1F +:106FF00000D11E0004229443B20004231A4022430D +:10700000026100E015490800F0BD000010B5020063 +:10701000002000291FD01269930A1C00E407E40F26 +:107020004C71530A1C00E407E40F0C71130A1C0096 +:10703000E407E40FCC7053081C00E407E40F4C7025 +:1070400013001C00E407E40F0C7092081300DB0728 +:10705000DB0F8B7000E0014810BD00000100DA007A +:10706000D8E80010FFFBFFFFFFFDFFFFFFFEFFFF63 +:10707000DCE8001000B5012027490A6852080240E8 +:10708000002A01D0022001E00968084000BD27481D +:1070900001680800C007C00F704700B5C21E022A71 +:1070A00001D3012002E0C01E0860002000BD1CB515 +:1070B000FF246946FFF7F1FFC0B2002802D020008C +:1070C000C0B207E03C480099890041580800C00759 +:1070D000C00FC0B216BD00B5002801D0032801D3EF +:1070E000012002E0401E0860002000BD1CB5FF2406 +:1070F0006946FFF7F0FFC0B2002802D02000C0B2FE +:1071000008E03448009909014018C1680800C00728 +:10711000C00FC0B216BD0000241526402E480068DE +:1071200081080800C007C00F7047000040152640C6 +:1071300038B504002000C0B208280DD3274D18220E +:107140002749280000F0D0FB0020E8752548264993 +:107150000860002000F028FC24482100C9B2890002 +:1071600041580A00D205D20F002A05D0E4B2A1008E +:1071700040580007000F00E0FF2032BD38B5050081 +:107180002800C0B208280ED3144C1822144920003D +:1071900000F0AAFB0020E075892000011249086078 +:1071A000002000F001FC1148EDB2A9004058000990 +:1071B0008007800F32BD0000401626400F4800684F +:1071C000000AC0B270470E480068000AC0B270479B +:1071D000000000000019264010002740181B00285E +:1071E0004CE200105B080000E81B0028401226401B +:1071F00004480068000AC0B2704700001010204028 +:107200000C1020400810204038B50400072C0ED385 +:10721000124D18221249280000F066FB0020E87584 +:10722000CE2040000F490860002000F0BDFB0A4856 +:10723000A10040584007400F010009B2042907D1BE +:107240000448A1004058C106C90E802040000843F0 +:1072500000B232BD0001264000122640181B002853 +:10726000A8E20010E81B00281E4909688A03920B57 +:107270000260090E0A00D207D20FC27117490968CD +:107280000A00D204D20C82800A00120CD2B202810F +:10729000090CC9B24181264909680F220B0013402D +:1072A00003730B091A4042730A0AD204D20CC2813A +:1072B000090F8907890F0174094909680A0A5207E9 +:1072C000520F82710A00120CD205D20D4282890F30 +:1072D0000A00D207D20F027570470000341526400D +:1072E0003C152640301526401CB50C006946FFF7BA +:1072F000D4FE0100C9B2002901D0C0B217E00D4888 +:107300000099890040584106490E21601F21020A58 +:107310000A406260020C1140A160010F8907890FC9 +:107320006173C00E0100C907C90F2173002016BD8B +:1073300038152640001626401CB50C006946FFF79C +:10734000CAFE0100C9B2002901D0C0B233E01A4818 +:10735000009909014158CAB222601F220B0A13404A +:1073600063600B0C1A40A260090F8907890F217313 +:107370000099090141184A68D10F61730721130F61 +:107380000B40002B01D0012300E00023A373120265 +:10739000120A2261009A120180188068C20F2275B9 +:1073A000020E1300DB07DB0F63750200A275000CF1 +:1073B0000140E175002016BD0019264080B501008E +:1073C00086481822FDF790FC0120854908700020AE +:1073D00002BD000000B583490968C90F002907D024 +:1073E0007F490978002907D100210160032000BDF1 +:1073F000002101600320FAE7784909680160002054 +:10740000F5E7000010B50400FFF734FE002803D1B3 +:107410000020206003200BE071480078002804D091 +:107420006E4880682060002002E000202060032079 +:1074300010BD00B56A490978002904D06749496838 +:107440000160002002E000210160032000BD000077 +:1074500000B565490968C90F002907D06049097856 +:10746000002907D100210160032000BD0021016037 +:107470000320FAE75949C96801600020F5E70000D8 +:1074800000B55A490968C90F002907D0544909783D +:10749000002907D100210160032000BD0021016007 +:1074A0000320FAE74D49096901600020F5E7000073 +:1074B00010B50400FFF732FE002803D10020206041 +:1074C00003200BE046480078002804D04348406978 +:1074D0002060002002E000202060032010BD00009A +:1074E00010B50C00C0B2FFF78FFE00280CD0401E74 +:1074F0000ED0401E10D087214900401A10D0401EE7 +:1075000012D0C01E14D017E02000FFF763FF16E072 +:107510002000FFF78EFF12E02000FFF773FF0EE060 +:107520002000FFF795FF0AE02000FFF7C1FF06E00B +:107530002000FFF7A5FF02E000202060032010BD1F +:1075400080B501000020FFF7CBFF02BD80B503220C +:10755000D2B2824203D200200860012003E0401C26 +:10756000C0B2FFF7BDFF02BD30B587B0040068466A +:10757000FFF7E6FF0100C9B2002903D00021216016 +:10758000C0B228E001A8FFF76FFE01AD287C0228F9 +:1075900003D10098206000201DE07B480068C00FE8 +:1075A000002808D0FFF773FDC0B2002807D10020E3 +:1075B000206003200FE00098206000200BE000987E +:1075C00001994843A988FCF791FDE979491CFCF72A +:1075D0008DFD2060002007B030BD0000001B00289A +:1075E000A91C002818152640081526400C15264011 +:1075F000F0B58BB004000D0069462000C0B2FFF763 +:10760000A5FF0100C9B2002903D000212960C0B242 +:10761000B7E02000C0B2022848D307A92000C0B2BA +:10762000401CFFF761FEC0B200280DD0824E182228 +:107630008249300000F058F90020F07580488149F7 +:107640000860002000F0B0F97F482100C9B289002D +:10765000401808380068C00F002807D007A8407BF2 +:10766000022807D10098286000208AE0009828604E +:10767000002086E0E4B2641C2000FFF718FD010042 +:10768000C9B2002902D0C0B2FF2803D1002028606F +:10769000032076E00098079948430899FCF726FDF7 +:1076A0000999FCF723FD286000206AE001A9200069 +:1076B000C0B2401CFFF740FEC0B200280DD05E4EA5 +:1076C00018225E49300000F00FF90020F0755F4885 +:1076D0005C490860002000F067F95D482100C9B2EC +:1076E00009014058C00F002807D001AE307B0228A6 +:1076F00007D100982860002043E00098286000200F +:107700003FE0E4B2641C2000FFF7F0FC0100C9B2C6 +:10771000002902D0C0B2FF2803D100202860032036 +:107720002FE0707B012821D100980021019E0027C5 +:107730003F06320A17433606059A002392197B4109 +:10774000FCF7C2FE06000F0002980021039A0023F6 +:10775000FCF7BAFE02000B0030003900FCF7C1FB59 +:10776000000E0A021043090E286009E000980199F2 +:1077700048430299FCF7BAFC0399FCF7B7FC286070 +:1077800000200BB0F0BD00003015264010B50323DB +:10779000421E0400E4B2002C03D10800FFF7E4FE0F +:1077A0000CE01400DBB2E4B2A34204D31000C0B278 +:1077B000FFF71EFF02E0C0B2FFF792FE10BD38B522 +:1077C00004000D002000C0B2FFF7B2FC0100C9B2F6 +:1077D000FF2904D12800FFF7FDFDC0B21BE0694678 +:1077E000C0B2FFF7D3FF0100C9B2002903D00021C6 +:1077F0002960C0B20FE02000C0B2FFF7BFFCC0B2EA +:10780000002805D002280BD006D303280CD00FE0A7 +:1078100000982860002032BD009840082860F9E7F1 +:10782000009880082860F5E70098C0082860F1E714 +:10783000002028600320EEE7181B0028A8E20010B3 +:1078400063090000E81B0028001626407F0900009D +:10785000001926401CB5040069460020FFF7AFFF61 +:107860000100C9B2002903D000212160C0B209E0A3 +:10787000FFF7A9FC01000098C9B2491CFCF736FCCF +:107880002060002016BD1CB5040069460020FFF7EB +:1078900096FF0100C9B2002903D000212160C0B2C7 +:1078A00008E0FFF78BFC01000098491CFCF71EFC68 +:1078B0002060002016BD1CB504006846FFF7E3FFFA +:1078C0000100C9B2002901D0C0B208E0FFF790FC66 +:1078D00001000098491CFCF709FC2060002016BD3F +:1078E00080B5FFF7E8FF02BD71B58B0709D0521EC6 +:1078F00028D30B780370401C1B421FD0491C8B07F8 +:10790000F5D1121F3ED3274CE50140C9331BB343C9 +:107910002B4209D1830716D140C0121F32D340C970 +:10792000331BB3432B42F7D0121DFF231E4205D059 +:107930000670401C360A521E1E42F9D11100002268 +:10794000FFF7E0F871BDDB4216D0401E4670360AE4 +:107950004680360C0671001D121F06D340C9331B2A +:10796000B3432B42F2D0401CDEE7401C0AE040C982 +:10797000331BB3432B42D7D10680360C4680001D03 +:10798000121FF4D2121D0BD00B780370521E07D0B9 +:10799000401C491C1B42F7D10370401C521EFBD1F6 +:1079A00071BD00000101010100B501BEFEE780B517 +:1079B0000C4A0D490B68934210D00A6002684A6075 +:1079C00042688A608268CA60C2680A6102694A6164 +:1079D00042698A618269CA61C069086202F030FE48 +:1079E00001BD0000F3F2F1F0DC1A00287047704787 +:1079F00000B5C0B2042801D2012000E00020C0B2CE +:107A000000BD00B50100C9B2002901D1904813E0C2 +:107A10000100C9B2012902D1AF2040010CE00100F0 +:107A2000C9B2022901D18B4806E0C0B2032802D1B5 +:107A3000E120400100E0002000BD00B50100C9B216 +:107A4000002901D15A2011E00100C9B2012901D158 +:107A50005A200BE00100C9B2022901D15A2005E0E9 +:107A6000C0B2032801D15A2000E0002000BD00B5BB +:107A7000401A002801D4012000E00020C0B200BD5F +:107A800000B5884201D3401A00E0081A00BD00B5D5 +:107A90000200D2B2002A08D1C9B2022902D1E120E3 +:107AA000800001E0FA20800018E00200D2B2012A32 +:107AB00008D1C9B2022902D19620C00001E0AF204E +:107AC00080000BE0C0B2032807D1C9B2022901D15E +:107AD000614801E0C820C00000E0002000BD10B5F2 +:107AE00000280FD00C00002C0CD06178002909D0A0 +:107AF0002169002906D0A168002903D02169826884 +:107B0000914201D2002019E080680021A268002380 +:107B1000FCF7DAFC02000B00206940080021801805 +:107B2000594122690023FCF7DCF96168FFF7A8FFDF +:107B3000032801D2012000E00020C0B210BD00B532 +:107B4000C0B232382E2801D2012000E00020C0B29D +:107B500000BD00B50178022905D00178012904D1C2 +:107B60004078022801D1012000E00020C0B200BD11 +:107B700000B50178032905D00178012904D14078A6 +:107B8000032801D1012000E00020C0B200BD38B5BB +:107B90000C00BE490200D2B23C235A438D18C0B239 +:107BA000FAF78BFD0A202870AC7000203821685449 +:107BB00031BDB649C0B23C225043081809210170BA +:107BC000022181700021382281547047AF49C0B230 +:107BD0003C22504308180021017003228270382291 +:107BE0008154704770B505000C002800C0B2FFF743 +:107BF000FFFE002807D0FAF723FC002803D18020DD +:107C00004002844201D3002020E02800C0B2FAF7ED +:107C100054FD002807D1210089B22800C0B2FAF72C +:107C200012FC002801D0002010E09848EDB23C2161 +:107C30004D4345193C2100222E003000FEF75CFF29 +:107C40006C600120A87038216854012070BD0000CC +:107C5000FC530000901A00006C070000F2B59EB0C3 +:107C6000070016001C00002001903800C0B2FFF78A +:107C7000BFFE002819D029A80078022803D029A81F +:107C80000078032811D13800C0B2FFF7BAFE1E9960 +:107C900088420AD305A93800C0B2FBF787F800284C +:107CA00003D105A84078002801D10020E4E0774DF9 +:107CB0003800C0B23C21484328180490049836216B +:107CC000405C694648706846067027A8007800281E +:107CD00007D168460078FFF732FF002801D1002065 +:107CE000CAE008991E98FFF7CBFE02900394269EE7 +:107CF000289C27A8007800281CD00398002802D0D0 +:107D00000298002816D10298002811D1E4B2002C64 +:107D100008D131003800C0B2FFF764FF002801D15C +:107D20000020A9E03800C0B2FFF743FF0120A3E024 +:107D30000020A1E00FA804993C22FCF7D5FF200009 +:107D4000C0B2002808D131003800C0B2FFF74AFFA6 +:107D5000002801D100208FE03800C0B23C21484308 +:107D60002D18E4B2002C0CD028000FA93C22FCF7FF +:107D7000BBFF01200100A97001003822A954694607 +:107D80004870249C27A8007800282FD02598002828 +:107D900001D0019018E0002C01D0019414E0029869 +:107DA0000021FA2292000023FCF78EFB02000B0058 +:107DB00003980021801859410022401E9141039AE6 +:107DC0000023FCF78EF801900198002807D0029A52 +:107DD00001993800C0B2FBF78FF8002815D00821B0 +:107DE0003800C0B2FFF7D3FE002045E068460178B6 +:107DF0003800C0B2FAF748FD002806D00821380044 +:107E0000C0B2FFF7C4FE002036E029A800786870F1 +:107E1000002C01D0012001E029A8007828701E98CC +:107E2000A860EC60019828610020A861039828628E +:107E3000684600783521685427A8007837216854AF +:107E400068464078362168541E980899884201D3C4 +:107E5000012000E00220342168541E993800C0B28D +:107E6000FBF74CF9002806D008213800C0B2FFF714 +:107E70008EFE002000E001201FB0F0BD10B5F02103 +:107E800000227B4C2000FEF737FE10BD281800288A +:107E9000F8B505000C002800C0B2FFF7A9FD0028C6 +:107EA00013D02800C0B2FAF708FC7148EDB23C21AB +:107EB0004D4345193C21002632002F003800FEF7C3 +:107EC0001BFE6C602E700320A870F1BD38B5040055 +:107ED000002505E021002800C0B2FFF7D9FF6D1C86 +:107EE000042DF7D331BD00B5002000E0401C04286C +:107EF00009D25F493C22424389183822895C002913 +:107F0000F4D0012000E0002000BD78B585B0040069 +:107F100057482300DBB23C256B43C5182878082856 +:107F200035D1696889B22000C0B2FAF7EBFA0028AF +:107F300004D12000C0B2FFF749FE96E02000C0B295 +:107F4000FAF747FD002800D08FE0286B002806D004 +:107F5000296B2000C0B2FAF732FE002812D06968FF +:107F600089B22000C0B2FAF7CDFA002804D120006F +:107F7000C0B2FFF72BFE04E009212000C0B2FFF7DA +:107F800006FE72E02000C0B2FFF713FE6DE0C87875 +:107F900004280BD0C878022808D0C878032805D058 +:107FA000C878052802D0C878012805D10921200009 +:107FB000C0B2FFF7ECFD58E02878012855D0160034 +:107FC000287806281BD1E86AFA21490041183000B8 +:107FD000FFF74DFD002811D069462000C0B2FAF726 +:107FE000BBFD002805D009212000C0B2FFF7CFFD5E +:107FF0003BE00398A862EE620720287035E0E86A4B +:10800000FA21890041183000FFF731FD00282CD0FB +:1080100069462000C0B2FAF79FFD002805D009216B +:108020002000C0B2FFF7B3FD1FE0E86A361A0398DC +:10803000A96A401A00210F4A0023FCF745FA3200D2 +:108040000023FBF74EFF0600002E05D02000C0B233 +:10805000FAF733FB002805D009212000C0B2FFF752 +:1080600096FD02E02E630820287006B070BD000067 +:1080700028180028A0860100F8B592B0FAF77CF91C +:10808000FAF7F8FD0690002007900CE00621280082 +:10809000C0B2FFF77CFD03E02800C0B2FFF789FD06 +:1080A0000798401C07900798042800D348E1079DD3 +:1080B000A44807993C22514344183820205C0028EA +:1080C00006D008A92800C0B2FAF770FE002800D038 +:1080D000E6E7FAF7B5F9002803D108AEF0780728EB +:1080E00005D107212800C0B2FFF751FDD8E761682C +:1080F00089B22800C0B2FAF705FA002804D1280096 +:10810000C0B2FFF763FDCBE7F078062807D12078EF +:10811000082804D02800C0B2FFF758FDC0E7207837 +:10812000012816D1B078002813D06078207020780C +:10813000062802D10698E0620BE0E068002806D02D +:108140000698E168401861694018A06101E00020CC +:10815000A061207806280BD02078072808D0207846 +:10816000082805D02078012809D16078062806D192 +:10817000069A08A92800C0B2FFF7C7FE90E720784A +:1081800004282FD1E1690698FFF771FC002828D058 +:1081900060780590012004903720205C039060688F +:1081A000029020690190E0680090236A3520225CEB +:1081B000A1682800C0B2FFF751FD002811D1616805 +:1081C00089B22800C0B2FAF79DF9002804D128002E +:1081D000C0B2FFF7FBFC04E004212800C0B2FFF7A7 +:1081E000D6FC5DE7F078022802D0F078032801D1B0 +:1081F000012700E00027F078042803D03800C0B23F +:10820000002852D02000FFF7A4FC00280AD008A9BB +:108210002000FFF764FC002804D02800C0B2FFF75C +:10822000C8FC3DE72000FFF794FC002823D036204F +:10823000205C00281FD12800C0B2FAF73EFA0028BF +:108240000CD0FAF7FDF8002801D0072100E0082142 +:10825000C9B22800C0B2FFF79AFC21E704202070C1 +:108260000020A0610698FA21C9004018E0610120B1 +:108270003621605418E03800C0B2002809D0200030 +:10828000FFF776FC002804D02800C0B2FFF791FC6D +:108290000AE0FFB2002F01D0052100E00421C9B29D +:1082A0002800C0B2FFF773FCFAE6F078012804D189 +:1082B0002800C0B2FFF77DFCF2E6F078052805D172 +:1082C00006212800C0B2FFF762FCE9E6A069002899 +:1082D00000D1E5E6A1690698FFF7C9FB002800D1A7 +:1082E000DEE62800C0B2FAF7E8F900280CD0FAF769 +:1082F000A7F8002801D0072100E00821C9B2280012 +:10830000C0B2FFF744FCCBE62078032800D0BDE6DE +:1083100069462800C0B2FAF71FFC002805D00821E2 +:108320002800C0B2FFF733FCBAE60398616A8842BE +:1083300000D0B1E604212800C0B2FFF728FCAFE668 +:1083400013B0F0BD2818002810B586B0022405949B +:108350000024049400240394029300230193002337 +:1083600000930023D2B2C0B2FFF778FC06B010BD74 +:10837000F8B590B00C001D0062498C4211D2160075 +:10838000002E0ED0070006A93800C0B2FAF70EFD85 +:10839000002806D106A84078002802D00A980028B4 +:1083A00001D1002022E0200000210A9A0023FCF7DE +:1083B0008BF802000B005448002180185941534AA1 +:1083C0000023FBF78EFD022105910021049100217D +:1083D00003911699029100210191009600232A0031 +:1083E000D2B201003800C0B2FFF738FC11B0F0BDC6 +:1083F000F0B58BB007000E0014001D0001A9380075 +:10840000C0B2FAF7D3FC002803D101A840780028B5 +:1084100001D1002012E00A988119002901D500211C +:1084200003E03848814200DB38492B0022001098D5 +:108430000090DBB23800C0B2FFF79AFF0BB0F0BD7E +:10844000F6B585B004000E000698002815D01F0070 +:108450003800C0B2FFF773FB00280ED03000C0B266 +:10846000012803D03000C0B2022806D10C992000A8 +:10847000C0B2FFF7B7FB002801D1002040E039006F +:10848000C9B22000C0B2FAF7FFF9002806D00821CF +:108490002000C0B2FFF77BFB002031E053482100F1 +:1084A000C9B23C225143451869462000C0B2FAF7D0 +:1084B00053FB002806D008212000C0B2FFF767FB5D +:1084C00000201DE0039868623100C9B22000C0B2EC +:1084D000FAF76EFA002806D008212000C0B2FFF794 +:1084E00056FB00200CE00120287003206870342027 +:1084F0002E540698E8600020A86135202F540120F2 +:1085000007B0F0BD112700008813000010270000FD +:10851000F6B591B00C001E00129900290BD007008F +:1085200007A93800C0B2FAF741FC002803D107A818 +:108530004078002801D1002055E006940A99069859 +:10854000FFF79EFA0400002C07D1189B32220699EF +:108550003800C0B2FFF7F8FE45E006980A99884255 +:1085600001D3012100E002211298FF22F63290424D +:1085700003D31298A04A851800E0129DC9B23800B2 +:10858000C0B2FFF784FA0021C943491B814201D2DE +:10859000002028E02D1820000021FA22920000235C +:1085A000FBF792FF2A000023FBF79BFC02210591B9 +:1085B00000210491012103911899029101951299CA +:1085C00000910300002206993800C0B2FFF746FB75 +:1085D0000100C9B2002905D00449FFB23C2257432B +:1085E000C9194E61C0B213B0F0BD000028180028B0 +:1085F000F8B58AB007000E0014001D006946380067 +:10860000C0B2FAF7D3FB00280AD1684640780028A8 +:1086100006D00298002803D030000299814201D28E +:10862000002017E00021049A0023FBF74DFF020011 +:108630000B0002984008002180185941029A00233B +:10864000FBF74FFC2B002200D2B201003800C0B271 +:10865000FFF77AFE0BB0F0BDF0B58BB007000E004F +:1086600014001D0001A93800C0B2FAF79FFB0028D2 +:108670000AD101A84078002806D00398002803D02A +:1086800030000399814201D2002018E00021059AB0 +:108690000023FBF719FF02000B000398400800219C +:1086A00080185941039A0023FBF71BFC1099009195 +:1086B0002B00220001003800C0B2FFF729FF0BB0E9 +:1086C000F0BDFEB504000D0016002000C0B2FFF79B +:1086D0008FF9002802D02F00002F01D100203DE0AB +:1086E0002000C0B2FFF7A9F9050031002000C0B298 +:1086F000FFF778FA002807D02900C9B22000C0B2DD +:10870000FAF7C2F8002806D009212000C0B2FFF70E +:108710003EFA002022E005204D492200D2B23C233F +:108720005A4388546B463A0002212000C0B2FBF73E +:10873000DDF8002806D168460178002902D040788B +:10874000002806D109212000C0B2FFF720FA00203E +:1087500004E02000C0B2FFF72CFA0120FEBDFEB5F8 +:1087600004000D0016002000C0B2FFF741F90028F8 +:1087700002D02F00002F01D100203AE02000C0B22B +:10878000FFF75BF9050031002000C0B2FFF72AFABD +:10879000002807D02900C9B22000C0B2FAF774F847 +:1087A000002806D009212000C0B2FFF7F0F9002010 +:1087B0001FE0052026492200D2B23C235A438854A8 +:1087C0006B463A0000212000C0B2FBF78FF800286A +:1087D00003D168460078002806D109212000C0B2E4 +:1087E000FFF7D5F9002004E02000C0B2FFF7E1F95F +:1087F0000120FEBD000000000CFEFFFF70B504006C +:108800002000C0B2FFF7F4F8002809D02000C0B261 +:10881000FAF7DFF8002803D1F9F712FE002801D09B +:10882000002013E00A48E4B23C214C4304193820EC +:10883000205C002801D0002008E065683C2100226F +:1088400026003000FEF758F96560012070BD000079 +:108850002818002838B596B005000C00002C1AD056 +:108860002800C0B2FFF7C4F8002814D069462800D9 +:10887000C0B2FAF79BFA00280DD10FA92800C0B2A8 +:10888000FAF7E6FB002806D10AA92800C0B2FAF7D9 +:1088900063F9002801D000203CE01F48EDB23C21E4 +:1088A0004D43401901782170817861706946CA781A +:1088B000A2708A78E27042686260039AA260019AAC +:1088C000E260029A22610C9A6261149AA261099A8A +:1088D000E261059A2262069A6262079AA262089A87 +:1088E000E2620FAA527E3023E2543622825C3123A8 +:1088F000E2543822825C3223E2543622805C002823 +:1089000001D0012000E000203322A0544878342117 +:108910006054012017B030BD2818002870B53421EC +:1089200000242200B24D2E003000FEF7E5F86C70F6 +:1089300070BDF0B58FB007000E003800C0B200F077 +:108940003EF900900098002807D000F0F5F80028C4 +:1089500003D1FFF7C8FA002801D000203BE0002433 +:10896000250000E06D1C2800C0B2042818D201A91F +:10897000B0482A00D2B2805CFFF76CFF00280DD00F +:1089800001A83421405C002808D005980099496866 +:108990002A00D2B25200895A8842E3D200201AE05B +:1089A00034212200924C25002800FEF7A5F82770FC +:1089B000012001006170A0702681FAF75BF9E06088 +:1089C000E168009800F0D4F9002803D100F00AFB18 +:1089D000002000E001200FB0F0BDFEB50020694688 +:1089E000087000F0A9F8002800D18AE0804C2078B7 +:1089F00000F0E5F80700002F02D100F0F3FA80E064 +:108A0000FAF738F90600E0688B494118300000F0A9 +:108A1000CBF8002805D02089401C80B200F072F805 +:108A20006FE0684600F022F90500684600780028EB +:108A300002D000F0D7FA64E06078012817D1EDB2D7 +:108A4000002D09D032000021380000F0C5F90028BF +:108A500001D100F0C7FA54E02069AD494118300057 +:108A600000F0A2F8002801D000F0BCFA49E0B86894 +:108A7000E17818225143401802902169300000F03B +:108A80009CF801900298007D02281AD1EDB2002DC9 +:108A90000FD0207E002807D1380000F06AFA0028A5 +:108AA00006D100F09FFA03E03100380000F0AFFA81 +:108AB00027E0029880680199884201D200F092FA7A +:108AC0001FE00198616988421BD3EDB2002D04D0EC +:108AD0003100380000F09BFA13E000F01BF9002889 +:108AE00007D02089FFF7F2F93100380000F08FFA43 +:108AF00007E06069864940180199884201D200F078 +:108B000071FAF7BD70B5040000F016F8002809D01E +:108B1000200080B2F9F77EFDF9F72EFCA4B2200008 +:108B2000FFF7D4F9342100242200314D2E0030000B +:108B3000FDF7E2FF6C7070BD00B52D48417801294A +:108B400002D04078022801D1012000E00020C0B20C +:108B500000BD70B50400002C01D1002023E0FFF718 +:108B6000EBFF002807D0FAF785F82149096900F0E2 +:108B700024F8050000E000251D4E30782070707844 +:108B80006070B078A07000F035F8317909010143C8 +:108B9000E170F088A08080204002854201D38B4D97 +:108BA000FFE7E580012070BD00B5401A002801D420 +:108BB000012000E00020C0B200BD401A704710B58F +:108BC000002100E0491C0A00D2B2022A0EDA804AD3 +:108BD0000B00DBB218246343D35C0400E4B2A3426D +:108BE000F0D1C9B218204143501800E0002010BD58 +:108BF000781A002838B58EB000252C0012E069469E +:108C00000C482A00D2B2805CFFF724FE002808D06E +:108C100068463221405C002803D020000124AC408B +:108C200004436D1C2800C0B20428E8D32000C0B261 +:108C30000FB030BD9CE90010C027090000B50178D5 +:108C40000A290ED0417804290BD04178062908D092 +:108C50004178072905D04178082902D040780928B1 +:108C600001D1012000E00020C0B200BDF1B590B0FC +:108C700001242000694608701098002801D10020C6 +:108C800043E0002010990870002617E00498381A75 +:108C900009E001A8FFF7D2FF00282BD10498B842C1 +:108CA000F4D30498C01B01A93222895C002901D1A8 +:108CB000042802D3002069460870761C3000C0B238 +:108CC000042820D2434D3000C0B240002818478B02 +:108CD00001A9C3483200D2B2805CFFF7BBFD002877 +:108CE000D7D128792100B14001432971109804702F +:108CF00000200AE028792100B14001432971109831 +:108D00000470002001E06846007811B0F0BD00005A +:108D10003075000038B58EB0002400E0641C2000DF +:108D2000C0B2042821D22B482100C9B24900401802 +:108D3000458B6946AA482200D2B2805CFFF78AFDC3 +:108D400000280AD06846FFF779FF002805D103986C +:108D5000A84204D30398401B03E0002006E00398D8 +:108D6000281A0428DAD3002000E001200FB030BD1B +:108D7000F8B50600174D2889401C28812961AF48A5 +:108D80006861002400E0641C2000C0B204281AD2EC +:108D900070682100C9B24900405A2100C9B2490097 +:108DA000691848832B895A2270682100C9B249008A +:108DB000415A8B482700FFB2C05DFFF719FC00281D +:108DC000E1D1002000E00120F2BD0000FFFF000023 +:108DD00014E60010781A0028F8B590B00700002FAC +:108DE00004D008003B7BC0B2984201D30020BEE013 +:108DF000B8680B00DBB218246343C0180190904E92 +:108E000002207070F17001980078B07032610198A2 +:108E100040687061002030763089401C308100202D +:108E200016E001990200D2B2520089188989020025 +:108E3000D2B25200B218518301990200D2B252004C +:108E4000891889890200D2B25200B2185185401C9B +:108E50000100C9B20429E4D30198007D012801D1A1 +:108E6000012084E00198007D022863D100241EE0E7 +:108E70002000C0B24000301845840DE0290089B2BE +:108E8000BA8A891880B28142F2DAB88A2818210099 +:108E9000C9B24900711848842000C0B2400030189F +:108EA000408C2100C9B2490071184883641C20001D +:108EB000C0B2042821D201982100C9B2490040184B +:108EC000858902A946482200D2B2805CFFF7C2FC25 +:108ED000002810D00598010089B2BA8A89182A00A2 +:108EE00092B29142CADAB88A281A2100C9B249005E +:108EF00071184884D0E7002039E0002400E0641CA9 +:108F00002000C0B2042813D2338938692100C9B2C5 +:108F1000425C2000C0B240003018418B3048250030 +:108F2000EDB2405DFFF764FB0028E8D100201EE0B1 +:108F300001201CE0002400E0641C2000C0B20428D2 +:108F400014D2308900903D4B01984268019821006D +:108F5000C9B249004018818921482500EDB2405D21 +:108F6000FFF77AFB0028E7D1002000E0012011B0D4 +:108F7000F0BDF8B50600002E01D100202FE0304DE5 +:108F80002889401C288102202876002420000AE03D +:108F90000100C9B249006918498D0200D2B25200DD +:108FA000AA185183401C0100C9B20429F0D300E083 +:108FB000641C2000C0B2042810D22B89B27D20008E +:108FC000C0B240002818418D1E482700FFB2C05D86 +:108FD000FFF70EFB0028EBD1002000E00120F2BDDE +:108FE0009CE9001038B5164D2C89641C200080B215 +:108FF000F9F710FBF9F7C0F9200080B2FEF766FF21 +:109000002C8103206870F9F735FE286131BD38B531 +:109010000A000B4BD978491C0C00057BE4B2AC422A +:1090200003D30021DC88641CDC80C9B2FFF7D4FEC6 +:10903000002801D1FFF7D6FF31BD000030750000D8 +:10904000781A00289CE90010F8B5C0B0002001F0A3 +:1090500072FB20A9002000F016FA070069460120E3 +:1090600000F011FA04003800C0B2022801D1012535 +:1090700000E000252000C0B2022801D1012600E056 +:109080000026300028438749087086480078002869 +:1090900013D1FFB2002F04D120A800F04CFA002811 +:1090A00007D0E4B2002C08D1684600F044FA00284A +:1090B00003D101207C49087002E000207A49087041 +:1090C0007848007800280FD100200100BA4A1170BA +:1090D0007649086005E00021C943754A8300D150F4 +:1090E000401C2028F7D331E0F6B2002E16D0EDB2A6 +:1090F000002D05D02299029800F014FA00280DD016 +:1091000001206A4908600020202814D269468200A4 +:109110008958674A8300D150401CF5E70020634915 +:10912000086006E020A982008958614A8300D15076 +:10913000401C2028F6D35E48C068012803D10120D6 +:109140009D49087002E000209B49087041B0F0BDC5 +:10915000F0B595B053480078002803D096480078C1 +:10916000002801D1002065E0002400E0641C042CEC +:109170004ED2062767433F1D4D4DB800285801A920 +:1091800014226243885001AEB800281840681421A8 +:10919000614371184860B800281880681421614341 +:1091A00071188860B8002818C068142161437118CC +:1091B000C860B800281800690090B80028184069F5 +:1091C000012801D1012000E0002014216143711821 +:1091D0000874142060433018426801A814216143C8 +:1091E00041582000C0B200F02DF9B9006918496952 +:1091F00002290BD20099814208D114206043311812 +:109200002000C0B2F9F716FC0028AFD0002011E012 +:10921000002400E0641C042C0BD201A8142161433B +:1092200041182000C0B2F9F72FFC0028F2D000202E +:1092300000E0012015B0F0BD00205F49087001205A +:1092400019490870704710B5A0B01648007800287A +:1092500003D059480078002804D1002056490870EE +:1092600001201CE00020010006E0114A8B00D258CA +:109270006B468C001A51491C2029F6D30C49896889 +:10928000491C029103901C21684600F097F81C903D +:10929000A048006801214140684600F075F920B0FF +:1092A00010BD0000D11C0028D31C0028801C002801 +:1092B000F8190028F8B5B0B0974F3878002805D0D5 +:1092C0009448006801214140009101E00020009095 +:1092D0000026300005E00021C94310AA8300D150C8 +:1092E000401C2028F7D38D48109008201190387822 +:1092F000002803D08A488068401C00E001201290BA +:109300000120139034001FE0310019E0019810A9EA +:10931000AA00885010A80299AA00821851600399E7 +:10932000AA00821891600499AA008218D160099954 +:10933000AA008218116101A9097C0029E4D0012149 +:10934000AA0080184161641C042C12D206256543D2 +:109350002D1D01A92000C0B2F9F7FEFB002806D19F +:1093600006A92000C0B2F9F721FD0028CED00020C8 +:1093700016E01C2110A800F021F82C903878002865 +:109380000AD022480078002806D010A800F0E7F89C +:10939000002801D0012003E0009910A800F0F4F8A3 +:1093A00031B0F0BDA04800787047A0480078704701 +:1093B0009F48007870470000D21C0028F2B50026B4 +:1093C000F64300210A0000E0521C009B9A421AD288 +:1093D0009300C4580B0000E05B1C042BF4D2350052 +:1093E000E6B26E40240A0D0001E00F0004E0082DF3 +:1093F000F2D2F707F9D5904F7608B4463E0067469B +:109400007E406D1CF3E7F043F2BD0000D21C002843 +:10941000C0018A494018704700B5C0B2002805D085 +:10942000022808D004D3032807D009E0844808E0C4 +:10943000AF20400105E0834803E0E120400100E067 +:10944000002000BD38B50D001400C0B2FFF7E4FFE6 +:1094500002002800002A01D0002C02D10020C043C5 +:1094600010E0844200D2200000210023FBF72CF8FA +:1094700002000B00600800218018594122000023DF +:10948000FAF72FFD32BD10B50C00FFF7C1FF002C1D +:1094900001D100203CE0002104E08A0082588B00CA +:1094A000E250491C2029F8D3E068022801D30020AB +:1094B0002EE02068194988420BD16068082808D13D +:1094C0001C212000FFF77AFF216F814201D1022089 +:1094D0001EE020685C49884202D1606805280DD0F2 +:1094E00020685A49884202D16068062806D0206860 +:1094F000574988420BD16068072808D11C212000F9 +:10950000FFF75CFF216F814201D1012000E00020C4 +:1095100010BD0000801C0028D11C002838564D5377 +:10952000F819002800B5401A012801DB012000E0ED +:109530000020C0B200BD00B5002801D100200DE020 +:10954000002100E0491C202907D28A00825800230C +:10955000DB439A42F6D0002000E0012000BD10B5A8 +:10956000002801D100200EE0042100E0491C1C2944 +:1095700008D28A0082582F4B8C001B599A42F5D092 +:10958000002000E0012010BDFEB50500002D03D035 +:1095900000910098022801D3002043E00098FFF7D3 +:1095A00037FF070001970121380001F0E2F801219F +:1095B000380001F01CF9002801D1002032E000261B +:1095C000340007E00122A0002918A000381801F09B +:1095D00057F9641C202CF5D3300005E08100695850 +:1095E000144A8300D150401C202808D201998200DF +:1095F00089588200AA589142F0D0002012E00098C9 +:109600001449086001200100074A1170E968012926 +:1096100002D10649087002E030000449087004488D +:1096200006700120FEBD0000D11C0028D21C0028BD +:10963000D31C0028F81900282083B8ED000003147B +:10964000FC530000901A000035564D5336564D53CA +:1096500037564D53801C002800B5010009B200297F +:1096600005D40121C006C00E8140AE48016000BD96 +:1096700000B5010009B2002905D40121C006C00EC1 +:109680008140CC48016000BDF0B5020012B2002A52 +:1096900018D41822A44B040024B2A408A4001C5916 +:1096A000FF250600F6001640B540AC438901C9B25B +:1096B0000500ED002A409140214300B2800880005F +:1096C00019501CE00F22BC4C182503001BB213409C +:1096D000083B9B089B00060036B23240083A9208CD +:1096E0009200A258FF260700FF002F40BE40B24361 +:1096F0008901C9B2C0000540A9401143E150F0BD45 +:1097000000B5002A03D101228A40426002E0012212 +:109710008A40826000BD0268CA401000C007C00FC6 +:10972000704700B5022801D301200FE00B00DBB227 +:10973000042B01DB012009E0BC4B80001818C9B2E2 +:10974000405C824201D3012000E0002000BDF8B55A +:1097500004001F00022C01D3012023E015000E009D +:109760002A003100C9B22000FFF7DBFF012801D138 +:10977000012017E03000C0B2002816D1FF2F12D808 +:10978000AB4861034018A9004018802149014018E6 +:109790000168A84A0A403902FF231B020B40134309 +:1097A00003600020F2BD0120FCE7F6B2012E16D1C5 +:1097B00080204002874210D29D4861034018A900D2 +:1097C0004018A0214901401801689B4A0A4039020B +:1097D000C44B0B4013430360E3E70120E2E70120A1 +:1097E000E0E700B20012C0B27047F8B505000F0004 +:1097F0001600280000B2FFF7F4FF04002000C0B2FA +:10980000022801D301202CE032003900C9B2200027 +:10981000C0B2FFF786FF012801D1012021E0844872 +:109820002100C9B2490341182A00D2B29200891816 +:10983000C02212018A58AC491140FFB23B02C0223B +:1098400092001A400A43FF218A43F1B21143E4B265 +:1098500062038018EDB2AA008018C0221201815064 +:109860000020F2BD70B50400022C01D3012028E0D5 +:1098700015000E002A003100C9B22000FFF751FF89 +:10988000012801D101201CE0694861034158802270 +:1098900012060A43C02189041143FF2212040A431D +:1098A000914B1340F6B23202C02189001140194396 +:1098B000FF229143EAB20A436103425061034058D8 +:1098C000002070BD70B50400022C01D3012028E0F7 +:1098D00015000E002A003100C9B22000FFF721FF59 +:1098E000012801D101201CE0514861034158802228 +:1098F000D2050A43C02189041143FF2212040A43FE +:10990000794B1340F6B23202C0218900114019434D +:10991000FF229143EAB20A43610342506103405877 +:10992000002070BD00E100E000E400E038B5002058 +:109930000100974A11700100964A1170964908601B +:1099400000F0D4F8002803D000F02CF9002804D14E +:109950009248B849086000202BE0914C2000FBF7AA +:1099600091F9002804D08D48B2490860002020E019 +:10997000B1490020205EFBF7A4F900210220205EFF +:10998000FFF782FE0220205EFFF772FEAB4D28003B +:1099900001F05AFEAA49280001F0CCFAA549086056 +:1099A000002801D0002004E00220205EFFF754FED2 +:1099B000012032BD80E200E01CED00E038B504007B +:1099C000002C01D100202FE0FBF722F871490A7822 +:1099D00013006F4D2D78DBB2AB4203D1FBF71CF8BF +:1099E000002021E0C44B1500EDB22D015D5925602A +:1099F0001500EDB22D015D196D6865601500EDB2C1 +:109A00002D015D19AD68A5601500EDB22D015B1942 +:109A10001B7B2373521C1300DBB2102B00D30022DC +:109A20000A70FAF7F9FF012032BD000098E8001033 +:109A300000000440FF00FFFFFF0000FFF1B594B0FD +:109A40000D0016005021002422006F463800FDF75B +:109A500053F8149880210901884203D24E480068C7 +:109A6000002804D04D48A9490860002038E0684625 +:109A700021000170210001721499019108214C22EA +:109A800081540395049600E0641C2000C0B20828AD +:109A900021D26A4D2100C9B2280001F02DFF01003A +:109AA000C9B20129F0D0C0B20328EDD0149898496A +:109AB00008606A462100C9B2280001F049FE9349B6 +:109AC0000860002805D193480168491C0160012005 +:109AD00006E0002004E090480168491C0160002075 +:109AE00015B0F0BD00FFFF00FFFCFFFFF8B500253B +:109AF00000956846FDF7AEFE002801D0002046E044 +:109B0000864C0098A04205D300982100FAF7EEFA9F +:109B1000002901D000203AE000982100FAF7E6FA87 +:109B20000400002C03D0FF20801C844201D30020BD +:109B30002DE0FF2608363000FFF753FE0700002215 +:109B400000213800FFF7BEFE002801D000201EE0F3 +:109B5000002200213000FFF748FE002801D000203D +:109B600015E023005B1E002200213800FFF7EFFD07 +:109B7000002801D000200AE0002200213800FFF771 +:109B800071FE002801D1012000E02800C0B2F2BD22 +:109B9000A51C0028A61C0028DC1B00280100620070 +:109BA0000008002818B5A7B01AA85D493422FBF7B1 +:109BB0009BF80DA85B493422FBF796F868465A4992 +:109BC0003422FBF791F8594C1AAA07212000FAF722 +:109BD0004EFA002801D0002024E00DAA0621200022 +:109BE000FAF745FA002801D000201BE06A4601215F +:109BF0002000FAF73CFA002801D0002012E00122F0 +:109C000001212000FFF77CFDFA208000FBF756FAC7 +:109C100001212000FFF77FFD012801D1012000E094 +:109C20000020C0B228B010BD80B5044801F042F851 +:109C300001BD0000BC1B0028299C001000045440FA +:109C40000808002870B51400002C05D0207A0028E0 +:109C500002D12078002800D04DE035480168491C29 +:109C600001606068334908606068C02189008842EB +:109C700014D14C20205C082810D1E068C0B209281B +:109C80000CD1E068000AC0B2102807D12069002872 +:109C900004D1E068000C80B2F8F7BCFC26480178DB +:109CA0000A00521C1300DBB2102B00D30022130059 +:109CB000224D2D78DBB2AB4204D121480168491C0A +:109CC000016018E00C4B65680E00F6B236019D513C +:109CD0004C25655D0E00F6B236019E193573E568B8 +:109CE0000E00F6B236019E1975602469C9B20901E9 +:109CF00059188C60027070BD2817002800B5C0B2DA +:109D0000002802D101200F49086000BDD81B00289F +:109D1000D41B0028C81B0028CC1B0028005A620254 +:109D2000E4E4001018E500104CE50010800131401B +:109D3000C01B0028D01B0028A51C0028A61C00283A +:109D4000C41B0028DC1B00286B490A6808607047A8 +:109D50006A490A6810239A43C0B2000110231840D0 +:109D600010430860704765490A68654B1340C0B2EC +:109D700000028022520010401843086070475F497B +:109D80000A6852005208C0B2C0071043086070470A +:109D9000002070475B480068704710B504005948C0 +:109DA0000460BFF34F8FFFF7F5FFA04201D1012000 +:109DB00000E00020C0B210BDF8B50400FF20E23082 +:109DC0000090FFF7E5FF0700FFF7E4FF01252E00F5 +:109DD00000210A004C4B1A700A004C4B1A70009A72 +:109DE0002240002A02D04A490D7001E0484A117011 +:109DF000610005D50020FFF7D0FF0600FFF7CAFF7E +:109E0000F6B2002E09D04349884206D04249884222 +:109E100007D13800C0B2002803D105203A490870A4 +:109E200012E03B480078002803D00420364908702F +:109E30000AE0FFB2002F07D00800FFF7AEFF0028AE +:109E400002D1052030490870FBF7A6F9FBF7CEF9DF +:109E5000C8200001FFF778FF0120FFF779FF0020FD +:109E6000FFF781FF0120FFF78AFFFBF7B4F9FBF74B +:109E7000D0F92648057000F001F8F1BD80B52348FF +:109E80000078002801D0FBF7EBF901BD80B5010097 +:109E9000C9B200290CD01C490A78002A08D10870E0 +:109EA0000020F8F7EFFBF8F7FDFB0020FEF70EF8B7 +:109EB00001BD80B5FFF76CFFFFF76CFF15498842C5 +:109EC00002D10520FFF7E2FFF8F7BAFA002802D026 +:109ED0000120FFF7DBFFFFF7D1FF01BD00B50A4806 +:109EE0000078002801D0012000E00020C0B200BDB1 +:109EF000054800787047000008C0264010C0264082 +:109F0000FFFEFFFF0C102740B61C0028B81C0028DD +:109F1000B71C002845564F4D41564F4D1CB501F01A +:109F200019FD002803D100F0B9F800202BE001F062 +:109F3000F3FF002803D100F0B1F8002023E0FAF786 +:109F4000DEFB002805D069460520FAF767FC0028EB +:109F500003D100F0A3F8002015E068460088974977 +:109F6000088001249648047000209649086001206A +:109F700000F084FA012000F09DFA64209249086004 +:109F800092480470012016BD80B5002804D1904885 +:109F90000168491C016020E08E490A68521C0A6071 +:109FA00001688D4A891A08D00C3909D092225200D2 +:109FB000891A08D05C3909D00BE000F085F80CE074 +:109FC00000F00EF909E000F06DF906E000F0A0F9EC +:109FD00003E07F480168491C016001BD80B501F0C4 +:109FE000E7FC00F03CF87D480178E02905D00178D5 +:109FF000052902D00078002806D10020A649087063 +:10A000000120724908700EE0A4480178002906D1A9 +:10A01000A1480178002906D00121017003E00078F1 +:10A02000401C9D4908709E480078002814D0B44810 +:10A030000168002910D00168491E016000680028ED +:10A040000AD1B048007801F0D9FF002804D10120DE +:10A05000AD49086000F056FA00F05BFA01BD1CB58E +:10A0600058480168491C016001680A2915D3002479 +:10A07000046069460520FAF7D1FB002807D068463E +:10A0800000884E49088001204D49087005E09F482E +:10A090000168491C01604A48047013BD80B501F095 +:10A0A000FEFC02F083FA01F0C0FF002001007C4AB0 +:10A0B0001170934908600100B64A11707649087022 +:10A0C00001204249087001BD70B5017B08290AD002 +:10A0D0003F480168491C0160002000F0CFF90020D2 +:10A0E00000F0E8F968E00324416822000A40416872 +:10A0F000890823000B404168090925000D400F26FF +:10A100004168090C31404068000D06401000C0B2A3 +:10A11000022803D1012000F0B1F924E0D2B2012AD3 +:10A120001AD11800C0B2012802D0DBB2022B13D121 +:10A130000800C0B200280FD00800C0B206280BD219 +:10A140000800C0B200F028F900280CD102206E49A6 +:10A15000086000F0D7F906E01D480168491C01605D +:10A16000002000F08BF92800C0B2022803D10120A2 +:10A1700000F0A0F920E0EDB2012D16D13000C0B200 +:10A18000002812D03000C0B206280ED2BA4800789B +:10A1900000280AD03000C0B200F03FF900280BD1EF +:10A1A0005948046000F0AEF906E009480168491C0E +:10A1B0000160002000F07EF970BD00009C1C0028AA +:10A1C000C01C0028441C0028401C0028FE12002847 +:10A1D000281C0028241C00289E020000BB1C00280C +:10A1E00080B5017B082904D0B0480168491C016092 +:10A1F00051E0436807214268120C0A404068C00CD5 +:10A200000140DBB2012B07D11000C0B2052803D2F8 +:10A210000800C0B2052804D3A4480168491C0160A5 +:10A2200039E01000C0B2012801D1012005E0D2B20E +:10A23000022A01D1022000E003209D4A107008008C +:10A24000C0B2012801D1012005E0C9B2022901D123 +:10A25000022000E00320A14908701148007800287E +:10A260000AD09F48007800F097F8002804D1042015 +:10A270002549086000F046F90848007800280AD00F +:10A280009848007800F0C9F8002804D105201E493C +:10A29000086000F037F901BDFD120028BA1C002843 +:10A2A000BD1C002880B5017B08290AD00020724916 +:10A2B00008707E480168491C0160002000F0FAF82F +:10A2C0001CE0406800098007800F0100C9B2012925 +:10A2D00002D0C0B2022803D101206749087002E011 +:10A2E00000206549087064480078002806D16F484E +:10A2F0000168491C0160002000F0DCF801BD00008D +:10A300003C1C0028BF1C0028341C0028381C0028D6 +:10A3100010B5017B08290AD064480168491C016016 +:10A32000002000F0ABF8002000F0C4F831E0032476 +:10A33000416821404068800804400800C0B20128FC +:10A340000BD16748007800F027F800280BD10620D1 +:10A35000A849086000F0D6F805E0C9B2022902D188 +:10A36000012000F08BF82000C0B201280BD15D481D +:10A37000007800F052F800280BD107209D490860B2 +:10A3800000F0C0F805E0E4B2022C02D1012000F098 +:10A3900091F810BDFC12002870B50100C9B2032964 +:10A3A00001D3032500E005000100C9B2002903D054 +:10A3B0000100C9B2062901D3002025E03C490A78F2 +:10A3C0002B00DBB29A4200D20D78454908708A4CC6 +:10A3D0002800C0B200F088F820706D1C8748057016 +:10A3E000012587480570874E307800280DD16420FC +:10A3F00001F0B8FD002801D1002005E03570FA20F9 +:10A40000C00081490860012070BD7F4800680028B5 +:10A41000F9D1207801F0F2FDF6E710B50100C9B2DC +:10A42000032901D3032400E004000100C9B200297C +:10A4300007D00100C9B2062903D20F4909780029C3 +:10A4400001D1002017E025490A782300DBB29A42A7 +:10A4500000D20C78234908702000C0B201F00AFB3A +:10A46000002801D1002006E0641C68480470012027 +:10A4700063490870012010BDBE1C002810B50400FF +:10A4800001F0D3FD002001005E4A11705E490860B2 +:10A490000100594A11702100C9B2052900D30400F6 +:10A4A0005648047001205649087010BD281C002829 +:10A4B0000013002810B50400002001F0DBFA00288A +:10A4C00001D102F073F82000C0B2052800D30024A7 +:10A4D0004E48047001204A49087010BD021300283C +:10A4E000FF1200280113002800B50100C9B201299C +:10A4F00001D1322005E0C0B2022801D1462000E09F +:10A50000642000BD80B5FFF7C9FD0120FFF7BEFC48 +:10A5100001BDF8B53E4C2068401C2060384D2878BD +:10A52000002802D12068642862D334480078C0B281 +:10A530004007400F35490978C90038220A400243D4 +:10A54000009234480078002801D0012100E0002169 +:10A5500031480078E02801D0022000E000200843C4 +:10A5600028490978002901D0012100E000212B4A67 +:10A570001278530006221A400A4380235B002849C0 +:10A580000E689E4201D3FF2100E00968254E37681E +:10A590009F4201D3FF2300E03368C0B2D2B212025F +:10A5A0000243214800880704174320480088C9B2A5 +:10A5B00009040143DBB21E060E43002200991C4829 +:10A5C000FFF73CFA00280FD0320039001948FFF796 +:10A5D00035FA002808D018480168491C016000209D +:10A5E00001002970206003E014480168491C0160E3 +:10A5F000F1BD0000341C0028BF1C0028FC120028FC +:10A60000FE120028BD1C00283C1C0028FD1200285A +:10A61000401C0028C01C0028BB1C0028BA1C0028B5 +:10A62000381C0028101C00289C1C00289A1C00289C +:10A63000FA040000050300002C1C0028301C002830 +:10A6400000B5FEE700B5010009B2002905D40121DB +:10A65000C006C00E8140B748016000BDF0B50200E1 +:10A6600012B2002A18D41822844B040024B2A40881 +:10A67000A4001C59FF250600F6001640B540AC4367 +:10A680008901C9B20500ED002A409140214300B282 +:10A690008008800019501CE00F22A74C18250300E9 +:10A6A0001BB21340083B9B089B00060036B23240A9 +:10A6B000083A92089200A258FF260700FF002F4098 +:10A6C000BE40B2438901C9B2C0000540A940114350 +:10A6D000E150F0BD00B59D48012102680A430260C7 +:10A6E00002680A40002AFBD100BD99480168012296 +:10A6F0000A43026070479748016801220A430260DA +:10A7000070471FB5684602F049F900280DD08B4C00 +:10A7100018228B492000FDF7E7F80020E07549205A +:10A72000884908600020FDF73FF901208A49087038 +:10A73000FFF7D0FF1FBD80B5C0B201280ED10321A5 +:10A74000814802F05BF903210320FFF787FF032014 +:10A75000FFF778FF01208149087002E000207F495F +:10A760000870FFF7C2FFFFF7C6FF01207A490870A3 +:10A7700001BD7CB505000E00794803C86A4603C2D6 +:10A78000083A3000C0B2002814D17448007801287B +:10A790000DD06A4C18226A492000FDF7A5F8002068 +:10A7A000E0759420674908600020FDF7FDF800205F +:10A7B0006949087068460121017100242100417136 +:10A7C00000953200D2B26946002002F027FB002833 +:10A7D0000CD05A4D18225A492800FDF785F8EC751F +:10A7E0009E20584908600020FDF7DEF873BD7CB557 +:10A7F00006000D00300002F013FA00280DD04F4C77 +:10A8000018224F492000FDF76FF80020E075B520B1 +:10A810004C4908600020FDF7C7F82800C0B20028A6 +:10A8200014D14E48007801280DD0444C18224449D8 +:10A830002000FDF759F80020E075B9204149086073 +:10A840000020FDF7B1F80020434908700096300061 +:10A8500002F024FA002801D0202001E080208000AE +:10A8600001902A00D2B26946002002F03FFB002886 +:10A8700001D1012000E0002076BD000000E400E0EE +:10A88000F8B584B007000E001500380002F0C8F9D2 +:10A8900000280DD0294C182229492000FDF724F862 +:10A8A0000020E075DF20274908600020FDF77CF8D4 +:10A8B00068461021FCF730F92800C0B2002814D1F6 +:10A8C0002648007801280DD01C4C18221C49200075 +:10A8D000FDF70AF80020E075E6201A49086000201C +:10A8E000FDF762F800201C490870012168460A0043 +:10A8F00002720A00427202228272C1720024210096 +:10A900000173009701962A00D2B26946002002F036 +:10A9100027F900280CD0094D182209492800FCF716 +:10A92000E3FFEC75F520074908600020FDF73CF8CF +:10A9300005B0F0BD00E100E01CED00E0181B0028B0 +:10A9400060E30010E81B002803A700100800244063 +:10A9500000F4244000F52440A71C0028A81C00286F +:10A9600088E8001000B5002801D0002901D1A048D6 +:10A9700008E0A04A904206D1002008808020800193 +:10A980004860002000BD9C4A904205D18020800193 +:10A9900002000A804860F4E7BA4A904206D180205B +:10A9A000C0010880802080014860EAE7B64A9042F2 +:10A9B00006D1C020C0010880802080014860E0E707 +:10A9C000B24A904206D18020000208808020800197 +:10A9D0004860D6E7AE4A904205D10020088080202A +:10A9E00080014860CDE7AB4A904205D180208001CC +:10A9F00002000A804860C4E7A74A904206D180203E +:10AA0000C0010880802080014860BAE7A34A9042D4 +:10AA100006D1C020C0010880802080014860B0E7D6 +:10AA20009F4A904206D18020000208808020800149 +:10AA30004860A6E76E48A5E700B5002100E0491C84 +:10AA40000A290AD2974A18234B43D3589842F6D181 +:10AA5000182041435018001D00E0002000BD10B533 +:10AA60000A00D2B2402A01DB002017E0020C1204D7 +:10AA700080235B02D218AC23C3589B089B049B0C19 +:10AA80009B00D218C9B2884BBC240059000A400769 +:10AA9000400F185C801C41438800101810BD10B591 +:10AAA0000A00D2B2202A01DB002016E0020C1204B8 +:10AAB00080235B02D218C023C3589B089B049B0CC5 +:10AAC0009B00D218C9B2784BC82400594007400FE8 +:10AAD000185C801C41438800101810BD10B50B0095 +:10AAE000DBB2022B01DB002028E0030C1B048024D6 +:10AAF00064021B190C00E4B2002C05D1A0240459F7 +:10AB0000A408A404A40C04E0B0240459A408A404D8 +:10AB1000A40CA4001B19C9B2002904D1BC214058BF +:10AB20004007400F04E0BC21405800094007400F97 +:10AB30005D49085C801C42439000181810BD00B5A8 +:10AB40005A49884201D3052100E00021400A40060D +:10AB5000400E0818C0B200BD38B504000020002C1B +:10AB600044D02000FFF7EBFF0121226D520F0A4075 +:10AB7000002A05D00A004E4B0500EDB26D005A5375 +:10AB8000226D120F0A40002A05D00222484B050010 +:10AB9000EDB26D005A53226DD20E0A40002A05D044 +:10ABA0000322434B0500EDB26D005A53226D920E05 +:10ABB0000A40002A05D004223D4B0500EDB26D008D +:10ABC0005A53226D520E0A40002A05D00522384BF6 +:10ABD0000500EDB26D005A53226D520D114000294F +:10ABE00004D00621324AC0B24000115231BD0000EB +:10ABF00001006200000052400002524070B5002285 +:10AC00001300130000283CD003689B0F1C00E407CE +:10AC1000E40F0C720B7A002B05D10368DB00DB0814 +:10AC20009B144B6003E00368DB00DB084B60436868 +:10AC30005B0D1C00E407E40F0C7043681B0C1B0742 +:10AC40001B0F4C240B554C23CB5C082B01DA130053 +:10AC500002E04C23CB5C083B0AE01400A4B2A40041 +:10AC60000419A4681500ADB2AD004D19EC60521C7A +:10AC700014000D4D1E00B6B2AD5DA4B2ADB2AC4233 +:10AC8000EBD370BD00045240000652400008524011 +:10AC90000000544000025440000454400006544058 +:10ACA000000854405808002880E80010010852406D +:10ACB000301B0028F1B5A8B0002000900020289893 +:10ACC000FFF7BAFE0700002F29D0289E306D974964 +:10ACD0000140002902D02898FFF73EFF0125306D82 +:10ACE000C00C284000281CD1306D2840002868D1B5 +:10ACF000306D00092840002800D0BAE0306D400ACD +:10AD00000540002D0BD030005030016880229200A9 +:10AD10000A4302603868002801D03868804729B0AB +:10AD2000F0BD300050300168802212030A430260F7 +:10AD300098203058002816D0002400E0641C200021 +:10AD4000C0B220282CDA98203058E0402840002853 +:10AD5000F4D02100C9B22898FFF781FE0090A540E9 +:10AD6000982035501CE09C203058002818D0002432 +:10AD700000E0641C2000C0B2202811DA9C2030586A +:10AD8000E04028400028F4D020342100C9B228989F +:10AD9000FFF765FE00902000E03085409C20355094 +:10ADA00000980028BBD013A90098FFF727FF786808 +:10ADB0000028B4D013AA2100C9B200207B689847AC +:10ADC000ADE73000503001682943016017E0289A50 +:10ADD000D4235B00D45801AA0300DBB29B00D450FB +:10ADE000401C02000B00D2B2DBB29A42EFD3B8682B +:10ADF000002804D001AAC9B20020BB689847A4204B +:10AE000030584006400E012889DB2898C0214900AF +:10AE100040582840002822D1A420305800903F24D8 +:10AE20000098020A224000212898FFF757FE0028C8 +:10AE3000E5D013A9FFF7E2FE3000A83001683F22F9 +:10AE40009143009A120A14400C4304607868002869 +:10AE5000D5D013AA002101207B689847CFE734485A +:10AE60002899BC2289584907490F415C891C002058 +:10AE7000B7E730005030016810220A43026017E043 +:10AE8000289ADC235B00D45801AA0300DBB29B00A4 +:10AE9000D450401C02000B00D2B2DBB29A42EFD376 +:10AEA000B868002804D001AAC9B20120BB6898473D +:10AEB000B42030584006400E012800DA2FE72898C9 +:10AEC000C0214900405840082840002822D1B42021 +:10AED000305800903F240098020A2240012128980F +:10AEE000FFF7FCFD0028E3D013A9FFF787FE300031 +:10AEF000B83001683F229143009A120A14400C4373 +:10AF0000046078680028D3D013AA012101207B684F +:10AF10009847CDE706482899BC228958090949076E +:10AF2000490F415C891C0020B4E70000EEE0F73FC8 +:10AF300080E80010F1B594B0D34800681290D3486F +:10AF400000681190D2480768D2480668D248006865 +:10AF50001090D24800680F90D14800680490D14802 +:10AF600000680E90D04800680190D04800680D90AD +:10AF7000CF4800680C90CF4800680B90CE4800681E +:10AF80000A90CE4800680990CD4800680890CD48E6 +:10AF900000680390CC4800680290DC480068079085 +:10AFA000DB48006800901498002810D00C00002C9A +:10AFB0000DD02820205C002802D0E06A002806D0AE +:10AFC0003020205C002804D0606B002801D1D148DB +:10AFD00024E31498FFF730FD002801D1CD481DE38C +:10AFE0002168016061684160A1688160E168C160B9 +:10AFF00021690161149D0120A861A869C007FCD5E1 +:10B000000320A86105A91498FFF7ACFC002801D023 +:10B01000C04803E32820215C129ABF4810400A046C +:10B02000FF21090411400143BC4808406946898A50 +:10B0300089B2890889B289000143842029503020CF +:10B04000205C4006400EFE21C903119BE44A1A40D1 +:10B050000004084010438422AA5892082823E35C85 +:10B06000D2189204920CAD4B03409200DD48104080 +:10B0700018438822A850A06BC000C0087A0F52075E +:10B0800010439022A85007224020205C1040099FC6 +:10B09000D54B3B400702E020C00038401843412315 +:10B0A000E35C13407027B8431F0170233B40034308 +:10B0B0004220205C10400727BB431843BC23E850C4 +:10B0C0004420235C1800C007C00F73005B08C6074C +:10B0D0001E434520205C4006400EC44B1E40070620 +:10B0E000FE20C005384030434626A65D7606760E23 +:10B0F000BB4F07403004084038438826AE59B60895 +:10B100003027E75D7F00F619B604B60C834F074081 +:10B11000B600B44830403843A026A8514820265CE9 +:10B120003000C007C00F109E76007608C00730437D +:10B130004926A65D7606760E03403606FE20C0053B +:10B14000304018434A23E35C5B065B0EA44E064086 +:10B15000180401403143A64FA020285880084623F8 +:10B16000E35C4226A65DBE5DB61C7343C018830433 +:10B170009B0C6A4808409B009A4919400143B02043 +:10B1800029504720205C002801D1002100E0012146 +:10B19000009B012083430800C007C00F18434B21C8 +:10B1A000615C002901D1002100E0012102239843C4 +:10B1B00049000223194001431498C0235B00C15089 +:10B1C000B020285880084A21615C4123E35CFB5C85 +:10B1D0009B1C5943401883049B0C82484F490F9E87 +:10B1E0000E409B0003403343AC26AB514323E35C4A +:10B1F0001A40089B0726B3431A43C823EA507D4AE6 +:10B20000049E16407C4B1E400496AC26AE59B608F0 +:10B2100000964C26A65DB4464026A65DBE5DB61CD3 +:10B2200067467743009EF619B604B60C049F0F409C +:10B23000B60006403E43F027EE510E9F6F4E3E4053 +:10B2400032404D26A65DB606B60E13403604FC22EB +:10B25000920332401A43F023EB589B0814339B04AB +:10B260009B0C11409A0010400843C0216850802276 +:10B2700052021498000C00046946898A401880180C +:10B2800006998B08002125E0E0E80010E4E80010B2 +:10B29000E8E80010ECE80010F0E80010F4E8001016 +:10B2A000F8E80010FCE8001000E9001004E90010C4 +:10B2B00008E900100CE9001010E9001014E9001072 +:10B2C00018E900101CE9001020E9001000260660B3 +:10B2D000001D491C9942F9D301990120084302211C +:10B2E0000143CF480840217D012901D1012100E01F +:10B2F0000021CC4B034048028021890008401843BC +:10B30000217D01290CD101210BE000BF24E90010AF +:10B3100028E9001001006200FFFF00FF0300FFFFAB +:10B320000021C14B03400802802149000840184316 +:10B33000802188434021884320218843102188436D +:10B340000421884301900198A861E08AC005C00DDE +:10B350000D99B64B0B400104B54808401843217EB7 +:10B36000B44B03400902FF200002084018437F232A +:10B37000617E19407F26B0430143A07E1840C90179 +:10B38000C90940060843E861207D012853D11F20E8 +:10B39000A18B01400C9FA84E3E400F04F8214903A9 +:10B3A00039403143A67F3040A44E0E400102F820C0 +:10B3B0004001084030430F21E67F0E40F027B8439C +:10B3C0003701F0263E4006432020205C01400F203C +:10B3D000864331432220205C012811D1012610E050 +:10B3E000FFFF80FFFCFF0000FFF8FFFFFFFFFF8073 +:10B3F00080E80010FFFFFFC0FFFFC0FFFFFFFFBF9F +:10B4000000268F480840F10580263604314001436C +:10B41000E9602320215C19400B9E8A4830400E02CF +:10B42000FE21C901314001432420205C03407F20DC +:10B4300081430B43AB6403203C21635C03400A99C6 +:10B440003026B1431E01302333400B433D21615C64 +:10B4500008400C218B4381000C20084018433E21FA +:10B46000615C012901D1012100E000210223984300 +:10B4700049000223194001433F20205C012801D1EB +:10B48000012000E0002001260123994330400843B9 +:10B49000802168501498000C0004842169588908A0 +:10B4A0008904890C890040188018002105E0E36AAE +:10B4B0008F00DB598F00C351491C2823E35C99425C +:10B4C000F5D31498000C0004882169588908890470 +:10B4D000890C890040188218002308E0606BD900AD +:10B4E000401803C8DF00D71903C7083F5B1C302092 +:10B4F000205C8342F2D3844803990140834A0A4086 +:10B5000083491140834A0A4083491140834A0A40D3 +:10B510004B491140824A0A4082491140824A0A40FE +:10B52000802109031143814A0A4081491140814A1F +:10B530000A40814911403A4A0A4080491140804AF4 +:10B540000A4080491140804A0A4036491140364B32 +:10B550000B4080218B434021C9430B402022D24322 +:10B56000134010271F4308239F430423DB431F403E +:10B570000224E443274037430397039F6F65029FEC +:10B58000384002900298614F074061483840614F4F +:10B59000074061483840614F074029483840604FB4 +:10B5A000074060483840604F0740684838405F4F68 +:10B5B00007405F4838405F4F07405F483840184FAA +:10B5C00007405E4838405E4F07405E4838405E4F57 +:10B5D000074014483840144F0740802087433940C3 +:10B5E0000A40102082430820824313402340012058 +:10B5F0008343AB65079830430440EC651498FFF72C +:10B600009EFA4000B04900220A5201980121884365 +:10B61000A861A86930400028FBD1002015B0F0BD1A +:10B62000FFBFFFFFFFFDFFFFFFFEFFFFFFFF00FE6D +:10B630000000FF01FF00FFFFFFFFE0FFFFE0FFFF53 +:10B64000FFFF7FFFFF80FFFFFEB50700002F01D146 +:10B650009E4857E03800FFF7EFF9002801D19B48DA +:10B6600050E0002404604460C46004613D00012097 +:10B67000A861A96901400029FBD00326AE61694693 +:10B680003800FFF76FF9002801D090483AE0842095 +:10B690002C5088202C508E4890216850BC202C5073 +:10B6A000A0202C50B0202C50C02040003C50AC209A +:10B6B0002C50C8202C50F0202C50C0202C50380C7E +:10B6C0000004694609884018802149024018019900 +:10B6D0008A08210002E00460001D491C9142FAD34F +:10B6E000AE617C48E8617C48E860AC6480202C5006 +:10B6F0006C65AC65EC653800FFF721FA40007249D3 +:10B700000C520020FEBD0000FFFFFFDFFFFFFFEF38 +:10B71000FFFFFFF7FFFFFFFBFFFFFFFDFFFFFFFE48 +:10B72000FFFFBFFFFFFFDFFFFFFFEFFFFFFFFBFF9D +:10B73000FFFFFDFFFFFFFEFFFF7FFFFFFFDFFFFFBC +:10B74000FFEFFFFFFFF7FFFFFFFBFFFFFFFFF7FF2D +:10B75000F8B50600002E02D01400002C01D15B4881 +:10B76000B0E06846017068460078202801DB574841 +:10B77000A8E03000FFF760F9002801D15348A1E0AC +:10B7800037000125B8692840002808D1CC20395855 +:10B7900068460078C1400800C007C00F00E02800DC +:10B7A000C0B2002801D049488CE0684601783000DA +:10B7B000FFF775F9002801D1444883E001000A68C9 +:10B7C000464B13400B60217A012901D12B0000E088 +:10B7D000002302001668424931409B078026F60587 +:10B7E00033400B4313600168890F2940002902D1BF +:10B7F00061688A0400E0626801000B685B0F5B0708 +:10B80000D200D2081A430A60011D0A68354B134062 +:10B810000B60011D0A681202120A0A604C21615C69 +:10B820000B071B0F011D0E682F4A32401B04F02628 +:10B8300036031E4016430E602178012901D12B00EA +:10B8400000E00023021D1668284931405B05802670 +:10B85000B60333400B4313602178012901D12B003B +:10B8600000E00023021D1668214931401B05802697 +:10B87000760333400B4313604C21615C082901DAE5 +:10B88000002102E04C21615C08391A4A89B2515CFE +:10B8900000220AE013009BB29B00E318DB6816004D +:10B8A000B6B2B6008619B360521C13000E00F6B291 +:10B8B0009BB2B6B2B342EDD3684600788540D02043 +:10B8C0003D500020F2BD0000301B00280100620046 +:10B8D000FFFFFF1F030A0006330A0000FFFFFFDF20 +:10B8E000FFFFFFBFFFFF7FFFFFFFF0FFFFFFDFFF57 +:10B8F000FFFFEFFF80E8001010B50200002A03D020 +:10B900000800C0B2202801DB002021E00020012334 +:10B91000CC241459CC401C40002C09D0D420105801 +:10B92000C8401840002801D1180010E003200EE0A4 +:10B93000D8241459CC401C40002C01D0022006E031 +:10B94000DC241259CA401340002B00D00420C0B29E +:10B9500010BD000080B500F029FE00F097FD002822 +:10B9600004D1E02000F01EF9002020E001F024FBCB +:10B97000002804D1E02000F015F9002017E0002095 +:10B9800001006F4A11706F4908606F4908606F4984 +:10B99000086001006E4A117001006E4A11700121A9 +:10B9A0006D4A11706D49086086490860012002BD2A +:10B9B00038B585480168491C0160654C2078042829 +:10B9C00003D3E02000F0EEF853E05D480078002853 +:10B9D00002D000F0EBFD4CE020785E4D2978C0B23B +:10B9E000884208D0207800F062F8002803D1E020D7 +:10B9F00000F0D8F83DE02878002814D0F7F73AF99D +:10BA00007049504A1268801A086008686F49884275 +:10BA100009D36F480168491C01600020207005208F +:10BA200000F0C0F825E048480168491C0160016841 +:10BA30000A291ED30024046001F0CBFA00280AD0A2 +:10BA40004248046001F0D8FA6249088001F0D7FA50 +:10BA5000614908600DE061480168491C01603B488C +:10BA60000168491C01600068032802D3E02000F04F +:10BA700099F831BD00B50100C9B2042901D30020F5 +:10BA80000CE02F490978002905D00100C9B200292E +:10BA900001D0002002E02E490870012000BD80B5D1 +:10BAA00000202B490870E02000F07CF801BD70B543 +:10BAB00004002000C0B200280FD100F077FD254817 +:10BAC00004700120244908700020454908603D4960 +:10BAD00008601C49086001202FE02000C0B200F07F +:10BAE0003FF80500002D01D1002026E000F068FDA0 +:10BAF000002806D0280000F03BFD002808D10020D7 +:10BB00001BE0280000F0E8FC002801D1002014E030 +:10BB1000104E3078002806D1F7F7ACF809490860D4 +:10BB200000202849086034702000C0B200F029F8D5 +:10BB3000094908702A480560012070BD0000000016 +:10BB4000BC1C0028181C00281C1C0028201C0028D5 +:10BB5000B91C0028BA1C0028BB1C0028001C0028A7 +:10BB600000B5C0B2012804D009D3032805D002D300 +:10BB700005E01E2004E03C2002E05A2000E0002006 +:10BB800000BD00B5C0B2012804D009D3032805D0F8 +:10BB900002D305E0022004E0032002E0042000E0DC +:10BBA000012000BD10B5040000F000FD01200D498A +:10BBB0000870002001000C4A1170094908600B4808 +:10BBC000047010BD041C0028081C0028C0270900B0 +:10BBD0000C1C00289A1C0028141C0028101C00288B +:10BBE000001C0028BC1C0028BA1C0028BB1C002814 +:10BBF00070B5B14BC018C0090001C64BC318042969 +:10BC00000CD21F251C68CE002800B0408443D2B25D +:10BC10001540C800854025431D600CE0FC311F2500 +:10BC20005C68CE002800B0408443D2B21540C80002 +:10BC3000854025435D6070BD00B59F4A8018C009EE +:10BC40000001B44A8018042905D20068C900C84020 +:10BC5000C006C00E05E0FC314068C900C840C006FF +:10BC6000C00EC0B200BD00B5002A03D101228A4037 +:10BC7000426002E001228A40826000BD30B40300CD +:10BC80008C000F25596C2800A04081431540A54029 +:10BC90000D435D6430BC704730B403004C00103479 +:10BCA0000325D96C2800A04081431540A5400D43D1 +:10BCB000DD6430BC704700B5022801D301200FE0DD +:10BCC0000B00DBB2042B01DB012009E0A44B800058 +:10BCD0001818C9B2405C824201D3012000E0002064 +:10BCE00000BDF8B504001F00022C01D3012023E0A1 +:10BCF00015000E002A003100C9B22000FFF7DBFF5B +:10BD0000012801D1012017E03000C0B2002816D16F +:10BD1000FF2F12D8B74861034018A90040188021AE +:10BD2000490140180168B44A0A403902FF231B0246 +:10BD30000B40134303600020F2BD0120FCE7F6B284 +:10BD4000012E16D180204002874210D2A9486103FB +:10BD50004018A9004018A021490140180168BB4AB9 +:10BD60000A403902BA4B0B4013430360E3E701205A +:10BD7000E2E70120E0E700B20012C0B27047F8B578 +:10BD800005000F001600280000B2FFF7F4FF0400C2 +:10BD90002000C0B2022801D301202CE0320039007B +:10BDA000C9B22000C0B2FFF786FF012801D10120EF +:10BDB00021E090482100C9B2490341182A00D2B2BB +:10BDC00092008918C02212018A58A2491140FFB27C +:10BDD0003B02C02292001A400A43FF218A43F1B27B +:10BDE0001143E4B262038018EDB2AA008018C022A9 +:10BDF000120181500020F2BD70B50400022C01D365 +:10BE0000012028E015000E002A003100C9B22000F0 +:10BE1000FFF751FF012801D101201CE075486103A3 +:10BE20004158802212060A43C02189041143FF228F +:10BE300012040A43874B1340F6B23202C021890034 +:10BE400011401943FF229143EAB20A436103425071 +:10BE500061034058002070BD70B50400022C01D36E +:10BE6000012028E015000E002A003100C9B2200090 +:10BE7000FFF721FF012801D101201CE05D4861038B +:10BE800041588022D2050A43C02189041143FF2270 +:10BE900012040A436F4B1340F6B23202C0218900EC +:10BEA00011401943FF229143EAB20A436103425011 +:10BEB00061034058002070BD0000CFBFF0B58DB0C9 +:10BEC000684665493422F8F70FFF644F6A4601213E +:10BED0003800F8F7CCF80600002420006946087204 +:10BEE0006A4602213800F8F7C2F805000022012155 +:10BEF0003800FFF7B8FE002202213800FFF7B3FE3A +:10BF00003543002D01D1012000E02000C0B20DB06A +:10BF1000F0BD00000000304010B500F0ABF8002884 +:10BF200001D100201BE04E4C2000F8F7BDFA4D492E +:10BF30002000F8F733F9002801D000200FE020009E +:10BF4000F8F7BFFA4849884207D12000F8F7B5FA58 +:10BF50004649884201D1012000E00020C0B210BD56 +:10BF600098E8001070B5424C0021216000F046F8BE +:10BF7000002803D10120206000203AE0374E002243 +:10BF800001213000FFF76FFE354D37492800F8F7E3 +:10BF900096FA2800F8F782FA2800F8F740FD022008 +:10BFA000F9F78CF82800F8F784FA000405D4022089 +:10BFB000206000F03AF800201BE000220121300050 +:10BFC000FFF76AFE062201213000FFF757FE082224 +:10BFD00001213000FFF70CFE01213000FFF72CFE9D +:10BFE000082805D00320206000F01FF8002000E0A2 +:10BFF000012070BD00000440FF00FFFF38B5652838 +:10C0000001D3002010E000F087F80400144D210057 +:10C010002800F8F750FA2800F8F74FFAA04201D1AB +:10C02000012000E00020C0B232BD10B50C48F8F786 +:10C030003BFA0A4C00220121200000F07BF800228C +:10C040000221200000F076F810BD0000FF0000FF84 +:10C0500000FFFF00FFFCFFFFB0E40010800531404F +:10C06000001E584090E000101F4E0000204E0000BF +:10C07000B81B0028F8B5002500956846FBF7EAFBD9 +:10C08000002801D0002045E0274C0098A04205D3AD +:10C0900000982100F8F72AF8002901D0002039E0A3 +:10C0A00000982100F8F722F80400002C02D01F4865 +:10C0B000844201D300202DE0FF266A363000FFF7CE +:10C0C0005AFE0700002201213800FFF7C5FE0028B4 +:10C0D00001D000201EE0002201213000FFF74FFEBA +:10C0E000002801D0002015E023005B1E0022012162 +:10C0F0003800FFF7F6FD002801D000200AE00022FA +:10C1000001213800FFF778FE002801D1012000E06E +:10C110002800C0B2F2BD000000B5054948436421C3 +:10C12000F7F7E4FF00BD000080841E00010001005D +:10C13000204E000070B505000C0016000022210002 +:10C140002800FFF790FD3200D2B221002800FFF74F +:10C150004FFD002221002800FFF79EFD062221004E +:10C160002800FFF78BFD002221002800FFF77BFD50 +:10C1700070BD000070B5B14BC018C0090001C24BC2 +:10C18000C31804290CD21F251C68CE002800B0401B +:10C190008443D2B21540C800854025431D600CE0A1 +:10C1A000FC311F255C68CE002800B0408443D2B229 +:10C1B0001540C800854025435D6070BD00B59F4AAD +:10C1C0008018C0090001B04A8018042905D200680F +:10C1D000C900C840C006C00E05E0FC314068C90077 +:10C1E000C840C006C00EC0B200BD00B5002A03D1D1 +:10C1F00001228A40426002E001228A40826000BD42 +:10C2000030B403008C000F25596C2800A0408143F6 +:10C210001540A5400D435D6430BC704730B4030049 +:10C220004C0010340325D96C2800A04081431540F0 +:10C23000A5400D43DD6430BC704700B5022801D332 +:10C2400001200FE00B00DBB2042B01DB012009E031 +:10C25000A04B80001818C9B2405C824201D3012073 +:10C2600000E0002000BDF8B504001F00022C01D33F +:10C27000012023E015000E002A003100C9B2200081 +:10C28000FFF7DBFF012801D1012017E03000C0B229 +:10C29000002816D1FF2F12D8B34861034018A90017 +:10C2A00040188021490140180168B04A0A4039020B +:10C2B000FF231B020B40134303600020F2BD01204B +:10C2C000FCE7F6B2012E16D180204002874210D240 +:10C2D000A54861034018A9004018A0214901401851 +:10C2E0000168B14A0A403902BA4B0B40134303605C +:10C2F000E3E70120E2E70120E0E700B20012C0B26C +:10C300007047F8B505000F001600280000B2FFF7CF +:10C31000F4FF04002000C0B2022801D301202CE069 +:10C3200032003900C9B22000C0B2FFF786FF0128F1 +:10C3300001D1012021E08C482100C9B249034118F4 +:10C340002A00D2B292008918C02212018A58A2494A +:10C350001140FFB23B02C02292001A400A43FF2163 +:10C360008A43F1B21143E4B262038018EDB2AA002D +:10C370008018C022120181500020F2BD70B5040067 +:10C38000022C01D3012028E015000E002A00310004 +:10C39000C9B22000FFF751FF012801D101201CE0A4 +:10C3A000714861034158802212060A43C021890462 +:10C3B0001143FF2212040A43874B1340F6B23202A4 +:10C3C000C021890011401943FF229143EAB20A4378 +:10C3D0006103425061034058002070BD70B50400F5 +:10C3E000022C01D3012028E015000E002A003100A4 +:10C3F000C9B22000FFF721FF012801D101201CE074 +:10C400005948610341588022D2050A43C02189045A +:10C410001143FF2212040A436F4B1340F6B232025B +:10C42000C021890011401943FF229143EAB20A4317 +:10C430006103425061034058002070BD0000CFBF2F +:10C4400078B58DB0684665493422F8F74DFC644EE6 +:10C450006A4607213000F7F70AFE04000022072190 +:10C460003000FFF7C2FE00255E480560002C07D1B2 +:10C4700007213000FFF7A2FE002801D1012000E0D3 +:10C480002800C0B20EB070BD0000304010B500F002 +:10C49000B3F8002801D100201AE0534C2000F8F72F +:10C4A00003F852492000F7F779FE002801D0002058 +:10C4B0000EE02000F8F705F84D49884206D120002B +:10C4C000F7F7FBFF002801D1012000E00020C0B2F7 +:10C4D00010BD000098E8001070B5464C00212160A6 +:10C4E00000F046F8002803D10120206000203AE047 +:10C4F0003B4E002207213000FFF777FE3A4D3C49C2 +:10C500002800F7F7DCFF2800F7F7C8FF2800F8F746 +:10C5100086FA0220F8F7D2FD2800F7F7CAFF0004D8 +:10C5200005D40220206000F041F800201BE000222A +:10C5300007213000FFF772FE062207213000FFF7C7 +:10C540005FFE082207213000FFF714FE07213000AC +:10C55000FFF734FE082805D00320206000F026F8FD +:10C56000002000E0012070BD00000440FF00FFFF3C +:10C5700070B50400002C01D0652C01D3002012E01E +:10C58000200000F08BF80600174D31002800F7F767 +:10C5900092FF2800F7F791FFB04201D0002002E09F +:10C5A00010480460012070BDFF0000FF80B50E48F8 +:10C5B000F7F77AFF00F07AF800200A49086001BD19 +:10C5C00080B50948F7F775FFC10B0800C007C00F19 +:10C5D00002BD000000FFFF00FFFCFFFF7CE4001035 +:10C5E00000083140B01B0028802058401CE000109B +:10C5F0001F4E0000B41B0028F8B5002500956846C2 +:10C60000FBF728F9002801D0002045E0354C0098C0 +:10C61000A04205D300982100F7F768FD002901D05A +:10C62000002039E000982100F7F760FD0400002C9D +:10C6300002D02D48844201D300202DE0B726760099 +:10C640003000FFF75AFE0700032201213800FFF7F0 +:10C65000C5FE002801D000201EE003220121300089 +:10C66000FFF74FFE002801D0002015E023005B1EDD +:10C67000032201213800FFF7F6FD002801D0002039 +:10C680000AE0032201213800FFF778FE002801D1DB +:10C69000012000E02800C0B2F2BD000000B513493F +:10C6A00048436421F7F722FD00BD000010B5104C8F +:10C6B000002207212000FFF798FD0022072120001B +:10C6C000FFF758FD002207212000FFF7A7FD0622F3 +:10C6D00007212000FFF794FD002207212000FFF72B +:10C6E00084FD10BD80841E0001000100204E00006A +:10C6F0000008314038B50500082D0DD3914C1822A3 +:10C7000091492000FBF7F0F80020E075E8208F4900 +:10C7100008600020FBF748F98D486901401832BDD8 +:10C72000994B1B689BB212041A43120C120489B273 +:10C73000114381607047C0687047944B1B689BB27F +:10C7400012041A43120C120489B2114301600068EA +:10C750007047C069C00FC0B27047F8B502000E0044 +:10C76000002A01D105204EE00F2089490B681B0AE1 +:10C770000340002B01D1002007E00968090A0840A6 +:10C780000E2801D1012000E00220824940010F184B +:10C79000814C984D280011001022F8F7BFFA286844 +:10C7A00001218843286010212800FBF720F9924BD3 +:10C7B0002A000121380000F04CFC002804D00120A0 +:10C7C00021E0641E002C15D03800FFF7C2FF0028BE +:10C7D000F7D1002E08D010212800FBF707F9300010 +:10C7E00029001022F8F79AFA00F0B4F8012803D1D2 +:10C7F000032008E0022006E000F0ACF8002801D198 +:10C80000002000E00420F2BD38B50100002901D16C +:10C8100005202BE00F205E4A13681B0A0340002B03 +:10C8200001D1002007E01268120A10400E2801D141 +:10C83000012000E00220574A400115186D4C2000ED +:10C840001022F8F76BFA206801218843206010213C +:10C850002000FBF7CCF8684B22000121280000F0F3 +:10C86000F8FB002801D0012000E0002032BDFEB519 +:10C8700003001600002B03D001910198002801D17C +:10C8800005205DE00F2042490A68120A0240002A92 +:10C8900001D1002007E00968090A08400E2801D1EB +:10C8A000012000E002203B49400108180090804C24 +:10C8B000504D280019001022F8F730FA7D4F38004B +:10C8C00001991022F8F72AFA286801218843286084 +:10C8D000386801218843386010212800FBF787F869 +:10C8E00010213800FBF783F83B002A000121009853 +:10C8F00000F0AFFB002804D0012021E0641E002CD2 +:10C9000015D00098FFF725FF0028F7D1002E08D09A +:10C9100010212800FBF76AF8300029001022F8F7F0 +:10C92000FDF900F017F8012803D1032008E00220E8 +:10C9300006E000F00FF8002801D1002000E00420FC +:10C94000FEBD0000181B00289CDE0010E81B00281C +:10C950000010224010B5274C10212000FBF746F8AC +:10C960002068000F0007A0210906884201D100209D +:10C9700009E02068000F0007F0210906884201D174 +:10C98000012000E0022010BD60E9001064E9001001 +:10C990000000204000002240FFFFFF0F38B50400D8 +:10C9A000FFF7D8FF05002800C0B2022801D1424895 +:10C9B0000DE0002C04D0200027491022F8F7AEF932 +:10C9C000EDB2002D01D1002001E02348006832BD06 +:10C9D00000B5010F0907A0221206914201D10020E3 +:10C9E00006E0010F0907F0221206914200D03248FA +:10C9F00000BD0000601B0028E41B00281CB50200DD +:10CA00000B002E4803C86C4603C4083C6C46638088 +:10CA10002B4802606846F8F735F92A490020205E65 +:10CA2000F8F74FF90220FFF765FE0F21264A136839 +:10CA30001B0A0B40002B01D1002307E01268120AE9 +:10CA400011400E2901D1012300E00223002201211F +:10CA50009940FFF765FE13BD601B002870B50026E6 +:10CA600030000220FFF746FE04002000FFF763FEBF +:10CA700005000F2014490A68120A0240002A07D054 +:10CA80000968090A08400E2801D1012600E00226A3 +:10CA90002800F040C00705D509480168002901D0E9 +:10CAA000006880472A0CA9B22000FFF746FE70BD3F +:10CAB000FFFFFF00801B0028FFFFFF0F90E8001022 +:10CAC000E01B00285DCA00100000204050480068AC +:10CAD000410B0800C007C00F70474D480068010BAC +:10CAE0000800C007C00F704700B54A48012102681E +:10CAF0000A43026002680A40002AFBD100BD1FB54C +:10CB00000400C9B2012921D168461021FAF704F8BE +:10CB100069462000FFF721FE0100C9B2012901D1B9 +:10CB20005B481BE00100C9B2022901D13A4815E077 +:10CB3000C0B2042801D1394810E0009800F01CF977 +:10CB400000280BD1FFF7D0FF002007E02000FFF7FF +:10CB50005BFE002801D04E4800E0002004B010BD6C +:10CB60007FB50C001500002C01D14A484DE020682B +:10CB700000F0F0F8012802D06068002801D1454893 +:10CB800043E068461021F9F7C7FF00980002000A49 +:10CB9000C021C90401430091227AFF2000023E49CE +:10CBA000009B0B40120202401A430092637A009EDF +:10CBB000494A32401B04FF2636041E4016430096A5 +:10CBC000E27A019B19401202104008430190A07ABA +:10CBD0000199FF229143C0B208430190207B019943 +:10CBE0000902090A00060843019020680290606863 +:10CBF00003903A48A17A4900415A6068FAF7F7FE73 +:10CC00002900C9B26846FFF77AFF04B070BD000082 +:10CC1000000024400800244010005200FF00520091 +:10CC200010B50400FFF752FF002810D1EC200006D9 +:10CC30002018C0218902884201D2002026E0444801 +:10CC400020188021490288421FD200201EE0C02007 +:10CC50004002EC2109066118814201D2002015E052 +:10CC6000802109026B4AA2188A4201D200200DE0FD +:10CC7000EB221206A218824201D2002006E066488A +:10CC80002018884201D2002000E0012010BD0000E1 +:10CC9000040052000F005200FF00FFFF10B5040017 +:10CCA000FFF714FF002807D12948201880214902E6 +:10CCB00088420FD201200EE0802000025549611801 +:10CCC000814201D2012006E053496118814201D21C +:10CCD000012000E0002010BDFFFF00FFF0E7001082 +:10CCE00010B50400FFF7F9FE002810D1F02000066F +:10CCF0002018FE21C903884201D2002026E06548A1 +:10CD000020188021C90288421FD200201EE0FE2088 +:10CD10008003F02109066118814201D2002015E04C +:10CD2000802189025C4AA2188A4201D200200DE0CB +:10CD3000EE221206A218824201D2002006E05748D5 +:10CD40002018884201D2002000E0012010BD000020 +:10CD50000000FDEB10B504002000FFF761FF002884 +:10CD600001D1002007E02000FFF7BAFF002801D121 +:10CD7000002000E0012010BD80B5FFF729FE00284B +:10CD800001D1002044E04649884201D145483FE0B6 +:10CD90004549401A1CD0801E1DD0401E1DD0401E8B +:10CDA0001DD0401E1DD0001F1DD087381DD0401E35 +:10CDB0001DD012381DD0401E1DD0401E1DD0801E1B +:10CDC0001DD0801E1DD008381DD009381DD01EE092 +:10CDD000A420C0031CE035481AE0354818E0354867 +:10CDE00016E0354814E0354812E0354810E0354883 +:10CDF0000EE035480CE035480AE0354808E0354893 +:10CE000006E0354804E0354802E0354800E02548B2 +:10CE100002BD00000080FEEB0080FEEA38B584B061 +:10CE20000C001500002C01D12E4831E02068FFF7DE +:10CE300091FF012801D12B482AE02078800701D0FA +:10CE4000284825E068461021F9F766FE00980002A0 +:10CE5000000AA02149050143009120790099224A46 +:10CE60000A400002FF21090201401143009160794C +:10CE700000994C4A0A400004FF2109040140114373 +:10CE80000091206801902900C9B26846FFF737FE7B +:10CE900005B030BD000081EF0080C0EF0080C0ED24 +:10CEA000FFFFFF0FFF005200010000F001005200E1 +:10CEB000020052000300520004005200050052001C +:10CEC00006005200070052000800520009005200FC +:10CED0000A0052000B0052000C0052000D005200DC +:10CEE0000E0052000F005200FF00FFFF38B588B05F +:10CEF0000C001500002C01D12E4851E0606800287C +:10CF000001D12C484CE02068FFF78AFE012808D0A8 +:10CF10002068616889004018401EFFF781FE0128E3 +:10CF200001D124483CE068461021F9F7F5FD00984E +:10CF30000002000AA82189050143009120680190A0 +:10CF40006068401E80B20299090C090408430290EF +:10CF5000EDB2012D1CD104A81021F9F7DDFD04A9C3 +:10CF60006846FFF7FAFB0100C9B2012901D1104858 +:10CF700016E00100C9B2022901D10B4810E0C0B28D +:10CF8000042801D109480BE00498FFF7F5FE07E0FB +:10CF90006846FFF739FC002801D0054800E0002072 +:10CFA00009B030BDFFFF00FF10005200FF0052002B +:10CFB000040052000F00520080B5F7F7A0FB0028D4 +:10CFC00001D1002004E001201349087000F001F8AD +:10CFD00002BD80B510480078002805D069460420BD +:10CFE000F7F71CFC002801D1002004E06846008807 +:10CFF0000A490880012002BD08480088704780B5B2 +:10D00000064800880021064A0023F7F75DFA054A22 +:10D010000023F6F766FF02BDA21C0028981C00281A +:10D0200040787D0150FB4A00174A1268120C120426 +:10D0300089B2114381607047C160704701617047D8 +:10D0400000B50068C00F002801D1104800E00020A2 +:10D0500000BDF8B507000C0015001E003800FFF7F2 +:10D06000EFFF00280DD129003800FFF7E5FF310060 +:10D070003800FFF7E3FF21003800FFF7D5FF00205D +:10D0800000E00248F2BD00004CE9001001008A00F7 +:10D09000F8B584B0F8F7C9F8BA490127086803223F +:10D0A000904338430860B8480A6802400A60B749AC +:10D0B0000A6803239A433A430A600A6802400A60F6 +:10D0C000B3490A6803239A433A430A600A68024054 +:10D0D0000A60B0490A6803239A433A430A600A681F +:10D0E00010400860AC4801680F2291433943016049 +:10D0F000AA480168072291430160A94801680722F4 +:10D10000914304220A4302600168F0229143C02245 +:10D110000A4302600168C02292000A43026001686B +:10D12000C02212010A43026001689E4A0A4080211F +:10D13000490111430160E1480168802212060A4357 +:10D140000260DF48016839400029FAD001684908C7 +:10D1500039400029FAD0DB480168DB4A0A40026006 +:10D16000DA480168D84A0A40802149001143016029 +:10D17000D7480168D44A0A40802149001143016020 +:10D18000D4480168D04A0A400260D34801680722A7 +:10D19000914302220A430260D048016849004908CD +:10D1A0000160CF480168890A890229220A43026086 +:10D1B0000168CC4A0A4002600168802252040A4396 +:10D1C00002600168C84A0A400260016880221206B3 +:10D1D0000A430260C5480168C54A0A408021C90067 +:10D1E000114301600168FF229143AF220A430260AC +:10D1F000802189020268BF4B13400B4303608022E9 +:10D2000092040368BC4C1C4014430460BB4B04688C +:10D210001C400460046880252D0625430560B8483D +:10D2200004680725AC43022525430560B54804681A +:10D23000240E2406B44D254305600468B34D2540F3 +:10D24000802464052C430460046880252D06254352 +:10D250000560AF480468640064080460AD4C802534 +:10D26000AD002668A2483040284320602068FF2691 +:10D27000B04362260643266026689E4830408026DA +:10D28000F6020643266026689B483040024322602F +:10D290002068184020602068802212060243226025 +:10D2A0009D4802680724A2430224144304609B485B +:10D2B00002687F24A24328241443046002688C4C33 +:10D2C00014402C43046002688A4C144021430160DE +:10D2D0000168894A0A400260914902680A40026076 +:10D2E00002681A4002600268802424061443046025 +:10D2F0008C4802680724A243022414430460B04807 +:10D3000002687F24A2431E24144304600268784C00 +:10D310001440254305600268764C1440C0229202F6 +:10D32000224302600268744C144004600268114099 +:10D33000016001680B4003600168802212060A4305 +:10D340000260A048006838400028FAD09E48006873 +:10D3500038400028FAD09D48006838400028FAD0AC +:10D360009B48006838400028FAD09A480168072294 +:10D3700091430160684698491022F7F7B5FC0026F2 +:10D3800035E000BFC4132040FFFCFFFF0013204026 +:10D3900080132040A01320400000244000152640A8 +:10D3A00044152640FF8FFFFF32200021F7F746FE8D +:10D3B000300040B2800028180168302291432200DA +:10D3C00052B21201302313400B430360641E20004D +:10D3D00040B26946320052B25200895C00B209B2D2 +:10D3E0008842E1DA32200021F7F728FE761C30006F +:10D3F00040B208283FD2300040B204280DD1EFF3EC +:10D400001084002080F31088FA239B000022012161 +:10D41000102000F00BFA84F31088704D300040B2F9 +:10D420008000281801680F2291436A4633005BB2DE +:10D430005B00D21852781207120F0A4302603000C4 +:10D4400040B280002818016830220A430260300090 +:10D4500040B2800028180168802252000A4302600E +:10D46000300040B2800028180168802212060A436A +:10D4700002600224ABE75A48134A01681140016078 +:10D48000F821C94303680B400360564803681A40FB +:10D490000260026811400160F7F7A8FE5248016877 +:10D4A000802212060A43026001680F430760F7F703 +:10D4B00092FE00F039F805B0F0BD00BF1C15264003 +:10D4C0002415264010102040FF00FFFF08102040C8 +:10D4D0000C1020402003204004122640041926404E +:10D4E00008192640FFFFF8FFFFFFFFEF0019264055 +:10D4F000FFE0FFFFFFFFE0FFFFFFFFF9FFFFFFCFB0 +:10D500000812264014192640F1D24D00FFFFFF8F6C +:10D5100018192640101926400C12264000162640E5 +:10D52000FFFFFFF71012264038B586B068462F4936 +:10D530001822F7F7D9FB6846F9F740FFC0B2002878 +:10D540000ED02B4C18222B492000FAF7CDF90020E1 +:10D55000E075FF20A830284908600020FAF724FA77 +:10D56000264D2800FAF7BCF9C0B200280ED0204C96 +:10D57000182220492000FAF7B7F90020E075FF20B3 +:10D58000AA301D4908600020FAF70EFA1C4C2868E2 +:10D59000206020681B4940181B49F6F7A7FD1B496E +:10D5A00008601B4D20681B494018FA218900F6F7D6 +:10D5B0009DFD28602868C0031749086007B030BD8A +:10D5C000041626400C1926401C19264040162640F9 +:10D5D000441626401412264054E8001040122640FB +:10D5E000080020400804204008152640C4E7001029 +:10D5F000181B0028E4E10010E81B0028841C002808 +:10D60000881C00283F420F0040420F00901C002859 +:10D610008C1C0028E7030000941C0028F3B595B08B +:10D62000170000210D000800684601801C00A4B20C +:10D63000A408200080B280218900884203D30125FC +:10D64000684604807E4C1C9E00F011F9002800D032 +:10D6500099E06846877016A8077801A81021F9F7A5 +:10D660005BFA0198022188433100C9B249000222C5 +:10D67000114001430191019804218843FFB2B90090 +:10D680000422114001430191019808218843694611 +:10D690008978C900082211400143019101981021A5 +:10D6A00088430190019820218843019001984021EE +:10D6B000884301900198802101430191614F0198B5 +:10D6C000384015A909780902F82252010A4002439C +:10D6D000019201985C490140019101980002000A01 +:10D6E000A82149050143019111A81021F9F714FA65 +:10D6F0001198800A8002A4B2A105890D01431191FD +:10D7000052480068002806D101980740D020400107 +:10D710003843019007E0002805D001980740802099 +:10D72000400138430190002211A901A8FFF79FF89A +:10D73000EDB2002D03D06846008800F08DF809A8EE +:10D740001021F9F7E9F9099802218843F6B271002E +:10D75000022211400143099109983D490140099174 +:10D7600009983C49014080204002084309900998EB +:10D770000002000A8821490501430991002109A8F6 +:10D78000FEF7EBFF50E000F07DF80128FBD000F041 +:10D7900073F80128F7D10DA81021F9F7BDF90DA8EC +:10D7A0000078FD2101400DA801700DA800780C2122 +:10D7B00001430DA801700D980002000AB02149052F +:10D7C00001430D9100210DA8FEF7C7FF00F054F8AA +:10D7D000002829D1EDB2002D03D06846008800F062 +:10D7E0003BF805A81021F9F797F90598022188431D +:10D7F000F6B27100022211400143059105981449C7 +:10D8000001400591059813490140802040020843DA +:10D81000059005980002000A8821490501430591F9 +:10D82000002105A8FEF799FF17B0F0BD1CB5012433 +:10D8300000949BB2D2B2C9B2C0B2FFF7EFFE13BDE3 +:10D84000FF010000FFE0FFFFFF1FFFFF3007001791 +:10D85000FF00FFFFFFFF00FF0D490A680D4B13405B +:10D8600080B200050C4A02401A430A60704708481B +:10D870000068C00FC0B27047084801680800C007C0 +:10D88000C00F704705480068C00FC0B27047000065 +:10D8900028102640FFFF0FC00000F03F2C1026404C +:10D8A00000B5010009B2002905D40121C006C00E4F +:10D8B00081408F48016000BDF0B5020012B2002A1D +:10D8C00018D418228B4B040024B2A408A4001C59BD +:10D8D000FF250600F6001640B540AC438901C9B2E9 +:10D8E0000500ED002A409140214300B280088000ED +:10D8F00019501CE00F22804C182503001BB2134066 +:10D90000083B9B089B00060036B23240083A92085A +:10D910009200A258FF260700FF002F40BE40B243EE +:10D920008901C9B2C0000540A9401143E150F0BDD2 +:10D9300080B500F012F87148714902680A4002602F +:10D94000704802680A4002606F4802681140016036 +:10D9500000F092F800F0A9F801BDFEB568466B49E9 +:10D960000CC90CC008390838002630000AE06A46A5 +:10D970000300DBB2DB00D2185268521C11400029B0 +:10D980000ED1401C0100C9B200290AD107216A4604 +:10D990000300DBB2DB00D2580A40002AE7D0FEE7E2 +:10D9A000FEE75B4C072021680140002900D0FEE71C +:10D9B000584F3968491C0840002800D0FEE7350060 +:10D9C00024E068462900C9B2C90040184168684689 +:10D9D0002A00D2B2D200805800F044F815E030009E +:10D9E0000028EED02168491E68462A00D2B2D20033 +:10D9F000805800F037F868462900C9B2C9004018BD +:10DA000041683868401C00F02DF86D1C2800C0B239 +:10DA1000002826D168462900C9B2C900405800280C +:10DA200014D0206869462A00D2B2D20089588842B0 +:10DA30000AD368462900C9B2C90040184068216865 +:10DA4000884201D30120CBE73000C9E768462900AE +:10DA5000C9B2C9004018406821688842BFD301207C +:10DA6000BEE7F7BD80B50022002302E00CC00838F5 +:10DA700008308842FAD301BD30B5274880082749CD +:10DA8000274A002308E01C00E4B2A40014591D003A +:10DA9000EDB2AD004C515B1C1C000500E4B2EDB2D0 +:10DAA000AC42F0D31F48016030BD10B510231121E6 +:10DAB0001A4800221C00E4B2A4001459DBB29B00F7 +:10DAC000C4500B00DBB29B00D258C9B2890042504F +:10DAD00001210020FFF7F0FE00210120FFF7ECFEFE +:10DAE0000020FFF7DDFE0120FFF7DAFE10BD000089 +:10DAF00000E100E000E400E01CED00E00013204045 +:10DB0000FFFFF7FF80132040A0132040B8E800106B +:10DB1000DCE10010E0E1001080000000001D0028A2 +:10DB20000000001008ED00E000B5010009B2002976 +:10DB300005D40121C006C00E81404A48016000BDE5 +:10DB400000B5FEE780B54848006848480068C10F46 +:10DB5000002905D046498005800D8000085880477F +:10DB60000020FFF7E1FF01BD80B542480068424850 +:10DB70000068C10F002905D03D498005800D800057 +:10DB8000085880470120FFF7CFFF01BD80B53B4813 +:10DB900000683B480068C10F002905D03449800562 +:10DBA000800D8000085880470220FFF7BDFF01BDAF +:10DBB00080B53448006834480068C10F002905D09A +:10DBC0002B498005800D8000085880470320FFF70F +:10DBD000ABFF01BD80B52D4800682D480068C10F1E +:10DBE000002905D022498005800D80000858804713 +:10DBF0000420FFF799FF01BD80B52648006826483C +:10DC00000068C10F002905D019498005800D8000EA +:10DC1000085880470520FFF787FF01BD80B51F48E2 +:10DC200000681F480068C10F002905D01049800511 +:10DC3000800D8000085880470620FFF775FF01BD62 +:10DC400080B51848006818480068C10F002905D041 +:10DC500007498005800D8000085880470720FFF79E +:10DC600063FF01BD80E200E02CE9001000112040BC +:10DC70004809002830E900100411204034E9001060 +:10DC80000811204038E900100C1120403CE9001038 +:10DC90001011204040E900101411204044E9001008 +:10DCA0001811204048E900101C112040ACE600107B +:10DCB00004E8001080023140040000000800000069 +:10DCC000800658403A01000000093140020000007F +:10DCD0000A0F0D07E0010000FC530000982100002E +:10DCE000F4010000E8030000F401000038E7001030 +:10DCF00014E8001080023140050000000800000018 +:10DD0000000758403B0100000005314001000000C1 +:10DD10000AF0D07076010000E0150000D417000072 +:10DD20005E010000E8030000F401000054E7001069 +:10DD300024E800100004314000000000080000004A +:10DD400080095840400100000007314000000000F9 +:10DD5000090F0D0795030000901A0000282300000A +:10DD6000F4010000E8030000F401000070E7001077 +:10DD700034E800108000314000000000080000007E +:10DD8000000658403901000000063140050000003F +:10DD900009F0D07087020000201C000098210000CC +:10DDA000F4010000D0070000F401000080B5F3F793 +:10DDB0007FFAFCF773F9FCF761F8FA208000F7F7B7 +:10DDC0007DF9F4E710B5FEF73BFBFEF777F8FFF7B8 +:10DDD0005FF9F3F76DFAFEF733FB002803D0FEF787 +:10DDE0006DF8002801D1FFF7E1FF204C00F042F868 +:10DDF000206000F042F82068FBF7DEFFFCF76EF8C9 +:10DE0000002801D0FFF7D2FF62B6194CF5F7D4FF16 +:10DE100020602068002804D00120FCF737F8FFF7C5 +:10DE2000C5FF0120F4F7BDFFFCF778F8002804D106 +:10DE30000120FCF72BF8FFF7B9FFF7F719FA0028D4 +:10DE400001D1FFF7B3FFF7F76FFAFCF7C7F8FCF75C +:10DE500045F8002803D0F3F72BFAFCF71FF9FCF77D +:10DE60000DF8FA208000F7F729F9ECE7EC1B002801 +:10DE7000281200280648006870470020C043044963 +:10DE800008600449086000200349086070470000EA +:10DE9000001826400418264008102640443A5C68C2 +:10DEA00075616E672E7875657765695C4769745C26 +:10DEB000436F676E69746976655F4167656E745C10 +:10DEC0002E636F6465785F746D705C736561742D2B +:10DED0006669726D776172652D6275696C642D6219 +:10DEE00061643338633535313366393461393362CF +:10DEF0003532633831626334303338363763335CFC +:10DF0000636F6D6D6F6E5C7372635C64726976656E +:10DF100072735C6970635C63795F6970635F64727C +:10DF2000762E6800F1B401684118436858080A1851 +:10DF300000988068DB0701D54B46C01891422DD070 +:10DF40000D78491C032403262E4002D10E78F61CBE +:10DF5000491C2B090F2B07D10B780F33491C03E009 +:10DF60000F78491C0770401C761EF9D1002BE5D0B4 +:10DF70000E78491CAD082C40032C01D10C78491CAB +:10DF800024023419654244190025AE1E9E42D5D0A4 +:10DF90002678641C0670401C6D1CF6E700980C3057 +:10DFA000F2BC704700053140060000000000000090 +:10DFB000801890400200000000063140010000007F +:10DFC00000000000401990400500000000053140AD +:10DFD0000700000000000000C0189040030000008F +:10DFE000000531400500000000000000401890408E +:10DFF00001000000000631400200000000000000A7 +:10E000008019904006000000000631400600000024 +:10E0100000000000801A90400A0000000400000088 +:10E0200000000000000000000000000001000303E9 +:10E030001F4E000000000000000000000000000073 +:10E0400000000000000000000000000000000000D0 +:10E0500000000000000000000000000002030000BB +:10E0600000000000030000000000000003000000AA +:10E07000000000000300000000000000030000009A +:10E080000000000003000000010000000102000089 +:10E09000040000000000000000000000000000007C +:10E0A000010003031F4E00000000000000000000FC +:10E0B000204E0000000000000000000000000000F2 +:10E0C0000000000000000000000000000000000050 +:10E0D0000203000000000000030000000000000038 +:10E0E000030000000000000003000000000000002A +:10E0F0000300000000000000030000000100000019 +:10E100000102000004000000000000000000000008 +:10E110000000000001000303630000000000000095 +:10E1200000000000320000000000000000000000BD +:10E1300000000000000000000000000000000000DF +:10E1400000000000020300000000000003000000C7 +:10E1500000000000030000000000000003000000B9 +:10E1600000000000030000000000000003000000A9 +:10E17000010000000102000072B61048104908605A +:10E18000BFF34F8F0120C0040E490A6802430A60A2 +:10E190000D490A6802430A600C490A6802430A6092 +:10E1A000002000210D4A03C26A45FCD1084FB84740 +:10E1B000084FB847084FB847FEE7000000000010BE +:10E1C00008ED00E00013204080132040A013204001 +:10E1D00031D9001045E60010A9E7001000FF012822 +:10E1E000FFFF0128443A5C6875616E672E7875659B +:10E1F0007765695C4769745C436F676E69746976BB +:10E20000655F4167656E745C6669726D77617265A2 +:10E210005C7432675C747669696268386D5C7372CD +:10E22000635C73797374656D5C7265765F645C734F +:10E23000797374656D5F747669696268386D5F6360 +:10E240006D30706C75732E6300000000443A5C689A +:10E2500075616E672E7875657765695C4769745C72 +:10E26000436F676E69746976655F4167656E745C5C +:10E270006669726D776172655C7432675C74766929 +:10E28000696268386D5C7372635C6472697665722A +:10E29000735C737973636C6B5C63795F73797363BD +:10E2A0006C6B2E6800000000443A5C6875616E6714 +:10E2B0002E7875657765695C4769745C436F676E36 +:10E2C00069746976655F4167656E745C6669726DD5 +:10E2D000776172655C7432675C747669696268380C +:10E2E0006D5C7372635C647269766572735C73797A +:10E2F00073636C6B5C63795F737973636C6B2E63B0 +:10E3000000000000443A5C6875616E672E787565A0 +:10E310007765695C4769745C436F676E6974697699 +:10E32000655F4167656E745C6669726D7761726581 +:10E330005C7432675C636F6D6D6F6E5C7372635C8F +:10E34000647269766572735C7379737469636B5C0C +:10E3500063795F7379737469636B2E6300000000E7 +:10E36000443A5C6875616E672E7875657765695C9F +:10E370004769745C436F676E69746976655F41676E +:10E38000656E745C6669726D776172655C74326724 +:10E390005C636F6D6D6F6E5C7372635C6D775C66F2 +:10E3A0006C6173685C63795F6D775F666C617368DD +:10E3B0002E6300009F0F000000000000000000001E +:10E3C000000000000000000000000300000000004A +:10E3D000000000000000000000030000000000003A +:10E3E0000300000000000000030000000000000027 +:10E3F0000300000000000000030000000100000016 +:10E40000000000000100000000000000000000000B +:10E4100010000000100000001000000001000001CA +:10E4200000000000000000000000000000000000EC +:10E4300000000000000000000000000000000000DC +:10E4400070B40123002413E00168001D194202D0BA +:10E450004D466918491E0C60091D121F042AFAD284 +:10E460000D00960701D50C80AD1C1A4000D02C7011 +:10E470000268001D002AE7D170BC70470000000050 +:10E480000600000000000000000000000000000086 +:10E49000000000000000000000000000000000007C +:10E4A000000000000000000000000000000000006C +:10E4B0000000000006000000000000000000000056 +:10E4C000000000000000000000000000000000004C +:10E4D000000000000000000000000000000000003C +:10E4E000000000000000000008000000150000000F +:10E4F000000000000000000000000000000000001C +:10E50000000000000000000000000000000000000B +:10E510000000000000000000010000000E000000EC +:10E5200015000000000000000000000000000000D6 +:10E5300000000000000000000000000000000000DB +:10E5400000000000000000000000000001000000CA +:10E5500006000000000000000000000000000000B5 +:10E5600000000000000000000000000000000000AB +:10E57000000000000000000000000000000000009B +:10E580000000000006000000000000000000000085 +:10E59000000000000000000000000000000000007B +:10E5A000000000000000000000000000000000006B +:10E5B000000000000200000000000000983A000087 +:10E5C0000E01FA00CC0190010200000003000000DF +:10E5D00000000000983A0000720182001C02CC0189 +:10E5E000020000000500000000000000307500007F +:10E5F000F6001901BD02EE01020000000600000055 +:10E60000000000003075000087018C009501940126 +:10E610000200000001000000A8E80010B4E50010AE +:10E6200002000000A4E9001008003200020000000F +:10E63000B0E80010E4E5001002000000A0E90010BE +:10E640000C00320010B5074979441831064C7C445F +:10E65000163404E0081D0A68891888470100A142A1 +:10E66000F8D110BD0800000024000000D5FDFFFF18 +:10E67000CC0900000813002800000000A9F8FFFFE3 +:10E680005A030000380100000008002800000301C0 +:10E690000000000001000000000000000000000079 +:10E6A00001000000FF0F0100000000004D4F544F1B +:10E6B000525F494E325F4842375F4842385F484FA9 +:10E6C00052495A4F4E54414C0000000004207146FC +:10E6D000084202D0EFF3098001E0EFF3088000B5B3 +:10E6E0000149884700BD0000AF79001000F00EF826 +:10E6F000002801D0FFF7A6FF00BF00BF002000BF29 +:10E7000000BFFFF75FFB00F003F800000020704738 +:10E7100080B500F001F801BD0746384600F002F868 +:10E72000FBE7000080B500BF00BF024A11001820BF +:10E73000ABBEFBE7260002004D4F544F525F494EDF +:10E74000335F4842355F4842365F534541545F501E +:10E75000414E00004D4F544F525F494E345F484286 +:10E76000335F4842345F4241434B524553540000AB +:10E770004D4F544F525F494E315F4842315F4842DE +:10E78000325F4C4547524553540000000420714607 +:10E79000084201D0EFF30980EFF3088000B501498A +:10E7A000884700BD65E800100548014603B4684687 +:10E7B00080F3098800BF00BF00BF00BFFFF796FFCE +:10E7C000A5EDF5FE00127A00000000000024F40020 +:10E7D0000080000000800000008000009E029E0A71 +:10E7E000AA02AA0ACE03CE0B2A042A0C0003000BAD +:10E7F000010002000400080010002000400080001A +:10E8000000010002484F52495A4F4E54414C5F4854 +:10E81000414C4C00534541545F50414E5F48414C80 +:10E820004C0000004241434B524553545F48414C19 +:10E830004C0000004C4547524553545F48414C4CF6 +:10E8400000000000E02E0000401F0000E02E00004D +:10E85000102700000003000100040103020200026F +:10E86000000300058169891E0978C9B201607047FB +:10E870000000000000010101010101000001000091 +:10E880000203040506080C10000000000000000050 +:10E890000200000001000000040300011314001531 +:10E8A000C7010300010000004001BE00F401AE01F9 +:10E8B00087018C009501940100080028FFFF0128C2 +:10E8C0000000000000000000000000000000000048 +:10E8D0000000000000000000000000000000000038 +:10E8E0000000000000000000000000000000000028 +:10E8F0000000000000000000000000000000000018 +:10E900000000000000000000000000000000000007 +:10E9100000000000000000000000000000000000F7 +:10E9200000000000000000000000000000000000E7 +:10E9300000000000000000000000000000000000D7 +:10E9400000000000000000000000000000000000C7 +:10E9500000000000000000000000000000000000B7 +:10E9600000000000000000000000000000000000A7 +:10E970000000000000000000000000000000000097 +:10E980000000000000000000000000000000000087 +:10E990000000000000000000000000000001020371 +:10E9A00032325A325A5A5A32000102035A5A5A5AC9 +:10E9B000FEE70000FEE70000FEE70000FEE70000C3 +:10E9C000FEE70000FEE70000FEE70000FEE70000B3 +:10E9D000FEE70000FEE70000FEE7400455000200ED +:10E9E0000100015003459C0010000132FD0CA00401 +:10E9F0000900040101000112050E83DCE728600410 +:10EA0000FFFFFF1F020225920807F001035240009A +:10EA100001F2060218F2060418F2060618F20608B9 +:10EA200018F306005478F10618F2060418F20606E8 +:10EA300018F2050818F002FF41DB001004F1FF0492 +:10EA4000F1FF04F1FF04F1FF04F1FF04F1FF04F111 +:10EA5000FF04F147046C0248090028060AF3210666 +:10EA60000001F12334F25208680009010101020398 +:10EA70000203010F0F010000000000000000000071 +:10EA80000000000000000000000000000000000086 +:10EA90000000000000000000000000000000000076 +:10EAA0000000000000000000000000000000000066 +:10EAB0000000000000000000000000000000000056 +:10EAC0000000000000000000000000000000000046 +:10EAD0000000000000000000000000000000000036 +:10EAE0000000000000000000000000000000000026 +:10EAF0000000000000000000000000000000000016 +:10EB00000000000000000000000000000000000005 +:10EB100000000000000000000000000000000000F5 +:10EB200000000000000000000000000000000000E5 +:10EB300000000000000000000000000000000000D5 +:10EB400000000000000000000000000000000000C5 +:10EB500000000000000000000000000000000000B5 +:10EB600000000000000000000000000000000000A5 +:10EB70000000000000000000000000000000000095 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000000000000065 +:10EBB0000000000000000000000000000000000055 +:10EBC0000000000000000000000000000000000045 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 +:01EBF0000024 +:040000051000E7A957 :00000001FF diff --git a/firmware/t2g/Seat_Controller_demo/IAR/rev_d/Exe/Seat_Controller_demo.out b/firmware/t2g/Seat_Controller_demo/IAR/rev_d/Exe/Seat_Controller_demo.out index 0a1d75c88c77f6379b0a64c9ea75b5dc42183b42..87949f45ae6f657748386fb10d562c8450b195f4 100755 GIT binary patch delta 418157 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 WvSuAe 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 I9++(We}|(HBLDyZ delta 378027 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