From 806de2a4f5376be4c8c837a01005b25135168a0b Mon Sep 17 00:00:00 2001 From: miaobyte Date: Mon, 2 Nov 2026 14:04:01 +0800 Subject: [PATCH 1/6] =?UTF-8?q?feat(runtimec):=20C11=20=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E6=97=B6=E6=9E=B6=E6=9E=84=E9=AA=A8=E6=9E=B6=E3=80=81BinIR=20?= =?UTF-8?q?=E5=A5=91=E7=BA=A6=E4=B8=8E=20fail-closed=20=E4=B8=BB=E5=B9=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 从零搭建 runtimec:C11 架构骨架(vmkv/vmbin/vmjit/engine/host/interface/ include)、BinIR 契约与读写别名约定、优化支柱文档、架构交接文档,并把主干 收敛为单一 fail-closed 架构。 净新增 99 个文件,全部位于 runtimec/ 下。 Co-Authored-By: Claude Code --- runtimec/CMakeLists.txt | 188 +++++++++++ runtimec/README.md | 284 ++++++++++++++++ runtimec/contract/allocator.c | 45 +++ runtimec/contract/allocator.h | 53 +++ runtimec/contract/checkpoint.c | 38 +++ runtimec/contract/checkpoint.h | 52 +++ runtimec/contract/error.c | 43 +++ runtimec/contract/error.h | 61 ++++ runtimec/contract/host_services.c | 54 +++ runtimec/contract/host_services.h | 112 +++++++ runtimec/contract/snapshot.c | 47 +++ runtimec/contract/snapshot.h | 67 ++++ runtimec/contract/status.c | 49 +++ runtimec/contract/status.h | 39 +++ runtimec/contract/view.c | 62 ++++ runtimec/contract/view.h | 73 +++++ runtimec/documentation/architecture/README.md | 14 + .../architecture/capability-map.md | 32 ++ .../architecture/runtimec-architecture.md | 119 +++++++ .../architecture/runtimec-dependencies.mmd | 41 +++ .../architecture/runtimec-dependencies.png | Bin 0 -> 77213 bytes .../architecture/runtimec-dependencies.svg | 1 + .../architecture/runtimec-execution.mmd | 31 ++ .../architecture/runtimec-execution.png | Bin 0 -> 147796 bytes .../architecture/runtimec-execution.svg | 1 + .../architecture/runtimec-trunk.mmd | 26 ++ .../architecture/runtimec-trunk.png | Bin 0 -> 51909 bytes .../architecture/runtimec-trunk.svg | 1 + .../architecture/rwir-binrwir-aliasing.mmd | 38 +++ .../architecture/rwir-binrwir-aliasing.png | Bin 0 -> 79991 bytes .../architecture/rwir-binrwir-aliasing.svg | 1 + runtimec/engine/engine.c | 134 ++++++++ runtimec/engine/program_repository.h | 76 +++++ runtimec/engine/route.c | 34 ++ runtimec/engine/route.h | 55 ++++ runtimec/engine/session.h | 52 +++ runtimec/host/host.c | 79 +++++ runtimec/host/host.h | 32 ++ runtimec/host/host_internal.h | 10 + runtimec/host/kvspace_adapter.c | 30 ++ runtimec/host/kvspace_adapter.h | 31 ++ runtimec/include/kvlang/runtimec.h | 106 ++++++ runtimec/interface/exports.txt | 3 + runtimec/interface/public_interface.c | 111 +++++++ runtimec/specification/README.md | 18 + .../five-language-behavior-matrix.md | 33 ++ runtimec/specification/rwir_catalog.def | 13 + runtimec/specification/scalar_operations.def | 13 + runtimec/tests/CMakeLists.txt | 90 +++++ runtimec/tests/contracts_test.c | 69 ++++ runtimec/tests/public_headers_c_test.c | 30 ++ .../tests/public_headers_cplusplus_test.cpp | 25 ++ runtimec/tests/stub_fail_closed_test.c | 100 ++++++ .../architecture/check_behavior_matrix.py | 166 ++++++++++ runtimec/tools/architecture/check_exports.py | 50 +++ runtimec/tools/architecture/check_layers.py | 218 +++++++++++++ runtimec/tools/architecture/check_names.py | 213 ++++++++++++ runtimec/vmbin/binding.c | 89 +++++ runtimec/vmbin/binding.h | 90 +++++ runtimec/vmbin/builtin/registry.c | 54 +++ runtimec/vmbin/builtin/registry.h | 64 ++++ runtimec/vmbin/call.c | 71 ++++ runtimec/vmbin/call.h | 51 +++ runtimec/vmbin/exit.h | 59 ++++ runtimec/vmbin/frame.c | 105 ++++++ runtimec/vmbin/frame.h | 70 ++++ runtimec/vmbin/instruction.c | 42 +++ runtimec/vmbin/instruction.h | 85 +++++ runtimec/vmbin/interpreter.c | 30 ++ runtimec/vmbin/interpreter.h | 31 ++ runtimec/vmbin/interpreter_dispatch.c | 44 +++ runtimec/vmbin/interpreter_dispatch.h | 39 +++ runtimec/vmbin/profile.c | 50 +++ runtimec/vmbin/profile.h | 46 +++ runtimec/vmbin/program.c | 206 ++++++++++++ runtimec/vmbin/program.h | 216 ++++++++++++ runtimec/vmbin/reference.c | 52 +++ runtimec/vmbin/reference.h | 49 +++ runtimec/vmbin/signature.c | 37 +++ runtimec/vmbin/signature.h | 68 ++++ runtimec/vmbin/value.h | 60 ++++ runtimec/vmjit/backend.h | 58 ++++ runtimec/vmjit/backend/aarch64.c | 20 ++ runtimec/vmjit/backend/backend.c | 22 ++ runtimec/vmjit/backend/x86_64.c | 21 ++ runtimec/vmjit/cache.h | 58 ++++ runtimec/vmjit/code.h | 32 ++ runtimec/vmjit/code_memory.h | 42 +++ runtimec/vmjit/compiler.h | 55 ++++ runtimec/vmjit/execution_interface.h | 46 +++ runtimec/vmjit/lower.h | 34 ++ runtimec/vmjit/plan.h | 50 +++ runtimec/vmjit/verifier.h | 54 +++ runtimec/vmjit/vmjit.c | 307 ++++++++++++++++++ runtimec/vmjit/vmjit.h | 48 +++ runtimec/vmkv/compiler.h | 52 +++ runtimec/vmkv/rwir.h | 83 +++++ runtimec/vmkv/source.h | 41 +++ runtimec/vmkv/vmkv.c | 116 +++++++ 99 files changed, 6210 insertions(+) create mode 100644 runtimec/CMakeLists.txt create mode 100644 runtimec/README.md create mode 100644 runtimec/contract/allocator.c create mode 100644 runtimec/contract/allocator.h create mode 100644 runtimec/contract/checkpoint.c create mode 100644 runtimec/contract/checkpoint.h create mode 100644 runtimec/contract/error.c create mode 100644 runtimec/contract/error.h create mode 100644 runtimec/contract/host_services.c create mode 100644 runtimec/contract/host_services.h create mode 100644 runtimec/contract/snapshot.c create mode 100644 runtimec/contract/snapshot.h create mode 100644 runtimec/contract/status.c create mode 100644 runtimec/contract/status.h create mode 100644 runtimec/contract/view.c create mode 100644 runtimec/contract/view.h create mode 100644 runtimec/documentation/architecture/README.md create mode 100644 runtimec/documentation/architecture/capability-map.md create mode 100644 runtimec/documentation/architecture/runtimec-architecture.md create mode 100644 runtimec/documentation/architecture/runtimec-dependencies.mmd create mode 100644 runtimec/documentation/architecture/runtimec-dependencies.png create mode 100644 runtimec/documentation/architecture/runtimec-dependencies.svg create mode 100644 runtimec/documentation/architecture/runtimec-execution.mmd create mode 100644 runtimec/documentation/architecture/runtimec-execution.png create mode 100644 runtimec/documentation/architecture/runtimec-execution.svg create mode 100644 runtimec/documentation/architecture/runtimec-trunk.mmd create mode 100644 runtimec/documentation/architecture/runtimec-trunk.png create mode 100644 runtimec/documentation/architecture/runtimec-trunk.svg create mode 100644 runtimec/documentation/architecture/rwir-binrwir-aliasing.mmd create mode 100644 runtimec/documentation/architecture/rwir-binrwir-aliasing.png create mode 100644 runtimec/documentation/architecture/rwir-binrwir-aliasing.svg create mode 100644 runtimec/engine/engine.c create mode 100644 runtimec/engine/program_repository.h create mode 100644 runtimec/engine/route.c create mode 100644 runtimec/engine/route.h create mode 100644 runtimec/engine/session.h create mode 100644 runtimec/host/host.c create mode 100644 runtimec/host/host.h create mode 100644 runtimec/host/host_internal.h create mode 100644 runtimec/host/kvspace_adapter.c create mode 100644 runtimec/host/kvspace_adapter.h create mode 100644 runtimec/include/kvlang/runtimec.h create mode 100644 runtimec/interface/exports.txt create mode 100644 runtimec/interface/public_interface.c create mode 100644 runtimec/specification/README.md create mode 100644 runtimec/specification/five-language-behavior-matrix.md create mode 100644 runtimec/specification/rwir_catalog.def create mode 100644 runtimec/specification/scalar_operations.def create mode 100644 runtimec/tests/CMakeLists.txt create mode 100644 runtimec/tests/contracts_test.c create mode 100644 runtimec/tests/public_headers_c_test.c create mode 100644 runtimec/tests/public_headers_cplusplus_test.cpp create mode 100644 runtimec/tests/stub_fail_closed_test.c create mode 100644 runtimec/tools/architecture/check_behavior_matrix.py create mode 100644 runtimec/tools/architecture/check_exports.py create mode 100644 runtimec/tools/architecture/check_layers.py create mode 100644 runtimec/tools/architecture/check_names.py create mode 100644 runtimec/vmbin/binding.c create mode 100644 runtimec/vmbin/binding.h create mode 100644 runtimec/vmbin/builtin/registry.c create mode 100644 runtimec/vmbin/builtin/registry.h create mode 100644 runtimec/vmbin/call.c create mode 100644 runtimec/vmbin/call.h create mode 100644 runtimec/vmbin/exit.h create mode 100644 runtimec/vmbin/frame.c create mode 100644 runtimec/vmbin/frame.h create mode 100644 runtimec/vmbin/instruction.c create mode 100644 runtimec/vmbin/instruction.h create mode 100644 runtimec/vmbin/interpreter.c create mode 100644 runtimec/vmbin/interpreter.h create mode 100644 runtimec/vmbin/interpreter_dispatch.c create mode 100644 runtimec/vmbin/interpreter_dispatch.h create mode 100644 runtimec/vmbin/profile.c create mode 100644 runtimec/vmbin/profile.h create mode 100644 runtimec/vmbin/program.c create mode 100644 runtimec/vmbin/program.h create mode 100644 runtimec/vmbin/reference.c create mode 100644 runtimec/vmbin/reference.h create mode 100644 runtimec/vmbin/signature.c create mode 100644 runtimec/vmbin/signature.h create mode 100644 runtimec/vmbin/value.h create mode 100644 runtimec/vmjit/backend.h create mode 100644 runtimec/vmjit/backend/aarch64.c create mode 100644 runtimec/vmjit/backend/backend.c create mode 100644 runtimec/vmjit/backend/x86_64.c create mode 100644 runtimec/vmjit/cache.h create mode 100644 runtimec/vmjit/code.h create mode 100644 runtimec/vmjit/code_memory.h create mode 100644 runtimec/vmjit/compiler.h create mode 100644 runtimec/vmjit/execution_interface.h create mode 100644 runtimec/vmjit/lower.h create mode 100644 runtimec/vmjit/plan.h create mode 100644 runtimec/vmjit/verifier.h create mode 100644 runtimec/vmjit/vmjit.c create mode 100644 runtimec/vmjit/vmjit.h create mode 100644 runtimec/vmkv/compiler.h create mode 100644 runtimec/vmkv/rwir.h create mode 100644 runtimec/vmkv/source.h create mode 100644 runtimec/vmkv/vmkv.c diff --git a/runtimec/CMakeLists.txt b/runtimec/CMakeLists.txt new file mode 100644 index 00000000..87ac9add --- /dev/null +++ b/runtimec/CMakeLists.txt @@ -0,0 +1,188 @@ +# 组件:runtimec 顶层构建 +# 作用:C11-only 构建(不链接 libstdc++);按 contract/host/vmbin/vmkv/ +# vmjit/engine/interface 生成独立 target,并从 interface/exports.txt +# 生成三平台导出脚本(README §9、§10)。当前产物名刻意带 _scaffold,禁止用于 +# benchmark/tutorial/发布。 +# 联系:各 target 的 include 只暴露 include/ 与自身私有目录;vmkv/vmbin +# 的 build test 不链 vmjit(README §10)。 +cmake_minimum_required(VERSION 3.20) + +project(kvlang_runtimec_scaffold VERSION 0.1.0 LANGUAGES C) + +include(CTest) + +set(CMAKE_C_STANDARD 11) +set(CMAKE_C_STANDARD_REQUIRED ON) +set(CMAKE_C_EXTENSIONS OFF) +set(CMAKE_POSITION_INDEPENDENT_CODE ON) +set(CMAKE_C_VISIBILITY_PRESET hidden) +set(CMAKE_VISIBILITY_INLINES_HIDDEN ON) + +option(RUNTIMEC_ENABLE_VMJIT "Enable vmjit execution capability" ON) + +set(RUNTIMEC_INCLUDE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include") +set(RUNTIMEC_GENERATED_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/generated") +file(MAKE_DIRECTORY "${RUNTIMEC_GENERATED_DIRECTORY}") + +set(RUNTIMEC_EXPORT_MANIFEST "${CMAKE_CURRENT_SOURCE_DIR}/interface/exports.txt") +file(STRINGS "${RUNTIMEC_EXPORT_MANIFEST}" RUNTIMEC_PUBLIC_SYMBOLS) +set(RUNTIMEC_ELF_EXPORTS "{\n global:\n") +set(RUNTIMEC_MACHO_EXPORTS "") +set(RUNTIMEC_WINDOWS_EXPORTS "LIBRARY kvlang_runtimec_scaffold\nEXPORTS\n") +foreach(public_symbol IN LISTS RUNTIMEC_PUBLIC_SYMBOLS) + string(APPEND RUNTIMEC_ELF_EXPORTS " ${public_symbol};\n") + string(APPEND RUNTIMEC_MACHO_EXPORTS "_${public_symbol}\n") + string(APPEND RUNTIMEC_WINDOWS_EXPORTS " ${public_symbol}\n") +endforeach() +string(APPEND RUNTIMEC_ELF_EXPORTS " local: *;\n};\n") +file(WRITE "${RUNTIMEC_GENERATED_DIRECTORY}/exports.map" "${RUNTIMEC_ELF_EXPORTS}") +file(WRITE "${RUNTIMEC_GENERATED_DIRECTORY}/exports.macos" "${RUNTIMEC_MACHO_EXPORTS}") +file(WRITE "${RUNTIMEC_GENERATED_DIRECTORY}/exports.def" "${RUNTIMEC_WINDOWS_EXPORTS}") + +function(runtimec_configure_target target_name) + target_compile_features(${target_name} PRIVATE c_std_11) + target_include_directories(${target_name} + PRIVATE + "${CMAKE_CURRENT_SOURCE_DIR}" + "${RUNTIMEC_INCLUDE_DIRECTORY}") + set_target_properties(${target_name} PROPERTIES + C_VISIBILITY_PRESET hidden + POSITION_INDEPENDENT_CODE ON) + + if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang|AppleClang") + target_compile_options(${target_name} PRIVATE + -Wall -Wextra -Wpedantic -Werror + -Wstrict-prototypes -Wmissing-prototypes) + elseif(MSVC) + target_compile_options(${target_name} PRIVATE /W4) + endif() +endfunction() + +# 每个组件必须拥有真实源文件。缺失组件说明目录或构建关系错误,配置阶段 +# 立即失败;禁止用空翻译单元把缺失能力伪装成成功构建。 +function(runtimec_add_component target_name) + set(component_sources) + foreach(component_path IN LISTS ARGN) + file(GLOB_RECURSE path_sources CONFIGURE_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/${component_path}/*.c") + list(APPEND component_sources ${path_sources}) + endforeach() + + if(NOT component_sources) + message(FATAL_ERROR + "runtimec component ${target_name} has no source files") + endif() + + add_library(${target_name} STATIC ${component_sources}) + runtimec_configure_target(${target_name}) +endfunction() + +runtimec_add_component(runtimec_contract contract) +runtimec_add_component(runtimec_host host) + +set(RUNTIMEC_BINRWIR_SOURCES + "${CMAKE_CURRENT_SOURCE_DIR}/vmbin/instruction.c" + "${CMAKE_CURRENT_SOURCE_DIR}/vmbin/program.c" + "${CMAKE_CURRENT_SOURCE_DIR}/vmbin/reference.c" + "${CMAKE_CURRENT_SOURCE_DIR}/vmbin/signature.c") +foreach(binrwir_source IN LISTS RUNTIMEC_BINRWIR_SOURCES) + if(NOT EXISTS "${binrwir_source}") + message(FATAL_ERROR "required BinRWIR source is missing: ${binrwir_source}") + endif() +endforeach() +add_library(runtimec_binrwir STATIC ${RUNTIMEC_BINRWIR_SOURCES}) +runtimec_configure_target(runtimec_binrwir) + +file(GLOB_RECURSE RUNTIMEC_VMBIN_SOURCES CONFIGURE_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/vmbin/*.c") +list(REMOVE_ITEM RUNTIMEC_VMBIN_SOURCES ${RUNTIMEC_BINRWIR_SOURCES}) +if(NOT RUNTIMEC_VMBIN_SOURCES) + message(FATAL_ERROR "runtimec component runtimec_vmbin has no execution sources") +endif() +add_library(runtimec_vmbin STATIC ${RUNTIMEC_VMBIN_SOURCES}) +runtimec_configure_target(runtimec_vmbin) + +runtimec_add_component(runtimec_vmkv vmkv) +runtimec_add_component(runtimec_vmjit vmjit) +runtimec_add_component(runtimec_engine engine) + +target_include_directories(runtimec_contract + PUBLIC + "$") +target_link_libraries(runtimec_host + PRIVATE runtimec_contract) +target_link_libraries(runtimec_binrwir + PRIVATE runtimec_contract) +target_link_libraries(runtimec_vmbin + PRIVATE runtimec_contract runtimec_binrwir) +target_link_libraries(runtimec_vmkv + PRIVATE runtimec_contract runtimec_binrwir) +target_link_libraries(runtimec_vmjit + PRIVATE runtimec_contract runtimec_binrwir) +target_link_libraries(runtimec_engine + PRIVATE + runtimec_contract + runtimec_host + runtimec_vmbin + runtimec_vmkv + runtimec_vmjit) +target_compile_definitions(runtimec_vmjit + PRIVATE RUNTIMEC_VMJIT_ENABLED=$) +target_compile_definitions(runtimec_engine + PRIVATE RUNTIMEC_VMJIT_ENABLED=$) + +# 编译公共二进制接口实现一次,在静态接口组件和 scaffold 动态库间共享。 +add_library(runtimec_interface_objects OBJECT interface/public_interface.c) +runtimec_configure_target(runtimec_interface_objects) +target_compile_definitions(runtimec_interface_objects + PRIVATE KVLANG_RUNTIMEC_BUILDING_LIBRARY=1) + +add_library(runtimec_interface STATIC + $) +runtimec_configure_target(runtimec_interface) +target_link_libraries(runtimec_interface + PUBLIC runtimec_contract + PRIVATE runtimec_engine) + +add_library(kvlang_runtimec_scaffold SHARED + $) +target_include_directories(kvlang_runtimec_scaffold + PUBLIC "$") +target_link_libraries(kvlang_runtimec_scaffold + PRIVATE runtimec_interface runtimec_engine) +set_target_properties(kvlang_runtimec_scaffold PROPERTIES + C_VISIBILITY_PRESET hidden + OUTPUT_NAME kvlang_runtimec_scaffold + POSITION_INDEPENDENT_CODE ON) + +if(APPLE) + target_link_options(kvlang_runtimec_scaffold PRIVATE + "LINKER:-exported_symbols_list,${RUNTIMEC_GENERATED_DIRECTORY}/exports.macos") + set_property(TARGET kvlang_runtimec_scaffold APPEND PROPERTY + LINK_DEPENDS "${RUNTIMEC_GENERATED_DIRECTORY}/exports.macos") +elseif(WIN32) + target_sources(kvlang_runtimec_scaffold PRIVATE + "${RUNTIMEC_GENERATED_DIRECTORY}/exports.def") +elseif(UNIX) + target_link_options(kvlang_runtimec_scaffold PRIVATE + "LINKER:--version-script=${RUNTIMEC_GENERATED_DIRECTORY}/exports.map") + set_property(TARGET kvlang_runtimec_scaffold APPEND PROPERTY + LINK_DEPENDS "${RUNTIMEC_GENERATED_DIRECTORY}/exports.map") +endif() + +add_library(kvlang::runtimec_contract ALIAS runtimec_contract) +add_library(kvlang::runtimec_host ALIAS runtimec_host) +add_library(kvlang::runtimec_binrwir ALIAS runtimec_binrwir) +add_library(kvlang::runtimec_vmbin ALIAS runtimec_vmbin) +add_library(kvlang::runtimec_vmkv ALIAS runtimec_vmkv) +add_library(kvlang::runtimec_vmjit ALIAS runtimec_vmjit) +add_library(kvlang::runtimec_engine ALIAS runtimec_engine) +add_library(kvlang::runtimec_interface ALIAS runtimec_interface) +add_library(kvlang::runtimec_scaffold ALIAS kvlang_runtimec_scaffold) + +if(BUILD_TESTING) + if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/tests/CMakeLists.txt") + message(FATAL_ERROR "BUILD_TESTING requires runtimec/tests/CMakeLists.txt") + endif() + add_subdirectory(tests) +endif() diff --git a/runtimec/README.md b/runtimec/README.md new file mode 100644 index 00000000..3583b3c5 --- /dev/null +++ b/runtimec/README.md @@ -0,0 +1,284 @@ +# runtimec 架构与实现总纲 + +> 当前状态:目录、数据结构、函数边界和验收闸门已经建立;语言执行语义尚未实现。 +> `scaffold` 产物名必须保留到真实语义通过验收,防止骨架被误当成可发布实现。 + +`runtimec/` 是 kvlang 唯一目标运行时。它使用 C11 实现,在一个清晰主干中同时 +容纳可恢复执行、RWIR 编译、BinRWIR 基线执行和 vmjit 加速。未实现的能力必须 +返回 `RUNTIMEC_STATUS_NOT_IMPLEMENTED`,非法输入必须返回 +`RUNTIMEC_STATUS_INVALID`;空值、零、`false` 或默认结构都不能伪装成功。 + +## 1. 绝对原则 + +1. **只有一条正常方向。** 正常完成只返回 `RUNTIMEC_STATUS_SUCCESS`;其它状态 + 必须准确说明暂停、等待、回退、未支持、未实现、非法输入、内存不足或错误。 +2. **只有一条执行主干。** `engine/route` 是唯一策略汇合点;任何组件都不能绕过它 + 自行选择 vmjit 或 vmbin。 +3. **只有一个正确性执行器。** vmbin 必须覆盖全部合法 BinRWIR;vmjit 可以拒绝, + 但不能成为正确性依赖。 +4. **只有一个事实源。** kvspace 明文保存可恢复语义事实;BinRWIR Program、寄存器 + 缓存、机器码和分析结果都可删除并重建。 +5. **错误立即停止。** 不猜测输入、不截断、不静默修复、不转入另一套入口。 +6. **不保留旧入口。** 公共层只有 `include/kvlang/runtimec.h` 和 + `interface/public_interface.c` 定义的结构化接口。 +7. **行为先决策后实现。** 任何语言行为先填写五语言矩阵,再进入 specification + manifest 或执行代码。 +8. **名字表达完整含义。** 除 runtimec、RWIR、BinRWIR、vmkv、vmbin、vmjit、 + kvspace、vthread 和 langtype 外,自造缩写必须展开。 +9. **Less code, more useful capability.** 不为错误分层增加修补代码,不建立第三执行器。 + +## 2. 唯一主干 + +```text +public interface + -> engine route + -> vmkv reads and compiles RWIR + -> immutable BinRWIR Program + -> vmjit try + -> executed + -> fallback to vmbin + -> route commits effects and checkpoint +``` + +主干含义不能重排: + +- `engine/route.c` 选择并驱动执行路径。 +- `vmkv` 读取 kvspace 中的 RWIR,完成解析、校验、类型固化和 Program 构造。 +- `vmbin` 拥有不可变 BinRWIR Program 和全部基线语义。 +- `vmjit` 只读取已经验证的 Program;无法证明安全时返回 + `RUNTIMEC_STATUS_FALLBACK`。 +- route 将同一 Program 和可恢复状态交给 vmbin,随后提交 effect、program counter + 和 checkpoint。 + +generic、typed、fused 和 continuous execution 都是 vmbin 内部 handler 选择, +不是新组件,也没有第二个公开执行入口。 + +## 3. 目录主干 + +```text +runtimec/ +├── include/kvlang/runtimec.h # 唯一公共 C 头 +├── interface/ # 公共请求、结果与精确导出名单 +│ ├── public_interface.c +│ └── exports.txt +├── contract/ # 跨组件状态、错误、所有权和 host port +├── host/ # kvspace 与外部能力适配 +├── vmkv/ # RWIR -> BinRWIR Program +├── vmbin/ # BinRWIR 所有者与正确性执行器 +│ ├── value.h +│ ├── reference.* +│ ├── signature.* +│ ├── instruction.* +│ ├── program.* +│ ├── binding.* +│ ├── frame.* +│ ├── call.* +│ ├── interpreter.* +│ └── exit.h +├── vmjit/ # 可拒绝的机器码加速器 +│ ├── execution_interface.h +│ ├── verifier.h +│ ├── plan.h +│ ├── lower.h +│ ├── backend.h +│ └── backend/ +├── engine/ # session、Program repository、唯一 route +├── specification/ # 行为与 RWIR manifest 的单一事实源 +├── documentation/architecture/ # 架构说明、矩阵与 Mermaid 源 +├── tools/architecture/ # 名称、依赖、矩阵、导出闸门 +└── tests/ # 公共接口、结构合同和失败封闭测试 +``` + +组件没有源文件时,CMake 配置必须 `FATAL_ERROR`。禁止生成空翻译单元让缺失组件 +看似构建成功。 + +## 4. BinRWIR 主干 + +### 4.1 所有权 + +BinRWIR 属于 vmbin,不属于 vmkv 或 vmjit: + +- vmkv 只能通过 Program builder 构造它; +- vmbin 解释它并定义全部合法行为; +- vmjit 只消费只读 Program view; +- Program finalize 后不可变; +- profile、编译计划、机器码缓存和融合计划是可丢弃 sidecar。 + +### 4.2 参数数量 + +BinRWIR 必须保留 RWIR 的不固定参数数量语义,但编译完成后每条指令的读取数量和 +写入数量固定。常用形式使用紧凑 instruction header;超出紧凑范围时引用冷侧表。 +无论底层表示如何,消费者只看到一个规范化 view: + +```text +[ReadReference ...][WriteReference ...] +``` + +不得截断参数,也不得为了编码方便把一个具有原子语义的 RWIR 操作拆成多个可观察 +操作。 + +### 4.3 五条优化主线 + +1. 指令编码:减少解析与分发。 +2. 类型固化:把已经确定的具体类型写入特化指令。 +3. 指令融合:以 sidecar 计划选择更少的内部 handler,不改变 Program 语义。 +4. 寄存器优化:中间结果留在寄存器或派生 Cell 中,提交边界再物化。 +5. 控制流优化:减少分支和调度,同时保留逐 source instruction 的观察点。 + +这些都是 vmbin 或 vmjit 的优化方法,不产生第三执行器。 + +## 5. Read/Write 与别名 + +RWIR 和 BinRWIR 都只有读取参数与写入参数。原地算法通过显式别名绑定同一 canonical +Cell,不引入第三种参数方向: + +```text +Read register ──> Binding ──┐ + ├──> canonical Cell +Write register ──> Binding ──┘ +``` + +- 读取 register 只能读,写入 register 只能写。 +- 两个 register identifier 始终不同,即使 Binding 指向同一 Cell。 +- callee Signature 是 alias policy 的唯一拥有者。 +- 写入后,后续通过读取别名看到新值,并遵循程序顺序。 +- 未声明允许的别名立即返回 `RUNTIMEC_STATUS_INVALID`。 +- 跨 frame 别名依靠 canonical Cell identity,不建立 pointer chain。 + +## 6. vmjit 边界 + +vmjit 只做加速:verify、plan、lower、backend、code memory 和 execute。它不能: + +- 读取或解析 RWIR; +- 访问具体 kvspace 类型; +- 定义 opcode 或 builtin 语义; +- 修改不可变 Program; +- 吞掉 guard、机器码生成或平台不支持错误; +- 绕过 route 提交 effect。 + +x86_64 与 AArch64 是同一 backend contract 的并列实现。任一实现缺失时,该平台明确 +回退 vmbin,不能报告 vmjit 可用。 + +## 7. 状态与提交 + +`runtimec_status_t` 的唯一成功值是 `RUNTIMEC_STATUS_SUCCESS`。控制状态与错误状态 +不可混用: + +- `YIELD`、`WAIT`:执行尚未正常完成; +- `FALLBACK`:vmjit 没有执行,route 必须转入 vmbin; +- `UNSUPPORTED`:当前能力不接受该操作; +- `NOT_IMPLEMENTED`:骨架没有该能力; +- `INVALID`:输入违反合同; +- `OUT_OF_MEMORY`、`ERROR`:明确失败。 + +所有输出参数先进入无效或空状态,再开始可能失败的工作。只有完整 instruction effect +成功后,route 才按 values → program counter → status/error 的顺序提交 checkpoint。 + +## 8. 五语言决策矩阵 + +`specification/five-language-behavior-matrix.md` 是语言行为决策的唯一事实源。 + +- C、Python、Rust、Go、V8/TypeScript 一致:kvlang 必须遵从。 +- 五家分裂:记录选择阵营、原因、边界 fixture 和非法输入结果。 +- 每个 specification manifest 条目都必须带 + `behavior-decision: ` 并引用已有行。 +- 没有矩阵记录,不能添加 specification 条目或执行语义。 + +`tools/architecture/check_behavior_matrix.py` 强制检查以上规则。矩阵变化是语言变化, +必须与对应 fixture 和设计记录同时评审。 + +## 9. 公共接口 + +公共层只安装 `include/kvlang/runtimec.h`,只导出 `interface/exports.txt` 中的符号。 +当前结构化入口是 create、execute、destroy;请求、结果、错误和调用方 buffer 都有明确 +类型。公共头不暴露 RWIR、BinRWIR、vmkv、vmbin、vmjit 或 kvspace 内部结构。 + +CMake 从导出清单生成 Linux、macOS 和 Windows 的平台导出文件, +`check_exports.py` 对最终动态库逐名复核。多一个或少一个符号都失败。 + +## 10. 依赖方向 + +允许方向: + +```text +public header -> public header +interface -> public header + contract + engine +engine/route -> host + vmkv + BinRWIR + vmjit + vmbin +vmkv -> contract + BinRWIR build contract +vmbin -> contract + BinRWIR +vmjit -> contract + read-only BinRWIR execution contract +host -> contract + external kvspace interface +``` + +禁止方向: + +```text +vmkv -> vmjit +vmbin -> vmjit +vmjit -> vmkv +vmjit -> concrete host implementation +any VM component -> concrete kvspace type +engine files other than route -> vmkv/vmbin/vmjit +public header -> internal runtimec header +``` + +`tools/architecture/check_layers.py` 检查 include graph 和 route 唯一性;新增依赖失败时, +先修正文件所有权,不扩大允许表。 + +## 11. 名称规则 + +允许保留的 kvlang 原子术语: + +```text +kvlang kvspace runtimec RWIR BinRWIR vmkv vmbin vmjit vthread langtype +``` + +其它名称按 C、Python、Rust、Go 和 V8/TypeScript 的主流直觉写完整单词。例如使用 +`argument`、`buffer`、`context`、`descriptor`、`identifier`、`program_counter`、 +`reference`、`request`、`source`,不用其缩写。 + +`tools/architecture/check_names.py` 还会拒绝: + +- 旧目录名和非唯一公共头; +- 非唯一的成功状态名; +- 任何其它中间表示名称; +- 独立快速内核、执行窗口和其它第三执行器名称; +- 旧类型、宏和测试前缀。 + +## 12. 验收 + +最小 fresh 验收: + +```bash +cmake -S runtimec -B /tmp/kvlang-runtimec-build \ + -DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTING=ON +cmake --build /tmp/kvlang-runtimec-build --parallel +ctest --test-dir /tmp/kvlang-runtimec-build --output-on-failure +``` + +验收必须覆盖: + +- 唯一公共头在 C11 与 C++17 中可直接包含; +- 公共函数声明和精确导出清单一致; +- 未实现入口失败封闭并清空输出; +- BinRWIR 跨组件紧凑结构尺寸; +- 唯一状态名、完整名称和零第三执行器; +- route 唯一性与依赖方向; +- 五语言矩阵完整且所有语义引用存在。 + +语义实现后按 shared memory → benchmark quick → benchmark full → tutorial 的顺序验证。 +当前 scaffold 没有执行语义,不运行 benchmark 或 tutorial。 + +## 13. DeepSeek 实现合同 + +实现前按此顺序读取: + +1. `README.md` +2. `documentation/architecture/runtimec-architecture.md` +3. `specification/five-language-behavior-matrix.md` +4. `specification/README.md` +5. 目标组件头文件 + +每次实现只沿主干增加真实能力:先矩阵和合同,再 vmkv 编译,再 vmbin 正确性,最后 +vmjit 加速。遇到不清楚的输入或状态必须失败,不能添加第二入口、旧名字别名、空组件 +兜底或隐藏执行路径。 diff --git a/runtimec/contract/allocator.c b/runtimec/contract/allocator.c new file mode 100644 index 00000000..c50fcaf7 --- /dev/null +++ b/runtimec/contract/allocator.c @@ -0,0 +1,45 @@ +/* + * 组件:contract/allocator 的实现 + * 作用:对显式分配器做参数校验后转发;不缓存、不统计、不分配自身状态。 + * 联系:host/vmbin/vmkv/vmjit/engine 的冷路径分配经这里;测试可注入 + * 计数或失败分配器,验证内存耗尽与失败封闭行为。 + */ + +#include "contract/allocator.h" + +static bool runtimec_alignment_is_valid(size_t alignment) { + return alignment != 0U && (alignment & (alignment - 1U)) == 0U; +} + +void runtimec_allocator_reset(runtimec_allocator_t *allocator) { + if (allocator != NULL) { + allocator->context = NULL; + allocator->allocate = NULL; + allocator->deallocate = NULL; + } +} + +bool runtimec_allocator_is_valid(const runtimec_allocator_t *allocator) { + return allocator != NULL && allocator->allocate != NULL && + allocator->deallocate != NULL; +} + +void *runtimec_allocator_allocate(const runtimec_allocator_t *allocator, + size_t size, size_t alignment) { + if (!runtimec_allocator_is_valid(allocator) || size == 0U || + !runtimec_alignment_is_valid(alignment)) { + return NULL; + } + return allocator->allocate(allocator->context, size, alignment); +} + +runtimec_status_t runtimec_allocator_deallocate( + const runtimec_allocator_t *allocator, void *allocation, + size_t size, size_t alignment) { + if (allocation == NULL || !runtimec_allocator_is_valid(allocator) || + size == 0U || !runtimec_alignment_is_valid(alignment)) { + return RUNTIMEC_STATUS_INVALID; + } + allocator->deallocate(allocator->context, allocation, size, alignment); + return RUNTIMEC_STATUS_SUCCESS; +} diff --git a/runtimec/contract/allocator.h b/runtimec/contract/allocator.h new file mode 100644 index 00000000..834711b6 --- /dev/null +++ b/runtimec/contract/allocator.h @@ -0,0 +1,53 @@ +#ifndef RUNTIMEC_CONTRACT_ALLOCATOR_H +#define RUNTIMEC_CONTRACT_ALLOCATOR_H + +/* + * 组件:contract/allocator + * 作用:所有冷路径动态内存的显式来源。指令执行热路径不得动态分配; + * 分配器不得藏进全局状态或线程局部存储。 + * 联系:contract 层只依赖自身;host、vmbin、vmkv、vmjit、engine 的 arena、 + * Program 存储、code memory 之外的冷分配都经本接口,便于测试注入、 + * 内存耗尽分类与 session 级生命周期。 + * 约束:分配/释放必须成对且 size/alignment 一致;alignment 为 2 的幂。 + */ + +#include +#include + +#include "contract/status.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void *(*runtimec_allocate_function_t)(void *context, size_t size, + size_t alignment); +typedef void (*runtimec_deallocate_function_t)(void *context, + void *allocation, + size_t size, + size_t alignment); + +/* 显式分配器:context 由实现解释,两个函数指针必须同时存在。 */ +typedef struct runtimec_allocator { + void *context; + runtimec_allocate_function_t allocate; + runtimec_deallocate_function_t deallocate; +} runtimec_allocator_t; + +/* 置为空分配器(两个函数指针为 NULL);空分配器不是有效分配器。 */ +void runtimec_allocator_reset(runtimec_allocator_t *allocator); +/* 两个函数指针均非空才算有效。 */ +bool runtimec_allocator_is_valid(const runtimec_allocator_t *allocator); +/* size==0、alignment 非 2 的幂或分配器无效时返回 NULL,不调用实现。 */ +void *runtimec_allocator_allocate(const runtimec_allocator_t *allocator, + size_t size, size_t alignment); +/* 参数无效时返回 INVALID;仅在释放函数确实被调用后返回 SUCCESS。 */ +runtimec_status_t runtimec_allocator_deallocate( + const runtimec_allocator_t *allocator, void *allocation, + size_t size, size_t alignment); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/contract/checkpoint.c b/runtimec/contract/checkpoint.c new file mode 100644 index 00000000..eb621406 --- /dev/null +++ b/runtimec/contract/checkpoint.c @@ -0,0 +1,38 @@ +/* + * 组件:contract/checkpoint 的实现 + * 作用:checkpoint 的空值构造与形状校验;不执行提交、不接触 kvspace。 + * 联系:engine/route 组装后交给 host 的 checkpoint 能力;host 只执行 + * 已组织好的提交,不自行决定 durable 状态。 + */ + +#include "contract/checkpoint.h" + +void runtimec_checkpoint_reset(runtimec_checkpoint_t *checkpoint) { + if (checkpoint != NULL) { + checkpoint->contract_version = runtimec_contract_version(); + runtimec_source_revision_reset(&checkpoint->source_revision); + checkpoint->sequence = 0U; + checkpoint->runtime_identifier = runtimec_string_view_make(NULL, 0U); + checkpoint->vthread_identifier = runtimec_string_view_make(NULL, 0U); + checkpoint->frame_identifier = runtimec_string_view_make(NULL, 0U); + checkpoint->logical_program_counter = + runtimec_string_view_make(NULL, 0U); + checkpoint->persistent_status = runtimec_string_view_make(NULL, 0U); + checkpoint->outcome = RUNTIMEC_STATUS_SUCCESS; + runtimec_error_reset(&checkpoint->error); + } +} + +bool runtimec_checkpoint_is_valid(const runtimec_checkpoint_t *checkpoint) { + return checkpoint != NULL && + checkpoint->contract_version.binary_interface == + RUNTIMEC_CONTRACT_BINARY_INTERFACE_VERSION && + runtimec_status_is_valid(checkpoint->outcome) && + runtimec_string_view_is_valid(checkpoint->runtime_identifier) && + runtimec_string_view_is_valid(checkpoint->vthread_identifier) && + runtimec_string_view_is_valid(checkpoint->frame_identifier) && + runtimec_string_view_is_valid( + checkpoint->logical_program_counter) && + runtimec_string_view_is_valid(checkpoint->persistent_status) && + runtimec_error_is_valid(&checkpoint->error); +} diff --git a/runtimec/contract/checkpoint.h b/runtimec/contract/checkpoint.h new file mode 100644 index 00000000..c6905b2f --- /dev/null +++ b/runtimec/contract/checkpoint.h @@ -0,0 +1,52 @@ +#ifndef RUNTIMEC_CONTRACT_CHECKPOINT_H +#define RUNTIMEC_CONTRACT_CHECKPOINT_H + +/* + * 组件:contract/checkpoint + * 作用:一次 durable 提交所需的逻辑身份与状态:契约版本、source + * revision、单调 sequence、runtime/vthread/frame 逻辑标识符、逻辑 + * 程序计数器、durable status、outcome 与错误。checkpoint 只携带 + * 持久逻辑身份;禁止写入进程指针、机器返回地址、intern 标识符或 + * 机器码地址。 + * 联系:contract 只依赖自身;engine/route 在每条成功指令后组织 + * checkpoint,经 host port 的 checkpoint 函数提交;host 适配层负责 + * 把它映射到 kvspace 的程序计数器、状态和错误槽。vmbin/vmjit + * 不直接提交,只把结构化 outcome 交给 route。 + * 约束:所有字符串字段都是 borrowed view;序列号由调用方单调递增。 + */ + +#include +#include + +#include "contract/error.h" +#include "contract/snapshot.h" +#include "contract/status.h" +#include "contract/view.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct runtimec_checkpoint { + runtimec_version_t contract_version; + runtimec_source_revision_t source_revision; /* 提交所对应的 source 世代 */ + uint64_t sequence; /* 单调提交序号,用于幂等/对账 */ + runtimec_string_view_t runtime_identifier; + runtimec_string_view_t vthread_identifier; + runtimec_string_view_t frame_identifier; + runtimec_string_view_t logical_program_counter; + runtimec_string_view_t persistent_status; /* running/paused/waiting/done/error */ + runtimec_status_t outcome; /* 本次提交的组件结果 */ + runtimec_error_t error; /* 失败时的错误详情 */ +} runtimec_checkpoint_t; + +/* 构造空 checkpoint:版本置当前值、视图置空、结果为成功、错误清空。 */ +void runtimec_checkpoint_reset(runtimec_checkpoint_t *checkpoint); +/* 形状校验:二进制接口版本、结果枚举、全部视图与错误自洽。 */ +bool runtimec_checkpoint_is_valid(const runtimec_checkpoint_t *checkpoint); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/contract/error.c b/runtimec/contract/error.c new file mode 100644 index 00000000..03889105 --- /dev/null +++ b/runtimec/contract/error.c @@ -0,0 +1,43 @@ +/* + * 组件:contract/error 的实现 + * 作用:错误值的重置、写入与自洽校验;不分配、不读外部状态。 + * 联系:host 适配层把 kvspace 错误翻译成本域错误,vmkv/vmbin/engine 只 + * 透传或补充逻辑程序计数器,不得抹去原错误分类。 + */ + +#include "contract/error.h" + +void runtimec_error_reset(runtimec_error_t *error) { + if (error != NULL) { + error->status = RUNTIMEC_STATUS_SUCCESS; + error->domain = RUNTIMEC_ERROR_DOMAIN_NONE; + error->code = 0; + error->message = runtimec_string_view_make(NULL, 0U); + error->logical_program_counter = runtimec_string_view_make(NULL, 0U); + } +} + +void runtimec_error_set(runtimec_error_t *error, runtimec_status_t status, + runtimec_error_domain_t domain, int64_t code, + runtimec_string_view_t message, + runtimec_string_view_t logical_program_counter) { + if (error != NULL) { + error->status = status; + error->domain = domain; + error->code = code; + error->message = message; + error->logical_program_counter = logical_program_counter; + } +} + +bool runtimec_error_is_valid(const runtimec_error_t *error) { + return error != NULL && runtimec_status_is_valid(error->status) && + error->domain >= RUNTIMEC_ERROR_DOMAIN_NONE && + error->domain <= RUNTIMEC_ERROR_DOMAIN_EXTENSION && + runtimec_string_view_is_valid(error->message) && + runtimec_string_view_is_valid(error->logical_program_counter); +} + +bool runtimec_error_is_set(const runtimec_error_t *error) { + return error != NULL && error->status != RUNTIMEC_STATUS_SUCCESS; +} diff --git a/runtimec/contract/error.h b/runtimec/contract/error.h new file mode 100644 index 00000000..49548f89 --- /dev/null +++ b/runtimec/contract/error.h @@ -0,0 +1,61 @@ +#ifndef RUNTIMEC_CONTRACT_ERROR_H +#define RUNTIMEC_CONTRACT_ERROR_H + +/* + * 组件:contract/error + * 作用:跨组件统一的错误形状:component status + 稳定错误域 + 稳定 code + + * 借用消息视图 + 逻辑程序计数器。执行或编译错误必须保留稳定分类 + * 与对应的 source 程序计数器。 + * 联系:contract 层只依赖自身;host 用 HOST/STORAGE/CHECKPOINT/EXTENSION + * 域包装 kvspace/扩展错误,vmkv(编译诊断)、vmbin(执行错误)、 + * engine/route(提交错误)都通过本结构把错误交给上层。 + * 注意:message 与 logical_program_counter 都是借用视图,生命周期归调用链上的 + * 缓冲区所有;不得在这里分配或释放。 + */ + +#include +#include + +#include "contract/status.h" +#include "contract/view.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* 错误来源域;跨域报告便于上层区分契约错误、宿主错误与扩展错误。 */ +typedef enum runtimec_error_domain { + RUNTIMEC_ERROR_DOMAIN_NONE = 0, + RUNTIMEC_ERROR_DOMAIN_CONTRACT = 1, + RUNTIMEC_ERROR_DOMAIN_HOST = 2, + RUNTIMEC_ERROR_DOMAIN_STORAGE = 3, + RUNTIMEC_ERROR_DOMAIN_CHECKPOINT = 4, + RUNTIMEC_ERROR_DOMAIN_EXTENSION = 5 +} runtimec_error_domain_t; + +/* 跨组件错误值;所有字段都是普通数据或借用视图,可安全拷贝。 */ +struct runtimec_error { + runtimec_status_t status; /* 组件状态,见 contract/status.h */ + runtimec_error_domain_t domain; /* 错误来源域 */ + int64_t code; /* 稳定错误码,禁止用 -1 复用多义 */ + runtimec_string_view_t message; /* borrowed UTF-8 消息 */ + runtimec_string_view_t logical_program_counter; +}; + +/* 置为空错误(SUCCESS/NONE/0/空视图);不得依赖调用方预清零。 */ +void runtimec_error_reset(runtimec_error_t *error); +/* 写入一条错误;视图不复制,调用方须保证其生命周期覆盖本次调用链。 */ +void runtimec_error_set(runtimec_error_t *error, runtimec_status_t status, + runtimec_error_domain_t domain, int64_t code, + runtimec_string_view_t message, + runtimec_string_view_t logical_program_counter); +/* 结构是否自洽(状态枚举、域范围、视图有效性)。 */ +bool runtimec_error_is_valid(const runtimec_error_t *error); +/* 是否携带非 SUCCESS 状态。 */ +bool runtimec_error_is_set(const runtimec_error_t *error); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/contract/host_services.c b/runtimec/contract/host_services.c new file mode 100644 index 00000000..1a9e2a8b --- /dev/null +++ b/runtimec/contract/host_services.c @@ -0,0 +1,54 @@ +/* host 能力表的纯生命周期与形状校验。 */ + +#include "contract/host_services.h" + +void runtimec_host_value_header_reset(runtimec_host_value_header_t *header) { + if (header != NULL) { + header->value_size = 0U; + header->value_revision = 0U; + header->flags = 0U; + header->reserved = 0U; + } +} + +void runtimec_handoff_request_reset(runtimec_handoff_request_t *request) { + if (request != NULL) { + request->operation = runtimec_string_view_make(NULL, 0U); + runtimec_checkpoint_reset(&request->checkpoint); + } +} + +bool runtimec_handoff_request_is_valid( + const runtimec_handoff_request_t *request) { + return request != NULL && request->operation.size != 0U && + runtimec_string_view_is_valid(request->operation) && + runtimec_checkpoint_is_valid(&request->checkpoint); +} + +void runtimec_host_services_initialize(runtimec_host_services_t *services) { + if (services != NULL) { + services->binary_interface_version = + RUNTIMEC_HOST_SERVICES_BINARY_INTERFACE_VERSION; + services->context = NULL; + runtimec_allocator_reset(&services->allocator); + services->read = NULL; + services->read_header = NULL; + services->write = NULL; + services->write_partial = NULL; + services->remove = NULL; + services->list = NULL; + services->watch = NULL; + services->signal = NULL; + services->source_revision = NULL; + services->checkpoint = NULL; + services->handoff = NULL; + } +} + +bool runtimec_host_services_is_valid( + const runtimec_host_services_t *services) { + return services != NULL && + services->binary_interface_version == + RUNTIMEC_HOST_SERVICES_BINARY_INTERFACE_VERSION && + runtimec_allocator_is_valid(&services->allocator); +} diff --git a/runtimec/contract/host_services.h b/runtimec/contract/host_services.h new file mode 100644 index 00000000..d089575f --- /dev/null +++ b/runtimec/contract/host_services.h @@ -0,0 +1,112 @@ +#ifndef RUNTIMEC_CONTRACT_HOST_SERVICES_H +#define RUNTIMEC_CONTRACT_HOST_SERVICES_H + +/* + * host 向 engine、vmkv 与 vmbin 提供的唯一外部能力表。能力表只暴露 + * kvspace 操作,不暴露 kvspace 结构。缺失能力必须返回 NOT_IMPLEMENTED; + * 二进制接口版本必须精确一致,不提供旧布局兼容路径。 + */ + +#include +#include +#include + +#include "contract/allocator.h" +#include "contract/checkpoint.h" +#include "contract/error.h" +#include "contract/snapshot.h" +#include "contract/status.h" +#include "contract/view.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define RUNTIMEC_HOST_SERVICES_BINARY_INTERFACE_VERSION 1U + +typedef struct runtimec_host_value_header { + uint64_t value_size; + uint64_t value_revision; + uint32_t flags; + uint32_t reserved; +} runtimec_host_value_header_t; + +typedef runtimec_status_t (*runtimec_host_list_visitor_function_t)( + void *context, runtimec_key_view_t key, runtimec_error_t *error); + +typedef struct runtimec_handoff_request { + runtimec_string_view_t operation; + runtimec_checkpoint_t checkpoint; +} runtimec_handoff_request_t; + +typedef runtimec_status_t (*runtimec_host_read_function_t)( + void *context, const runtimec_snapshot_t *snapshot, + runtimec_key_view_t key, runtimec_bytes_buffer_t *output, + runtimec_error_t *error); +typedef runtimec_status_t (*runtimec_host_read_header_function_t)( + void *context, const runtimec_snapshot_t *snapshot, + runtimec_key_view_t key, runtimec_host_value_header_t *output, + runtimec_error_t *error); +typedef runtimec_status_t (*runtimec_host_write_function_t)( + void *context, const runtimec_snapshot_t *snapshot, + runtimec_key_view_t key, runtimec_bytes_view_t value, + runtimec_error_t *error); +typedef runtimec_status_t (*runtimec_host_write_partial_function_t)( + void *context, const runtimec_snapshot_t *snapshot, + runtimec_key_view_t key, uint64_t offset, + runtimec_bytes_view_t value, runtimec_error_t *error); +typedef runtimec_status_t (*runtimec_host_remove_function_t)( + void *context, const runtimec_snapshot_t *snapshot, + runtimec_key_view_t key, runtimec_error_t *error); +typedef runtimec_status_t (*runtimec_host_list_function_t)( + void *context, const runtimec_snapshot_t *snapshot, + runtimec_key_view_t prefix, + runtimec_host_list_visitor_function_t visitor, + void *visitor_context, runtimec_error_t *error); +typedef runtimec_status_t (*runtimec_host_watch_function_t)( + void *context, const runtimec_snapshot_t *snapshot, + runtimec_key_view_t key, runtimec_bytes_view_t expected, + uint64_t timeout_nanoseconds, runtimec_bytes_buffer_t *observed, + runtimec_error_t *error); +typedef runtimec_status_t (*runtimec_host_signal_function_t)( + void *context, runtimec_key_view_t key, runtimec_error_t *error); +typedef runtimec_status_t (*runtimec_host_source_revision_function_t)( + void *context, runtimec_key_view_t function_key, + runtimec_source_revision_t *revision, runtimec_error_t *error); +typedef runtimec_status_t (*runtimec_host_checkpoint_function_t)( + void *context, const runtimec_checkpoint_t *checkpoint, + runtimec_error_t *error); +typedef runtimec_status_t (*runtimec_host_handoff_function_t)( + void *context, const runtimec_handoff_request_t *request, + runtimec_error_t *error); + +typedef struct runtimec_host_services { + uint32_t binary_interface_version; + void *context; + runtimec_allocator_t allocator; + runtimec_host_read_function_t read; + runtimec_host_read_header_function_t read_header; + runtimec_host_write_function_t write; + runtimec_host_write_partial_function_t write_partial; + runtimec_host_remove_function_t remove; + runtimec_host_list_function_t list; + runtimec_host_watch_function_t watch; + runtimec_host_signal_function_t signal; + runtimec_host_source_revision_function_t source_revision; + runtimec_host_checkpoint_function_t checkpoint; + runtimec_host_handoff_function_t handoff; +} runtimec_host_services_t; + +void runtimec_host_value_header_reset(runtimec_host_value_header_t *header); +void runtimec_handoff_request_reset(runtimec_handoff_request_t *request); +bool runtimec_handoff_request_is_valid( + const runtimec_handoff_request_t *request); +void runtimec_host_services_initialize(runtimec_host_services_t *services); +bool runtimec_host_services_is_valid( + const runtimec_host_services_t *services); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/contract/snapshot.c b/runtimec/contract/snapshot.c new file mode 100644 index 00000000..ddd5680f --- /dev/null +++ b/runtimec/contract/snapshot.c @@ -0,0 +1,47 @@ +/* + * 组件:contract/snapshot 的实现 + * 作用:版本、source revision 与快照的构造/重置/形状校验;纯值操作。 + * 联系:engine 在取 Program 前构造快照;host 提供 source_revision; + * vmkv 在编译前后校验同一快照,拒绝事实变化期间产生的 Program; + * vmjit cache key 也引用它。 + */ + +#include "contract/snapshot.h" + +runtimec_version_t runtimec_contract_version(void) { + runtimec_version_t version; + version.major = (uint16_t)RUNTIMEC_CONTRACT_VERSION_MAJOR; + version.minor = (uint16_t)RUNTIMEC_CONTRACT_VERSION_MINOR; + version.patch = (uint16_t)RUNTIMEC_CONTRACT_VERSION_PATCH; + version.binary_interface = + (uint16_t)RUNTIMEC_CONTRACT_BINARY_INTERFACE_VERSION; + return version; +} + +void runtimec_source_revision_reset(runtimec_source_revision_t *revision) { + if (revision != NULL) { + revision->instance_identifier = 0U; + revision->generation = 0U; + revision->schema_version = 0U; + revision->instruction_set_version = 0U; + } +} + +void runtimec_snapshot_reset(runtimec_snapshot_t *snapshot) { + if (snapshot != NULL) { + snapshot->contract_version = runtimec_contract_version(); + runtimec_source_revision_reset(&snapshot->source_revision); + snapshot->function_key = runtimec_key_view_make(NULL, 0U); + snapshot->logical_program_counter = + runtimec_string_view_make(NULL, 0U); + } +} + +bool runtimec_snapshot_is_valid(const runtimec_snapshot_t *snapshot) { + return snapshot != NULL && + snapshot->contract_version.binary_interface == + RUNTIMEC_CONTRACT_BINARY_INTERFACE_VERSION && + runtimec_key_view_is_valid(snapshot->function_key) && + runtimec_string_view_is_valid( + snapshot->logical_program_counter); +} diff --git a/runtimec/contract/snapshot.h b/runtimec/contract/snapshot.h new file mode 100644 index 00000000..6b6adee0 --- /dev/null +++ b/runtimec/contract/snapshot.h @@ -0,0 +1,67 @@ +#ifndef RUNTIMEC_CONTRACT_SNAPSHOT_H +#define RUNTIMEC_CONTRACT_SNAPSHOT_H + +/* + * 组件:contract/snapshot + * 作用:一次编译/执行所依据的权威快照:契约版本、store 实例、source + * generation、schema/指令集版本、函数键与逻辑程序计数器。kvspace + * 明文是唯一持久语义事实源;snapshot 只用于判断派生状态是否仍对应 + * 当前事实,不能替代或修改事实源。 + * 联系:contract 层只依赖自身;host 提供原始事实,engine 在编译/执行前 + * 取快照,vmkv/vmbin/vmjit 只消费快照与 generation,不自己读 + * kvspace;Program 与机器码 cache 的 key 由 engine 用本结构构造。 + * 约束:snapshot 不携带进程地址或 kvspace 内部句柄。 + */ + +#include +#include + +#include "contract/view.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define RUNTIMEC_CONTRACT_VERSION_MAJOR 1U +#define RUNTIMEC_CONTRACT_VERSION_MINOR 0U +#define RUNTIMEC_CONTRACT_VERSION_PATCH 0U +#define RUNTIMEC_CONTRACT_BINARY_INTERFACE_VERSION 1U + +/* 契约二进制接口版本;跨进程或跨库边界时用于拒绝不一致的快照。 */ +typedef struct runtimec_version { + uint16_t major; + uint16_t minor; + uint16_t patch; + uint16_t binary_interface; +} runtimec_version_t; + +/* 权威 source 的世代:store 实例 + generation + schema/指令集版本。 + * 任一变化都必须让派生 Program、view、vmjit plan 与机器码失效。 */ +typedef struct runtimec_source_revision { + uint64_t instance_identifier; + uint64_t generation; + uint32_t schema_version; + uint32_t instruction_set_version; +} runtimec_source_revision_t; + +/* 一次编译/执行的权威身份;逻辑位置与函数键均为借用视图。 */ +typedef struct runtimec_snapshot { + runtimec_version_t contract_version; + runtimec_source_revision_t source_revision; + runtimec_key_view_t function_key; + runtimec_string_view_t logical_program_counter; +} runtimec_snapshot_t; + +runtimec_version_t runtimec_contract_version(void); +/* 归零为「未知来源」;不是有效 source revision,但可作为默认构造值。 */ +void runtimec_source_revision_reset(runtimec_source_revision_t *revision); +/* 置为空快照(版本 + 空视图);不分配。 */ +void runtimec_snapshot_reset(runtimec_snapshot_t *snapshot); +/* 形状校验:二进制接口版本匹配且两个视图有效;不查询外部事实。 */ +bool runtimec_snapshot_is_valid(const runtimec_snapshot_t *snapshot); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/contract/status.c b/runtimec/contract/status.c new file mode 100644 index 00000000..aa762640 --- /dev/null +++ b/runtimec/contract/status.c @@ -0,0 +1,49 @@ +/* + * 组件:contract/status 的实现 + * 作用:只做枚举范围、失败分类与诊断名的纯函数判断;不读 kvspace、不分配。 + * 联系:被 host/vmbin/vmkv/vmjit/engine/interface 共同调用,是组件边界的 + * 唯一状态词汇表。 + */ + +#include "contract/status.h" + +bool runtimec_status_is_valid(runtimec_status_t status) { + return status >= RUNTIMEC_STATUS_SUCCESS && + status <= RUNTIMEC_STATUS_INSUFFICIENT_CAPACITY; +} + +bool runtimec_status_is_failure(runtimec_status_t status) { + return status == RUNTIMEC_STATUS_UNSUPPORTED || + status == RUNTIMEC_STATUS_NOT_IMPLEMENTED || + status == RUNTIMEC_STATUS_INVALID || + status == RUNTIMEC_STATUS_OUT_OF_MEMORY || + status == RUNTIMEC_STATUS_INSUFFICIENT_CAPACITY || + status == RUNTIMEC_STATUS_ERROR; +} + +const char *runtimec_status_name(runtimec_status_t status) { + switch (status) { + case RUNTIMEC_STATUS_SUCCESS: + return "success"; + case RUNTIMEC_STATUS_YIELD: + return "yield"; + case RUNTIMEC_STATUS_WAIT: + return "wait"; + case RUNTIMEC_STATUS_FALLBACK: + return "fallback"; + case RUNTIMEC_STATUS_UNSUPPORTED: + return "unsupported"; + case RUNTIMEC_STATUS_NOT_IMPLEMENTED: + return "not_implemented"; + case RUNTIMEC_STATUS_INVALID: + return "invalid"; + case RUNTIMEC_STATUS_OUT_OF_MEMORY: + return "out_of_memory"; + case RUNTIMEC_STATUS_ERROR: + return "error"; + case RUNTIMEC_STATUS_INSUFFICIENT_CAPACITY: + return "insufficient_capacity"; + default: + return "invalid_status"; + } +} diff --git a/runtimec/contract/status.h b/runtimec/contract/status.h new file mode 100644 index 00000000..cd113857 --- /dev/null +++ b/runtimec/contract/status.h @@ -0,0 +1,39 @@ +#ifndef RUNTIMEC_CONTRACT_STATUS_H +#define RUNTIMEC_CONTRACT_STATUS_H + +/* + * 组件:contract/status + * 作用:声明跨组件统一的一次调用结果辅助函数。状态枚举定义在唯一公共头 + * kvlang/runtimec.h;SUCCESS 只能表示请求真实完成。 + * 联系:host、vmbin、vmkv、vmjit 与 engine 共用同一状态词汇。 + * 它不是三类状态中的另外两类: + * - execution exit(vmbin/exit.h 的 vmbin_exit_kind_t); + * - durable status(host/engine 通过 checkpoint 提交的 vthread 状态)。 + * 三者的转换只能由 engine/route.c 与 interface/public_interface.c + * 显式完成,其他组件不得猜测或改写状态类别。 + * 约束:失败路径必须把输出参数清零或恢复到文档化状态;不得用同一个 -1 + * 同时表示 unsupported、yield、invalid 与 error。 + */ + +#include + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct runtimec_error runtimec_error_t; + +/* 枚举值是否落在已定义范围内(用于校验跨组件边界传入的状态)。 */ +bool runtimec_status_is_valid(runtimec_status_t status); +/* 是否为失败类;YIELD、WAIT 与 FALLBACK 是结构化控制流。 */ +bool runtimec_status_is_failure(runtimec_status_t status); +/* 稳定诊断名;未定义值返回 "invalid_status",不返回 NULL。 */ +const char *runtimec_status_name(runtimec_status_t status); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/contract/view.c b/runtimec/contract/view.c new file mode 100644 index 00000000..aad7b4a9 --- /dev/null +++ b/runtimec/contract/view.c @@ -0,0 +1,62 @@ +/* + * 组件:contract/view 的实现 + * 作用:视图/缓冲的零分配构造与形状校验。 + * 联系:被 host 与 vmbin/vmkv/vmjit 的公共契约共同使用;本文件不 + * 依赖任何上层组件,也不触碰 kvspace。 + */ + +#include "contract/view.h" + +#include + +runtimec_bytes_view_t runtimec_bytes_view_make(const void *data, size_t size) { + runtimec_bytes_view_t view; + view.data = (const uint8_t *)data; + view.size = size; + return view; +} + +runtimec_string_view_t runtimec_string_view_make(const char *data, size_t size) { + runtimec_string_view_t view; + view.data = data; + view.size = size; + return view; +} + +runtimec_string_view_t runtimec_string_view_from_c_string(const char *value) { + return runtimec_string_view_make(value, value == NULL ? 0U : strlen(value)); +} + +runtimec_key_view_t runtimec_key_view_make(const char *data, size_t size) { + runtimec_key_view_t view; + view.data = data; + view.size = size; + return view; +} + +runtimec_key_view_t runtimec_key_view_from_c_string(const char *value) { + return runtimec_key_view_make(value, value == NULL ? 0U : strlen(value)); +} + +void runtimec_bytes_buffer_reset(runtimec_bytes_buffer_t *buffer) { + if (buffer != NULL) { + buffer->size = 0U; + } +} + +bool runtimec_bytes_view_is_valid(runtimec_bytes_view_t view) { + return view.size == 0U || view.data != NULL; +} + +bool runtimec_bytes_buffer_is_valid(const runtimec_bytes_buffer_t *buffer) { + return buffer != NULL && buffer->size <= buffer->capacity && + (buffer->capacity == 0U || buffer->data != NULL); +} + +bool runtimec_string_view_is_valid(runtimec_string_view_t view) { + return view.size == 0U || view.data != NULL; +} + +bool runtimec_key_view_is_valid(runtimec_key_view_t view) { + return view.size == 0U || view.data != NULL; +} diff --git a/runtimec/contract/view.h b/runtimec/contract/view.h new file mode 100644 index 00000000..0e7a421f --- /dev/null +++ b/runtimec/contract/view.h @@ -0,0 +1,73 @@ +#ifndef RUNTIMEC_CONTRACT_VIEW_H +#define RUNTIMEC_CONTRACT_VIEW_H + +/* + * 组件:contract/view + * 作用:跨组件只读视图与可变字节缓冲的普通数据定义。视图只借用调用方 + * 内存,不拥有、不释放;缓冲的 data/capacity 也由调用方管理, + * 任何函数都不得通过视图隐式分配。 + * 联系:contract 层只依赖自身;host port 的入参与 vmbin/vmkv/vmjit 的 + * 字符串/路径/字节输入都使用这些视图,避免在执行组件边界传递 owning + * std::string 或 kvspace 类型。 + * 约束:size 为 0 时 data 可以为 NULL;size 非 0 时 data 必须非 NULL。 + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define RUNTIMEC_BYTES_VIEW_EMPTY { NULL, 0U } +#define RUNTIMEC_STRING_VIEW_EMPTY { NULL, 0U } +#define RUNTIMEC_KEY_VIEW_EMPTY { NULL, 0U } +#define RUNTIMEC_STRING_VIEW_LITERAL(value) { (value), sizeof(value) - 1U } +#define RUNTIMEC_KEY_VIEW_LITERAL(value) { (value), sizeof(value) - 1U } + +/* 只读字节视图;不拥有内存。 */ +typedef struct runtimec_bytes_view { + const uint8_t *data; + size_t size; +} runtimec_bytes_view_t; + +/* 调用方提供的可写字节缓冲;size 为已用长度,capacity 为容量。 */ +typedef struct runtimec_bytes_buffer { + uint8_t *data; + size_t size; + size_t capacity; +} runtimec_bytes_buffer_t; + +/* 只读字符串视图;不保证 NUL 结尾,长度以 size 为准。 */ +typedef struct runtimec_string_view { + const char *data; + size_t size; +} runtimec_string_view_t; + +/* kvspace 键视图;与字符串视图同形,语义上表示路径/函数键。 */ +typedef struct runtimec_key_view { + const char *data; + size_t size; +} runtimec_key_view_t; + +/* 由裸指针与长度构造视图;不做拷贝、不做 NUL 检查。 */ +runtimec_bytes_view_t runtimec_bytes_view_make(const void *data, size_t size); +runtimec_string_view_t runtimec_string_view_make(const char *data, size_t size); +/* 由 NUL 结尾字符串构造视图;NULL 视为空视图。 */ +runtimec_string_view_t runtimec_string_view_from_c_string(const char *value); +runtimec_key_view_t runtimec_key_view_make(const char *data, size_t size); +runtimec_key_view_t runtimec_key_view_from_c_string(const char *value); +/* 只把已用长度归零,不释放 data、不改变 capacity。 */ +void runtimec_bytes_buffer_reset(runtimec_bytes_buffer_t *buffer); +/* 以下校验只检查形状(size/data 一致性),不检查内存可读性。 */ +bool runtimec_bytes_view_is_valid(runtimec_bytes_view_t view); +bool runtimec_bytes_buffer_is_valid(const runtimec_bytes_buffer_t *buffer); +bool runtimec_string_view_is_valid(runtimec_string_view_t view); +bool runtimec_key_view_is_valid(runtimec_key_view_t view); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/documentation/architecture/README.md b/runtimec/documentation/architecture/README.md new file mode 100644 index 00000000..774e6318 --- /dev/null +++ b/runtimec/documentation/architecture/README.md @@ -0,0 +1,14 @@ +# runtimec architecture + +This directory expands the rules in `runtimec/README.md`: + +- `runtimec-architecture.md` defines ownership, the only execution trunk, and failure rules. +- `../../specification/five-language-behavior-matrix.md` is the single source of language behavior decisions. +- `capability-map.md` maps required capability to one final owner. +- `runtimec-trunk.mmd` shows the only component trunk. +- `runtimec-execution.mmd` shows vmjit refusal and vmbin fallback. +- `runtimec-dependencies.mmd` shows allowed compile-time dependencies. +- `rwir-binrwir-aliasing.mmd` shows explicit Read/Write aliasing. + +Mermaid files are sources. Rendered image files are review aids and must be regenerated when +their matching Mermaid source changes. diff --git a/runtimec/documentation/architecture/capability-map.md b/runtimec/documentation/architecture/capability-map.md new file mode 100644 index 00000000..5002e88b --- /dev/null +++ b/runtimec/documentation/architecture/capability-map.md @@ -0,0 +1,32 @@ +# runtimec Capability Ownership + +Each capability has one final owner. A capability may use lower contracts but must not create +another execution path. + +| Capability | Final owner | Required direction | +|---|---|---| +| Public create, execute, destroy | `interface/` | structured request and result only | +| Status and error vocabulary | `include/kvlang/runtimec.h`, `contract/` | success is the only normal completion | +| kvspace access and checkpoint storage | `host/` | available only through narrow host ports | +| Execution policy and commit ordering | `engine/route.c` | vmjit try, then vmbin fallback | +| RWIR reading and validation | `vmkv/` | plaintext to Program builder | +| Type resolution and instruction specialization | `vmkv/` | based on specification decisions | +| Immutable BinRWIR Program | `vmbin/program.*` | one read-only representation for both executors | +| Read/Write references and alias policy | `vmbin/reference.*`, `vmbin/signature.*` | Signature owns policy; Binding proves identity | +| Complete language execution | `vmbin/interpreter.*` | all valid BinRWIR remains executable | +| Internal typed, fused and continuous handlers | `vmbin/` | private strategy behind `vmbin_execute` | +| Machine code eligibility | `vmjit/verifier.h` | refusal returns fallback | +| Target-neutral lowering | `vmjit/lower.h` | consumes verified BinRWIR only | +| x86_64 and AArch64 generation | `vmjit/backend/` | peer implementations of one backend contract | +| Language behavior decisions | `specification/five-language-behavior-matrix.md` | the single decision source precedes manifest and code | +| RWIR operation facts | `specification/` | one generated source for vmkv, vmbin and vmjit | +| Exported symbol set | `interface/exports.txt` | exact match required on every platform | + +## Rejected ownership + +- vmjit does not own language semantics or fallback policy. +- vmkv does not execute or generate machine code. +- host does not inspect BinRWIR instructions. +- Program does not own mutable profiles, code caches or fusion plans. +- No component owns another baseline executor. +- No public header exposes internal runtimec structures. diff --git a/runtimec/documentation/architecture/runtimec-architecture.md b/runtimec/documentation/architecture/runtimec-architecture.md new file mode 100644 index 00000000..623dae64 --- /dev/null +++ b/runtimec/documentation/architecture/runtimec-architecture.md @@ -0,0 +1,119 @@ +# runtimec Architecture Contract + +## Purpose + +runtimec is the single C11 runtime for kvlang. This document fixes component ownership and +failure direction while language semantics remain unimplemented. A convenient implementation +must never override these rules. + +## Only execution trunk + +```text +public interface + -> engine route + -> vmkv reads and compiles RWIR + -> immutable BinRWIR Program + -> vmjit try + -> executed + -> fallback to vmbin + -> route commits effects and checkpoint +``` + +`engine/route` is the only policy owner. vmbin is the only correctness executor. vmjit is a +removable accelerator that may refuse a Program. Generic, typed, fused, and continuous +execution are internal vmbin handler forms, never separate executors. + +## Ownership + +| Component | Owns | Must not own | +|---|---|---| +| `include/kvlang/runtimec.h` | public status, request, result, error, opaque runtime | internal component structures | +| `interface/` | request translation and exact exported symbols | execution policy or language semantics | +| `contract/` | shared status helpers, errors, ownership and host port types | vmkv, vmbin, or vmjit policy | +| `host/` | concrete kvspace and external capability adapters | BinRWIR or execution selection | +| `vmkv/` | RWIR reading, validation, type resolution, Program building | execution, machine code, checkpoint commit | +| `vmbin/` | BinRWIR, Program, Frame, Binding, Cell and complete interpretation | vmjit selection or persistent truth | +| `vmjit/` | verification, lowering and optional machine code execution | RWIR parsing or language semantics | +| `engine/route` | execution choice, fallback, effect commit and checkpoint | opcode semantics | +| `specification/` | the single language-decision matrix and RWIR operation manifests | execution strategy | + +## Facts and derived state + +kvspace plaintext is the only durable semantic source. RWIR, values, frame facts, source +program counter, status, error and recovery state belong there. BinRWIR Program data, +register caches, dispatch tables, analysis plans, machine code and profiles are derived and +must be safe to delete. + +A finalized Program is immutable. Mutable call bindings, profiles, code caches and fusion +plans are sidecars with explicit session ownership. + +## BinRWIR contract + +BinRWIR preserves RWIR variable-arity semantics. Compilation fixes each instruction's read and +write counts and stores references in this order: + +```text +[ReadReference ...][WriteReference ...] +``` + +The common form stays compact. A wide form may use a cold side table. Both forms must produce +the same normalized view for vmbin and vmjit. Encoding limits never justify truncating operands +or splitting one atomic language operation. + +Read and write parameters may explicitly bind the same canonical Cell. Signature owns the only +alias policy. Distinct register identifiers preserve access authority even when their Bindings +point to the same Cell. Undeclared aliasing is invalid. + +## vmjit refusal + +vmjit consumes only a validated, immutable Program and execution state. It may return fallback +for unsupported operations, cold code, disabled machine code, platform limits, failed guards, +or inability to preserve an observable boundary. Fallback means vmjit did not complete the +instruction; route resumes vmbin without repeating a committed effect. + +## Observation and commit + +Every source instruction boundary remains observable and recoverable. An implementation may +keep values in derived storage within a valid region, but route commits only complete effects. +Commit ordering is values, source program counter, then status or error. No component may make +a partial instruction externally visible. + +## Status direction + +`RUNTIMEC_STATUS_SUCCESS` is the only normal completion. `FALLBACK` is reserved for vmjit +refusal. `NOT_IMPLEMENTED` reports absent scaffold behavior. `INVALID` reports input outside +the contract. Outputs enter a documented empty or invalid state before work starts. + +## Behavior decisions + +Every language behavior starts in `../../specification/five-language-behavior-matrix.md`. A complete row records C, +Python, Rust, Go, and V8/TypeScript behavior, then chooses consensus or a stated camp with a +boundary fixture and invalid-input rule. Product semantics must carry a matching +`behavior-decision: ` marker. No matrix means no manifest entry and no execution. + +## Compile-time dependencies + +```text +interface -> public + contract + engine +engine/route -> host + vmkv + BinRWIR + vmjit + vmbin +vmkv -> contract + BinRWIR build contract +vmbin -> contract + BinRWIR +vmjit -> contract + read-only BinRWIR contract +host -> contract + external kvspace interface +``` + +vmkv never depends on vmjit. vmbin never depends on vmjit. vmjit never depends on vmkv or a +concrete host implementation. No engine file other than route may depend on execution +components. + +## Acceptance + +The scaffold is acceptable only when: + +- the one public header compiles as C11 and C++17; +- only the three structured public functions are exported; +- all unimplemented calls fail explicitly and clear outputs; +- missing component sources stop CMake configuration; +- name, dependency, behavior-matrix and export checks pass; +- no third executor, old path, abbreviated project name or alternate status survives; +- a fresh build and all scaffold tests pass. diff --git a/runtimec/documentation/architecture/runtimec-dependencies.mmd b/runtimec/documentation/architecture/runtimec-dependencies.mmd new file mode 100644 index 00000000..9637c086 --- /dev/null +++ b/runtimec/documentation/architecture/runtimec-dependencies.mmd @@ -0,0 +1,41 @@ +flowchart LR + INTERFACE["public interface"] + ROUTE["engine route"] + PORT["host port declarations"] + HOST["kvspace host implementation"] + KVSPACE["external kvspace interface"] + CONTRACT["contracts and generated specification"] + VMKV["vmkv"] + BINRWIR["read-only BinRWIR contract"] + VMBIN["vmbin"] + VMJIT["vmjit"] + X86_64["x86_64 backend"] + AARCH64["AArch64 backend"] + + INTERFACE --> ROUTE + ROUTE --> VMKV + ROUTE --> BINRWIR + ROUTE --> VMJIT + ROUTE --> VMBIN + ROUTE --> HOST + VMKV --> BINRWIR + VMKV --> PORT + VMKV --> CONTRACT + VMBIN --> BINRWIR + VMBIN --> PORT + VMBIN --> CONTRACT + VMJIT --> BINRWIR + VMJIT --> CONTRACT + HOST --> PORT + HOST --> KVSPACE + X86_64 --> VMJIT + AARCH64 --> VMJIT + + VMKV -. "forbidden" .-> VMJIT + VMBIN -. "forbidden" .-> VMJIT + VMJIT -. "forbidden" .-> VMKV + VMJIT -. "forbidden" .-> HOST + + classDef backend fill:#e0f2fe,stroke:#0284c7,color:#0c4a6e + linkStyle 18,19,20,21 stroke:#dc2626,stroke-width:2px,stroke-dasharray:5 5 + class X86_64,AARCH64 backend diff --git a/runtimec/documentation/architecture/runtimec-dependencies.png b/runtimec/documentation/architecture/runtimec-dependencies.png new file mode 100644 index 0000000000000000000000000000000000000000..8202eeda2421e4c5cc420268d553436ca7798eca GIT binary patch literal 77213 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

forbidden

forbidden

forbidden

forbidden

public interface

engine route

host port declarations

kvspace host implementation

external kvspace interface

contracts and generated specification

vmkv

read-only BinRWIR contract

vmbin

vmjit

x86_64 backend

AArch64 backend

\ No newline at end of file diff --git a/runtimec/documentation/architecture/runtimec-execution.mmd b/runtimec/documentation/architecture/runtimec-execution.mmd new file mode 100644 index 00000000..2824afde --- /dev/null +++ b/runtimec/documentation/architecture/runtimec-execution.mmd @@ -0,0 +1,31 @@ +sequenceDiagram + participant Client as C client + participant Interface as Public interface + participant Route as engine route + participant Host as Host port + participant Kvspace as kvspace facts + participant Vmkv as vmkv + participant Program as immutable BinRWIR Program + participant Vmjit as vmjit + participant Vmbin as vmbin + + Client->>Interface: structured execute request + Interface->>Route: validated request + Route->>Host: load function generation and state + Host->>Kvspace: read RWIR values frame program counter status error + Kvspace-->>Route: host-neutral snapshot + Route->>Vmkv: compile RWIR snapshot + Vmkv->>Program: build and finalize + Program-->>Route: immutable Program or explicit failure + Route->>Vmjit: try Program + alt vmjit executed + Vmjit-->>Route: structured outcome + else vmjit fallback + Vmjit-->>Route: fallback at observable boundary + Route->>Vmbin: execute same Program and state + Vmbin-->>Route: structured outcome + end + Route->>Host: commit effects then checkpoint + Host->>Kvspace: values then program counter then status or error + Route-->>Interface: structured result + Interface-->>Client: status and result diff --git a/runtimec/documentation/architecture/runtimec-execution.png b/runtimec/documentation/architecture/runtimec-execution.png new file mode 100644 index 0000000000000000000000000000000000000000..2665a0ea4b7b3dba1e4c6940662ea39cd5df7c24 GIT binary patch literal 147796 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

AOe}0F48kYrSE_H8CR7V@aqG3 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 literal 0 HcmV?d00001 diff --git a/runtimec/documentation/architecture/runtimec-execution.svg b/runtimec/documentation/architecture/runtimec-execution.svg new file mode 100644 index 00000000..60664d0d --- /dev/null +++ b/runtimec/documentation/architecture/runtimec-execution.svg @@ -0,0 +1 @@ +vmbinvmjitimmutable BinRWIR Programvmkvkvspace factsHost portengine routePublic interfaceC clientvmbinvmjitimmutable BinRWIR Programvmkvkvspace factsHost portengine routePublic interfaceC clientalt[vmjit executed][vmjit fallback]structured execute requestvalidated requestload function generation and stateread RWIR values frame program counter status errorhost-neutral snapshotcompile RWIR snapshotbuild and finalizeimmutable Program or explicit failuretry Programstructured outcomefallback at observable boundaryexecute same Program and statestructured outcomecommit effects then checkpointvalues then program counter then status or errorstructured resultstatus and result \ No newline at end of file diff --git a/runtimec/documentation/architecture/runtimec-trunk.mmd b/runtimec/documentation/architecture/runtimec-trunk.mmd new file mode 100644 index 00000000..9f3e7b04 --- /dev/null +++ b/runtimec/documentation/architecture/runtimec-trunk.mmd @@ -0,0 +1,26 @@ +flowchart TB + CLIENT["C client"] + INTERFACE["Public interface
structured request and result"] + ROUTE["engine route
only execution policy owner"] + VMKV["vmkv
read and compile RWIR"] + PROGRAM["immutable BinRWIR Program"] + VMJIT["vmjit try"] + VMBIN["vmbin fallback
only correctness executor"] + COMMIT["route commit
effects and checkpoint"] + KVSPACE["kvspace
authoritative facts"] + + CLIENT --> INTERFACE --> ROUTE + ROUTE --> VMKV --> PROGRAM + PROGRAM --> VMJIT + VMJIT -->|"executed"| COMMIT + VMJIT -->|"fallback"| VMBIN + PROGRAM --> VMBIN + VMBIN --> COMMIT + COMMIT --> KVSPACE + + classDef fact fill:#fff3cd,stroke:#9a6700,color:#3d2e00 + classDef policy fill:#dbeafe,stroke:#2563eb,color:#172554 + classDef derived fill:#ecfdf5,stroke:#059669,color:#052e16 + class KVSPACE fact + class ROUTE,COMMIT policy + class VMKV,PROGRAM,VMJIT,VMBIN derived diff --git a/runtimec/documentation/architecture/runtimec-trunk.png b/runtimec/documentation/architecture/runtimec-trunk.png new file mode 100644 index 0000000000000000000000000000000000000000..fb5d1e39cac9f57b67d92877e8f495993da3581f GIT binary patch literal 51909 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

executed

fallback

C client

Public interface
structured request and result

engine route
only execution policy owner

vmkv
read and compile RWIR

immutable BinRWIR Program

vmjit try

vmbin fallback
only correctness executor

route commit
effects and checkpoint

kvspace
authoritative facts

\ No newline at end of file diff --git a/runtimec/documentation/architecture/rwir-binrwir-aliasing.mmd b/runtimec/documentation/architecture/rwir-binrwir-aliasing.mmd new file mode 100644 index 00000000..6eebcf3e --- /dev/null +++ b/runtimec/documentation/architecture/rwir-binrwir-aliasing.mmd @@ -0,0 +1,38 @@ +flowchart LR + subgraph Contract["RWIR and BinRWIR contract"] + READ_REGISTER["Register a
READ capability"] + WRITE_REGISTER["Register a_out
WRITE capability"] + ALIAS_RULE["Alias Rule
MUST_ALIAS read 0 and write 0"] + end + + subgraph Call["Call binding"] + READ_BINDING["Read Binding"] + WRITE_BINDING["Write Binding"] + CELL["Canonical Cell
value and mutation version"] + end + + subgraph Stream["Partitioned BinRWIR references"] + READ_BEFORE["array.get
Read a and i; Write x"] + WRITE["array.set
Read j and x; Write a_out"] + READ_AFTER["array.get
Read a and j; Write y"] + end + + READ_REGISTER --> READ_BINDING + WRITE_REGISTER --> WRITE_BINDING + ALIAS_RULE --> READ_BINDING + ALIAS_RULE --> WRITE_BINDING + READ_BINDING --> CELL + WRITE_BINDING --> CELL + READ_BEFORE --> WRITE --> READ_AFTER + CELL -. "read current version" .-> READ_BEFORE + WRITE -. "write and increment version" .-> CELL + CELL -. "later read observes write" .-> READ_AFTER + + classDef read fill:#dbeafe,stroke:#2563eb,color:#172554 + classDef write fill:#fee2e2,stroke:#dc2626,color:#450a0a + classDef shared fill:#dcfce7,stroke:#16a34a,color:#052e16 + classDef rule fill:#fef3c7,stroke:#d97706,color:#451a03 + class READ_REGISTER,READ_BINDING,READ_BEFORE,READ_AFTER read + class WRITE_REGISTER,WRITE_BINDING,WRITE write + class CELL shared + class ALIAS_RULE rule diff --git a/runtimec/documentation/architecture/rwir-binrwir-aliasing.png b/runtimec/documentation/architecture/rwir-binrwir-aliasing.png new file mode 100644 index 0000000000000000000000000000000000000000..be3b37d89251815f17463ffb30a5e8d2b21c6008 GIT binary patch literal 79991 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%0D0l^*T>^=jAIvKkc5SD5?T|EC3{KbO|6sg!H` z7R6EPFaOo8Foz)A*Eyr15OIcKN%MD}b_kt8{*-^#TQs3ftS8o4xUhEWv#Q?FJND7F zdDun{yLEgGRE8-JN5?DDRq7&%6W|Ejxc5iAvDqF4A{RFv`^~%5`C2h`o0XrLLSw~! z#*_@6O4tl4JR^N~uKmO*TyAf8o9+D*64>KQ)gmI6xb!y$S^Ei&#Ez)X2xwx9f2QX@ z1|5(h9k83cs4^a=CM<`c^guspbaicg6tbzNnaBV{cz#!hGM3N0)~ECvr*QfVVAm0YUnw+ska3wl64zPu)*=6Ta`n(zO6PLe_ZuL&YZ=cL z@HZ~`gpf8XEf>lBQ?s4{4mkKNpKA=PKZe5ezts*f2=f*>jv z-4JKn**b_!r*PVAoEs`j$Og#yhhU3Ew77h?(9aemz}MXHmn(mx06Cb6WDaxvW!D!; z#=?PPNUh2?`YTgrTB~ttqX$!*7xU%peW9Ywc|RIYgPqv0owcK=`-i1=-Ea?`*ZMJw zPo(6M>xbjn8BWEf%DPB+Q<&;i&LphAN@*7Ap@TfB^7kb3*a8Aod!D>*PeQr4P{V3ql znb`AmaADkIu`2i0v35}TbY{h^;^fauO!0wusd&7NYp*sQ7adLZruX?W>n9#=XI&2t?J_6??5#Rg;D^ zdKZZwxZc*L#%6{!O{*1jgWze|5+JO?A0i{Of4{jLS^VTP?|c*&A+0_E%iQn zh>e#Xe3MG#dJSUyZ(2WSYU0C>5i z^oJdg5b%zzv3p2YYj?)9)M|@3mD_-ICJ|tuaZcfJC-77rO!WOQFt9bO%G>}9nS!VLn52WK1dB~rK_{rW=tkkLD0k!GcQU|`-8l*#wTkr}Jp z+{VcXP392=eaU5rr(gQ>B_sv|5U$ih7_8>j2R65qQS>3;LxuJh6R^?hgyUv=eMujO zk$Y^FupZrvc++DB{v)dc%p6?pO9I}>fz5bDszSvL5hZ~twq-W@ANt#|1`hHF9V&`#>B&|Dx~<3{2b~ z$Ey47JZ^d==*g^NC>K19?N-@0p~MF@?fgYkpH-;fQIUIY74yf4HOODjNl4*eRweho zLsJv+>pA>1Zr{!T*TV(5*(#+6D8<8d+UU% z>hKgd#9nEz=epSBf<0rkDDddsICi%YP-IoGTla8_I$gdJ0qiVASn7>-#!sUU>NO^G zpq@Sy45thExM`IB30xmrJdc}J9b{5CB6ZTeLUEbJzArCsfzq@4Tf0oL(Yn(!7j;wF z@)`Z(mbh8yC>jrThga#m@;fx#+ujF=sY8K$E3)hL@z2Nwmgn0#HKDShdPvOn5{p3-K@86AAG9ix z`X~WMy(Mf*CN1>aAejbYF(^EBc4lPx2q_iruBr<>a|!6PQN{Ry|mTs;BXtTjsZ zwL&x+8pr93?(V~q)AlWFD7I?uVH&Sz7%JZ#{96)Dp++~CwbSFJqRn)Hl>CcArMGlk zPQ5XS%+X){w5yO-Ac)u%`VX#Q?>p4~O-p{N(xv$UDR1wrw>2bKsz=R_AQVxvW&~M9jds0in|<93MLy zFUEBk0e6VkQny~_D0xvOO_26wV)Rm*12$nA1Ha<-sBW+b;>>y%>WWzNmGmjJDtvdw zigx>nOQ3a!$;BnZB-*_|rIglO_(hFVI=^T{N<^psIhm&8#!1gFic$Tkg1v$(9Zn?N zb56^UKD9dgF0W(BwiZs2s7>n5RMfN8M}17T;c*kj)nvHMr7inRc!^aYvie3HNPul*cC^ zf>M!?Wd7#5WG~TfX4XzPb9=9ekIx#f`Yn;i7uUz)JB!+u)AK5A-MfKDnI-jeSQGH5{2VPXBl!R=8;RtVe2~)%!UhP|;)dObi1FvQu4nK#ze*rO+q)ga^o(5i zHUqQ5W0*I@v@F}OyH%I7J6!?a{o%(5`JI2tLNE1+<6q}m7lmA=52}`S>R1(I$kN)~L-N~3Kq@ICKlv-F4XbWt zntEb06$Vg`s9W0^W4~U1n8G=<(!j4=6d(Q>G~sz1E;cfJoxZJ-r2uVv%1f5B6`!tx ziH|xS#6S+Q*c9_q`Zb(Gai;1CifLjIWN>XBvao+`>FyuWUawhyTsTpL`vIoVxuUvW zD3so!(qOy1Keh)^-Oi{Bc-boTmsG-%`7z6mEh!a>I8YvIQ87)GdhMc}%YIkmM9|AL zSf7WPj(;?Rc+Td%ed9TSjUQhku(XYAbGb-f@^CclWqvMM=5T#=v)4S(PfN%iDDIdr za*qu50nyu}IIzHs+ZNY{MqYZA&A(PfRb6ax|4@v5Uv|t*=2I$29!lB+cVF z($=<)-TSo%Qv#Q9W~xe(6sp*&23Y(C%r35aqx?_A)$ry2-tbb#yR{+(%N9-)-0C2Q z;qhZ#_n=xcR4z|!4NYBJwzuSGKU*yXLb$STqvtBi`UB5pqjeG_H zv_4khYsl}<+Y82yvzc|Yp!l&WR1E-rJV%x+hIIo!5m5OQ+(>mS1*#q~uiyWbh^ z-o~eEf9i`!6=^)r{rf$3^Kjko>HOx5`JTy)DuRd~q(KP_T_Pe-zE(xlJAJya(B$5L zP5-`zX6mlZ6G+}tyP*hj@J$A{%XNsHZ+AKTb~$Hmae%@nPNy~STg|Z zoke5$BVx#_t0pBw(BbayznQAfa;87Y<6eSWmMwiV&eKkUoKB;o#bwliNr-JSE? ztR$%&iCI)y1Qw0b<4zeBvND;>a^FBj7^>u04FCHTOj`DraX}m&2fs$4Ue(5iX1(se zCua*ajW}~=6{c&frqjYH9L^Zn5upq-5p-y}Z+XFLVDSCJ^VkfctwJ8tIm2UTvo61hLg`W^Gc9*rMQqdJ>;Ams*S$Thu?m%l2~iU zt!|W2{QO2w|EdvcgRDAkq#-_EcwWIXmSIR&gEd=r^?OmIr)5>&B7QDz2*f4wU=P?rQ=Zs2XGJL_qyYyvm6xYk^AMkmNKs6nXLg;n9kh5|o zD)pITF}*=c71c);f)8At25lMqEZsP5VIP=4M*4ofT#~P>V&LiK zG@Xl7updq14V?6P{k0qcO<)$gRg74(?k^6{rd=$px|$!inbJ^hjur)*KnIEG;i^ew z_nUG5^9D2=Nxs~*e`C{<*^^}UID5YNs#gh0ApF&$Z@BB`;7})wepcaw6$jV+ zpOF!X+QE3bM|8KA=$JmtAHzUvsSBB@#|YYGO=LD6p?TyZjS4t*PNuYohWwQ3TM$UT z`g1zd-p_TfDL3&J8KHB_ZfCt^Me<5Hj^-hK6=k^<|Jv#3=Xbdi1I}d`?jUO(0e5Kmhd){`IEtmI)@xTj^x^!>LWOsHslqc6zq`o*vHQ(U7H~q065_ z#qIA4SN`kwM+bC4Y!-KjE0O8`>eam&!e8}q2LOPqz^L2Zn-Y{+%@*5i4N0B$jV*gKo>5DvS%zxu1 zBl@lUNeIdEZZ-A6(-4s=i{)^0;1_C-I0_V$N>wk8j9BIaBc0(H+#`XoaN!jDij?5( zIUu(8AxB|szEr%}cIbX-XV%czSm1L0GYwqvffQJ33)G{+bJ`wpD%m$2wFgQaV2myY z^)@EKy9V7}QWKk4OREro=8vQc~AzQZlkiP~Z{>W=?0M;?I6gmOQs>Ht?_R zelnt!pS-%N1Jm2j@$?G?8blv>UEk2Cnv3qp!mX=+$!LunpJROo!<|Kzn&YfV5vK@ogEmkk)(-yEih zjz1ge-laeQ_VMU=Ns8BTE_romwfS|y!zx8vIG$UD$J!to8FpFN)vk6Si#YYfb)aSD zA~)K<9cm?V8WI-ahp)o_46JJ_P4}k8#;R$cqL5LfchST%<0Ng`wc{lb;MCFldj1>Q zJCKj{NEY^Qz3;`e^jp&o);c9nE8LJX1HCYP>*KQPHgoGa8RMI!UtEK1VzrE*_z1 z3|{oud$QZ^&1lq6p}PdIMKQNsbF|&&p!aJ zDv!%AX!#@o$%x0@DjlG0)^Xr#=kppvnB#rYgQBc}<<(J7EC<|4et**%ZAH$f$tgWE1A~(fKeYSo|YW5FNz-Eh@z3RtkB(fh$CB%CKoF|8%y4k z^uEk7l|u5NSb$P{)0U~NR|%af!~UO{MId3iW&C&b1r5GbObIA$mO-sJJygi&nyGGS zd{Iyk`;H#bz0;d~U4sch^Y?3L>*#bf7x9T%#bc(kPF1yz`W6}9cyDg}WzaiLx&2Gm z(K%z>j~BH*(fv=Dze+p{RE>^SaohUI7&MslN+@o_j|^+s!zPxMf_)BIr0BTdL>_Tkk|?t%kez`I{; z`k(r(;Hc>}J^k|Ihk@_vFyk5$NRTGvIodulq5(vq`JY+|GmXBDXa5ZWm0wMlT15v8Q0jK4ry(sN0i zw;NVklT|s0yfCbvNVgi&Wxu_vd_sp9u|Aqbfaeu^U#z!ok^b@hAW))I$v44F!R%kV z$?N;bU*TdROSkLQVWk9q0vT4tCl3*n%>)d!%BZ43u3z!0l6wcqDYsjL4@sZ8@)({S zY*eS^X%?lX7F&D#1vIywu{sEO?{oBLThCmYoFdY4^Y9RkIUECb=N`ZzNq~L3+atx$ z#+k_G=H^1l#4QHuA>AUE_?(=a62p?ddv{4>b7%qkGW@tZ?%~qrrUQ|Xam)|^IfLU& zh5>-djZD7r{bK%uZd?R(oxzW(sXZ``M&~KoT_3*>I4ry=k)xmf{da*v68P$s_9*~x z?cH}4f=}i`*{*uKmFHWN)STnFq9F4gph+WLCt*3;I&La-4r`_U+wm;s=Fj zA^2Tra*g`>$)b+1kR{_nI@^^1<2hfa!weRSR~h9z;6VJ@xne9Sxom89b%ejWS-hl~ zk;cQ5v%j*s`o7V|^6F~gOT*)8x_aHz`HlBCORJqZ+$_6rUlJ*h7ibh56oRhDWgj1( z6C7IU&Zo1Ed;2pkCje=5ZC#GAniv~9ECJj^_q4BbI+s$FC^#p_s;R5vnmOztesfQ&&>UR@ z;6kMUp3PsBR3Mjlm^tRTwaIshrdwN{CEJNVelcqy zXJ`e7B+p+HVoik{>R?kmz*7;}XwIItg{JQ*c@b6sic(%ext8im-qRGtK!A@=c3TZ; zqa-m&^1JV37uiZ#U}R+jvr{VMOP6kd_P_|}UXt@JeoN9yqI*R60~UFTR*~-F5h#T6 zoL3E7SMoZq#@RtL*(~nIJ;2(&s@nu7WsY~kU3N+Kli$C8U}M0ED`R1U8c>eadrqHk zNrzD2n{4BwIv`Rcxp6g5UDgLXe3cu&<+JZqnr=74su)vV(Jq;Wj?7G_eCF>xhhzwb ztnVqj?zl7IB;j2{?_Ul!!j$?!(1NO5s|@D~gO1N8G$6~<*gG8o`I-rOLc`;c{r$?{ zp!mc>_P{oAgiAh6_=kcIW#{qxjZVTBrUC)r(IXx1p$eX;TS)LM*y7Ob!e%sOexvaF z0WAoLh@baH=UmR}b9Hgi92%euMFvfkd?0HId1AdYY(v>xIB33>?&dU|Hi=i1x>S<-6NPM zxKFs=9~cwumDV+?vSZ3Tgot2Z%>g#?i-xnGYWZ9YWjr-MA?u|Iy ztRAzj?6U~{5Gj1Z(CL(Bdz*lS#A*O4C@-|ecK7zY%-ri>Sk|BjU3B7uJ6TC0;8KXV zI6o9g$dCwZsA9npBr$&kC738;KMiH&sCO=oj+8qq{=>0_ z(TqHwHp7-HE2}JP%e^h&#~HUYcVFyo6yTuz@-+$q05(3Zf|=j=0Yoa35CKg3pPnv2 zN?{v<&xpGSp~z4FNF>{WkVThk2ma)NBMU7B?GAE+{!Z|g(9zY+gw_%c5;i4gVZH)l zVnW+LT+n8zt3d_?L(B1$vLt!k$x7 zPSph7pzq62zh<;scctw{%lNlzfi9a+Mz+8#r;97&rs%uKAy{HFlvJ4+)NZi02s>{4 zn&cm|c(%p-^X)rfpE+KSLj(pvzE(@%x1@%u({=af1DW1r$%4)p2EuE>`IR$TyNBy% zXdAU&F99%;shEYjysIFh|H)~fF4YUO#@-1^gyNBG9(f)4V-+|)iQ8&nitcBT6dDNT zj+9zgfTFw^sCrI+>N!jqR~u|R`>L_=LJl@nk=>p*_lPKni9bYp3rjWj4Gau`WZXiB zZqcYIFk2|@KmMwGCi4eXqcF(~JFz+7>|O$R<_Yo?1!t?^FN~#@eW`wqMYR595Pu1I zZ~gQefx7Syh?CclNcsNXKR%-YpmXq!rgnN9)r{p%QT*U$_4B3TObEGTF)D4enpa1L z`l~hqF|%+@hT2mS4_ZpTGqlG&*#43BDkP4nxLu1)U;IFjZ|hX&61b$I>3IrF)jhlI zj`6DnAYsFtQr?DDlKjpKCBiBQ(&3KJqRsWu9 zUcNp*yRzap!EF?O>bll1E$2g8?q=Uf^DN40_s#6 zpNuoK50}1g&oA#f`{0N`7$sK0Ib>FZV|E3U8=y{BjhX#s0YY z(Ar}xUc|)A?y6i0#E=@=r^>8uklHDvJ7p-P3HL2xPkNWP#i74RZLPHLh`8;)i0z#! zNPVX{`zc>*<#c;E*=9X|3D7EVOx^Iu_(9t{Vye#ldD#9x;1k$rgv_PWJ$LXk&~Ck8 z$dfXxHOI{6davBgD?-h_~^8YRB$4_l37wt5NJGw|#%Hg_y&D%=F_~)(u#`a#rs6yod8{8^S&fJ*5Ady_E}SEUZiRE67~>=I)CQdT_nti z&e?XEo?^IN_C!^x2=@Wo`tky?Swrl{ z`_LOi@=oRIS4TmXmXJ-%Ts<4(d8)8yNLELL*-<+6>iHWR&3PTsON4z!FTC7$^4(`m zX0=PrRl-D9Gtje9_cknl6RmORTd{@78e;ZNd?n^mm(1X5*8X!h&5qo2s{aVm?G%$T(wzRfVl`L1o<%BLC5D`V{! z_k@7}7dHTSs^(pDuV1ZBR?`ZffAR^i$9W^-YY#`{91!*(0115uzL%9m^93C7^)CB& z^VPRK=MOk7dtWID+u@i^X9s_DoSoxl*5@UOJK>0uGtKEn{9JXPryP>P;UZwrL?_)g zao?}ACDBlNtsx~x7+w~kf47)@Rl!LY`q5zco5T&-2j%eVw!pn(wIx%7B?YuAs9RKi z5SVZm7@T>3P36HtyLDT9KYwHkT(eg{*K6LKA2A68Es>gMzqkTbRJTprO3jZqg9fFW zCb}mC8{eV_$YU(@L|&oMf4AMkj1o#|P$~5(ZhTUp_blo*qPxR>GT%Au*vG;P=e&`G z*ZCJF0PsfyMG9OAp%$+vzim ztHee2!@&j_byknj7dM=_eVgj9e#32###DeroGiRsF6m_+M+kL3>A;9@qAO%q^X_Pt zN~#nZnKM`WuIyb?|DZ!cIOqTDuzkaN8uqk-t@*ngqmH{yGUBg-vkgmz%zE+_tbuh%R zH>?wJaf#N4s4U6J$);Zua<1ecu(VNmi(gb$z4+) z9rajt@(56gV`x82c#V;}_Mnev=@&##+kXrB6bCTb(r zi^FwlxxMqdh8r9{>lf;ILN#HSg$qjoj9>U2=L9{x&spMGlitgnZ=BeOJno|iO#i9O z?c4rUr4x{9l-!7~r`j3?6)z)|I8Fu4UcK`<*yDTrO*cd$FruI@KVPF~u17d6=rDTG z1_2;(!c*Q2twJ51N2d)w$7E1;c<8osMDn`dhpP4*ZXZfCvB!EO2AFx zy$KJ1;6g+SzBue3X2wA*coMK%9z26c6fm$_B~$oIAMK(9w5o{LBFMM#LI~~! z`T2X$X#HO2ef}%vSeS>0=#=YBfZ3q@GN2UO(wl_Z98@fK&sqW$nh45%RBgNqnkl(; z<p})0`L~tyd z5o#!31amdgL>TuIfEQ=x)5W;goyG7bCt@klihLSH-5hr zeCjr4=oTU(>5u;2i|LJ262zWy6R$9X-An2%nj^seX?m%_-~3q1;78Jr48Wpaa2r? z;#kAi$IEAzbS@;eGo?oCVjmRg7LTPZx{ zNJzMF=2BbhgET?!mqMNwVrzsf^ZL1#3B^xlD({~JcR=jiYxF6I?}m?5-~&6;xU1O} zj4XT9bO#O}kD5F#OYXgkrj=P0m5jS0e|D;^z1$XT{^)>A>LHLN+Krh`>_W{Q=qkMt zKI;?C#Pc1#*W{7`8D(--yOE#K20a7i?4YvCG8y9T>QC=<#rSZ3@_?GiCN*^grBGJ; zVs|66B^w(d){Pq-uWxA0E@{nGI_Ik&v^2lA(eTxLFqeD|7z=eb&2(dXzDg62GJMFdk@kb5s^{YoU)``ivnNYvR}Q*?{mG8X;Fhp<7@Su_HSt+ z$7()JCv*j~bT13aN0_Kw{RAED3uZeMwvWzffkk`W?{c3?`V(qMR9^=B^3QH=UO+AX z@acQ`x5;3%M~>pLv~c+t%wJlYzFz*@02`f~(c_H$mS1f@p7qX|zQfO7@I~#@bEegi zl3O-5K5taJV?^q#HB0>3dgABi35!gpmKK(S+ID@~T+O7jHeWaxTUw%}spf3?g!Awu zvn(wIrv9ikTdOKcyeFQM%=i3f!L(7j!P*1I;(4_Rv_|Gy9J85*AMw@`(NECBiN-0mPI9Av0f-l&xH9 zOo0qqpcnngZI-nAh(K-k22odF+oREfNn~+*QLe<5ejbRhuh4H@SDTM#@u+v1$qH05 zHOQ5FQ=WL=lJ69bX*p9Pb1IDusYb0hCpSVCl0EVXnVSRqBtoJ$OGpJ=>8A$ zM80YZTvQ%6yy?lCwR2jXRJa)@9L)AB2kNe=tXJ}sMDyBrm&Ay9>>rF4j{BLkc%%m% z&E+KahDI$NYDJw9{8@JUbQFVVURZ2zC_J^znBiJdYVp@&8Xx2eJ zc`fH9-wIUAVo2xamexX_%a}bT9bwXPx1-1rUY7`gg3lanu`w0hm8;#d%&MnCZNk|x zim7#cBgZe+#_Z>(j(eUAwSNznpA|pGCM1mj%D_)paSU4lsDutZ_hQS8=DXBTLwB(s za2(RR9%zq66LIwrssv)CC>Pb5U#J=FuU(PT1&fA3YG2=r8Bjzg3!1&>NV9^boKGW> z0ENDsZcd-Sy-c>GED%w+e%yAsDL1W3Hu}=WU*t9glhy&0#tjO4!brJqPoAI3{BUt~ z6)V;sS8njK;zE32g+l7^DJ~rbgjBbzleM8v-f=i@Y0}*4_d&JoJ6o@M$<}{-1mM<^ zZ5ZHID!4t_Crcr6>qS)NMHOnZ)yoAYUq8nV(m~-ig7LBapW^eaEvI%54+o?4%Y8h~?Ri zv<9i9s_=~P!A!leru@8T*0YO?erfN00|BE&fOeg)%ywKFlk&lcKB0J3v(->lH18$G zumvhCSz-I3pv9BvK@c>F7I1xlt+Gmwh{DZM{}K3C%jDTOxQ&1|00)EBLSGu$=X3rS zz;A2r>S_`+GCVyUGeSi3INSnV6B_EBUwy%VyfWPsktwwqy9^xkEVu2K`Geo$x}KK- zlJN9Q$?RnBH8Hz!Gg-Apk*>~EJpy}e)Q)IY-5qtK>xJcD&>#nn9QWbwF5=7JV0qxt zB^J=VykdG_=!htK=NweJ5D#J^!I*_0o?vZja(cJCqP(KAy0WVB%*tY}AramSl!YSS z-Vda$?2Nu&u=-QwmO_%x3l}?t>B`{Ed^%NYV;dW@hUOfX4JHO{cAmST{$Xo8zo|g4 zLiSN_a>IvPVf-#~+LZoQT~Lp0ZAzhpVSaSO8{DJeq9Y=)?tG3F$F&pMzl`ikhVTw_ zak_)wg3Rj>Vc8GRAN<)~DL^db5m5Wn^Yq9;xk~?G81VqwkWXS{-W=FAYV%?c^ag6O ztTj67(a902vShIu)J7El(Djd@xXPI6)H^fdn?!7PUt#H663@r_`ZK*822D-P6IgSY zGnt%F7#RiP;Ir;%+Q5Y8<~5q*b@jEQ_Lj$K2@b;rV`t%qJ?~n9vdgG?PiKjz8r{8E zzrj8=cW8yfVH$&6@F}M2rm$$c93@70 z)Sb%rrcd@KH4F?J%ju#8BKR9F+E%3=J@mg`P=Z zp5uv`J=|MCT!+NY+;H>j+eb$m)!e-9bL2b0XT^He6E>0bV`*%u7r%viOa-T3_z68- z=wv+gTtLy+Piga0yvk*z+fnzmMMkOYX%i`QS4_YZFTI<)+n-HF1})pQd~Y`A5sz}7 zYBLsRFvDUg)*nTq?#|X(cDV$_)ckuSDr=D<>MaHQPEXzkXmxdSc^(!8jd|(NEhSz4 zF^rvJ3ku$ypg+08zXuW*#@loIdA~B(_X40tjrx3Jq7p5=`Y}5(vu3fr)yC{B4k?t0 zw~w5vuq|y zuKO5O;hdd>x1Ac%e_-2`H>6(ka`^h&8(XJQ(j zC7^zLOwQA0#;jL+*#UgwJG5)fuY&eS*vo6Xb&lgUWA=I8n?F9&PW>?8@H$dI-J5qH z7AS746@j*^1getiA<#;t48%Tq>}$4;VW}-;xr64gz@}&6OetRM-EU&ina2*UDLZlCM7z*=_`k#S~*MeQ-krYGxCK1oVhakzJ5kD$F#&nss;KSq=upR@R`YqBKxyc2Go z8dE729N(5I!3m12b)J#v>zl}*q^!0NdVNE4ey+`iDJrHY6DcajD1!OAx;mHCdicW! z-FID@>MND3+n}7G9H)rq<0_-b=sJaLs8rx24O`a z98%JNXNz)g6B7F9{}%wTNS6qDvwD?WG2-Il-`2nUv{Jf-&ON#o#`2TAZOv+K;YnnAI=04@f$nZxMp#a`pm-!>Zk~v~O4BMVDONI; zAMX)-v%~y}`|*x~2BAvBbiGHVUz(94w#r14a5n5oK@3@-0dW-->o;n*HYl$8w<}mD zA((R)nm`nU;Tka}YBpVYT2495(|0_seB$CQ0~zx&zoKZk?#PFCM7+%iST?787=xK< zeq4L`YHgOOg^}B*&-udfnX%p&d~~IocSsHrZ(*CysO_)T2i{fiFy3yiTpnw@fh!jv zq1YQCd#ju~{^R$9@*FaaMh!rWoA$&DebBAc4+&JcyJJT(8KwPJihXHG3lo$)q>A-* z#3Ze-{-m-rnPCe*oA5wWjjQ1(^EOCz;l^zb6D-9u99w~P8KXEVzkmz5=WBov!{TV?r$;H-aQa_7;|8Q0lo;+76d9@RsZ3vWE8&`Z*W zI=EV)Im|ko)C*Fd-e^;#+IPl`+&J765jX8@$P&-0oRgC)U(}dsNHbmR7E!NhlBRUg z*aZoaFjuhv4`E@ct#bsy)__dqK!yY@^x()rDo1Xwzt-7XJ#VguJ%r(==RlykCpJ!f zb4N$6AD9gyfF?SaBSKKE6fE}UXm5Adh5@z3S0RB>?XkV>q0(EfWZIadNAAj!IrcJF9Z0hD}#V@5}b3B^UL(=ISka zdNNS43B@ao&!>B7yBw{5R;kbb_)C+W30A$gJsWmxZrf9_tbwVBpdj?E!$T}0UrP_= zceKKd|8B>#%)+$yMTAp|Vgo-*qy-oh*+fC`6M)63vr&K6PJ-Y4R= zlMTwJ-zM5>BeSFxv~n){8lA_wPiM&}ZL56j>(7+(9yyVXVJYW#waU@;e0YPXxb4*a zUa4mv=dQ;`UmcJibur%kMhLw7g^{fY@I%!ogI2!2r$5+ znqQGDO0356m3@GobeR$iYwZ2qw)~PMc5!pX;I>v!Y+FuSLjv^ImT_THQ8j11n-e&Y zaNNyBc9cbN<-Tq|049xYJZUeQN_*7QlKaHB&z*+8ejb`g$e@l?EE_)#>`1=hM%L zFOte6Q8dz;rl$#krrKU|L$j%85)T@H?LcEHv*?*g+-XrJ&?R8gyo5M73+>kM+7_fj z4^1c}GIF}blo*4iJJ*Bs2L%_ZEU*nsqdCpbs{%98Uv3+*n4ZuR_W$sKAz8rnn(vwO zrQ+h=Cj;daU}jyvdgMGU_cirQz{6{l5SkxDzPc~6cL13LyYH>n7?l1;Nvdb}x*Dn% z)&QUP4jFiOyg|?644(fqG`DL)gxm&$a9<#yZuF0=wRLs79|tv{`csz>pA%ZS`c;ny zpqJW*s@yVv>gVT2gTj{|UC8Vz@LhLuoOSBmQT(0qFrydf(77a!7-rCW;NUe}M}dqW z6r_UGzf_ojSZtq?d>ntofMrUzj%zvv!&=fJM4_)D|oX3H@Mq_>F->W2I5U zJAODcHshq`&7_dRsq{+AXL%s&CTwxXB8LyFf=+fqqiKfAH2t)<=dNkku;`$&bC^>q z#nNN7S6DS>TFw6k_!k)}=6Xb*2!ilo#%DJlJo?`DXj-2#s`(P55)sj3QTXl!jNFssRuKBsr=sm2#z+A`g#! zYybBOHq_jmvGf85zxB2!ynrTlYXEerByW~QQ;&j&piz=h#!IEJmG=s3AE;|DRwZ{P z9U7Hee1i=Ym11)CX1#BYd_l2-`>wXh} zh#8p^AQcv&e_;YCra6ee;3#=|BEHT&pJo0#-)2)#RZ;yfOLlb~QS`WN-rug9oUZq* zW@OL^HcVB@8hF7O|NDn7EiVIcOMs#jZ(f*ZtA3#6|POZ5NLj z=F415TL5`EEXqhPbPXlWqh4?{stJGa8nSYEx13EQTzdX8^4n)hdZ78mtzf9mM;`Vk zb(kD^UJi=U{T^;s`gGe*+AKpiD{=aHJD&8)Axh3sleTCWtG{aaj1O6$X&c6iAk~PK z-D#(DyE&tO5c+NGjMvn1^os985pFR-xU#!*3sGLaIy!pIqoWw3 zrl*{7;|53JaOD3{Yq#3MwXzj6GH)`puspOfh9Pu0XK|g;%c@GcfXB+ds)-W*n_=hw#mc zFB#9HspPB^HkZE=X-Tv3q{YmthoGsxr>FPL?YS4PkRqC-E4{sdO?OSL8?hr9eOJ0m z7}oHNA%#O{nc*A7*y@|8kDRw}zzb%q^Qbc+MSesZNCOMGK&BqRq>(R4brZR4fl|DN zY^Y9ZU=e**J}qODJhKl!hf{NjF+<+qd*`8cSF*{fzWd(pBI8O*MN~|f7K=m*RS1RT zHdbg%bI*CVsm}*I9F=xcYdQ3{KOYRxl0HM z>RUPASVZ&nJi z9D+`fftwv-*oLu0sE}CP5u8q6INTvJ@eufhZKBSxEl5g}0-Nni;y@_aSZ&9Hd?!+6 zIG%oCUltAYTr4h@2WTJR$O=i*faSN*0dQ!X9#awc?sS|J8F}Gstu9IExPYCe zu-v`Pvi|;l5#XV@zJLuSCOoe;5c7K2Q2Ul>NnlL@S!OHyo5Td@dUZBbSrp{OHKgyr zhFoTHj}W=v+Y3%pdEAF(E@A3~E*Up#(BQ?Vu!T)i7e4+gFq6N^*{DWKYzL>_=ed0v4;TId!L?k@GY5@w{NF#BqKdOF)#(s<7Q zWoT$f|5?%hQq+Yv;Q9olC7;?ZZlGck|3tD+K0x#)-G%E04b6~~-=8;Ah1_=};rHYT zaE6WR>gZ&^pw0qi#fSCL=ZB^<>n^{iR-UenvK0LMX&gQksF=ckEx4>kBWeBP6QoRT zc?puqr~s(vmez)grM_?J=~SUmtQuJa7|#P!5$3jYt2Q&VAaAdth1uDbK)W`Z*`1$F zSNHjYmhg<3gosE;7>#7AZxFG5M?pokHt%YMwf4&Qbi1QzhdUnh)Jz+}EjbX0VD3S9 z?k#WEA+?_!>xKEAEd=qq{!T`MF=<;HJMIrX0|~-v5`L!-x!UJCFyt*4Yx{T?zv3?t zGZ*@cjggAEA3IY7T-A|kL<_Yg!X5udvAE5%y&Mb~r%gp@LAm)ty%+DI{a{C^900Tk zMMcGcPv>WgyU{&L$-LX}V$2x3`uZG_h%50CyFf&NN&L50B&BTJ<&(wGRlj~gT(b8% zSxoK#Hr;{G)L6D^C+Yq{gM{11QQt;Ks{%hA(+!dc2nc|)I+ZFa87nL62_P7CFU}F0 zy`1>b79+YSwZv6*KX}&J8 zCOz=axfkH&U1-8~<08R~`LVZtN#yAv?%G68zjS~?3}(Bntt}>v(~Zc!HF}B`4HO|w z(9nPttS-MP&e%uCWL+`;WG8 zTI}j^H=+0(w{lUdc~Aa-Bx}pLqmt?UUqJwAF8uW8i=wFrt0WlPq0_AvtjLXxjhUm` zuAkM2NXHL8X5zq^uIOsf(T0M)NJcBh__j*L9%M z6pQY*r%X>x_ z=hwX>k-D>tQg!bw+SY0?kV}9!bEMk=~(V{1RHr;NbHi-zK1upFrRY9B$be14sPg&k7Lis(wcIaTlKh=M-@OXKrMq0W8PS4{jkx_KRVo3!`JgviunEj+w*2$kcH zJcrh3C8)>6AEE?BJWB#t?SsyKIh3&3XBTt3C$QXDp8?+gpu8^qdtg6ovD8{gUR zZywQ0(BVjqcP-uVuR@}HLzfsYzS&7p5itG!h?8OPq+*PI)b~PbMkyd6LBK}7Psw&n zwV`97(a*}$RD^r3aVkLo$Jn=nMvUy3)WcE<26nQur3lfy785Q}mm zv5GAh1iTC7hu-hEt(R)O=cYj!l4%s-;!@veu}t&+b+Fp#kDg}!_R|)4T1+ccb+5pI zD+_(3mr5!8i(KFDbMkkK5dj`8= z`R1M7-Dt63D*^Z@ekSx77XO6`bdSPT8w#42v<27k?tbcye|VeU37x=1G2M-v?6|(d zvX4T5!#w<)+~UjO`!N~eRP=yMbDIZz7qHKhZac7CWvKMsc0X%vbpMo_oBPJ?hbVTLh$&jR}b*1Wh?bZVEKus91G76^JE4RNb1d3~)FXdeTH1H3Z?jU32ge zo^w`bSzTCTtYSH2k*|ATZ3Ir%7ku5bZw?bN9>%V1N}r#*WWb&cH%ltdTi45SA_RL5jkxEgwG?l=+agUD`T zcLV{Jx7p39z(^2&!{V1I5`f-Y0Wmy~Hz z__1i}xDko&Z+^-2-e~C7))xB=n>d9(dfeBNH0i8pmXh^M5fPm75ALRX^;VuBfJnVS zB|(Ez{7F9P!8a8Yo^q)eOdoxyZUjjUSExeW(aX_{3|CS{dT6n=L|_aJuvM+n%H2 z>{4AVfIWLvO6*97UK71Wbg{mk{RMlq`N#)Ao#9uerj#JC4;{9_lau+Jf-r&#Z zLBc2qHe2(*e!cg^k){T(jX5C8bDUf*FXud0A6(o2wZHT0TY>Y_r|fkMlSIMhR4;E< z8j!qiJs^fz&qp|$*vqAKFp1Cgj%e)PT7dUkh=98^6#|ekr%W2`sQc|$C%ANSA36ja z=Uyp56r+(yqj%Bi6N^-<%!()#yc=z?wa|9+z4O8+h)zp3K29Y_hm*eUY)D(ElBA;3 zqm>E~m5z-XD}$|Qw!AMN+Ck%?9hDnE9eh6IeX)O1&tx-NSPO^iYZkDiSnP_WC&fWu zF*11nWFRvd*ojZ$7ts|qarg{ByA;K`DQSmJMh~=nIFjr13?sUWOzKs1+mX!~f@t>_ z9PBSJZkUT2ThO&I`14k~-(Ff+$QE&0j!LOx5d{rN2pWF^te>yT z9Ztb9!&;{lr*Vnf2DLAAHg8F0(3Aed}`?vg&vCP zYMJG?cZ(;;47278sfph;AC2UW$QWt%l7W4~XSZZ!9bx6VyS+4FA)T;|Xi|K{q!9cr zQTN-UMhL|DQ!pLOWz8|_A%r30deWaRU%nVO)d8u4UWm8TIuO2o`d)jubKKRCzOWmA z!TLwDeshgpqST?`_-?Ge5i=R1ICTs7e%!WL%lqEU@DN2+WrxoW#D>L+X_p9?wb|tk zhUgH5F@6NNRMeXsP%-~A!E-eJ1RB@X*6>MgUGmW2SD1c4%sleuBW4x@W1_D3+n0<( zU)oh9<5Igu`DT1C>N`qJS_BhV^jwhqFEOY%k&ZJ-2ao}w6mxC59)7YZ8;b%L1s3<5; z03J5S+EN9B7SMSn2-(*+U!emCZwz>BzZ?7bm?D%UKj6}Jkl$Ndy zqQn`ur~LXL+l>zqzqq!|OrYXr@c(LO5z=3|a(Z^w(l(=0ejc^Azi-DP{S7)1Cmal2 z&>Ibf&_*{jmiYf_O>`4J>{JhE8zyD)C}4*#t9-DGc3sTB6`{H#rAut3aSvg5hzt*J}_&TA(lpN z0mw^b#{|hD#b_hMN0#!g>0rblzb*1&$bkwzjU4Uwm#_c+0)7rM8QxVue!#z1R|pV& z|LdZ=7rzcvVaR)&tQI<>Yati(qJ!FEy`e9%a08Mo_P2E`9lOl1@GSG=jAF->vCTYGz4l>Nx>^ykWS1$z)Lpe;~&YilQJ zn&o~bI+b^I9(yM%6HaGqVp3XGs=UO`+?sdm2J#72m`pMf{KX;}9t8&J(S%`)KH-|B ziHgaHgR0=m|9NN%coHZ}tdf(HXL1twxXC7e`9!byWPxy=+;j`SI;GWg)U+R2OA1oG z<{0*#pu^f^?(qxa)@`!X2J{^BM~rsxFteXG8}5e@bNtVJ0gpf-#0luCwbtw5==Fwd zN~VH1{_Dz2s#9m`mjq84+VnC!a+-g(fNin%U>I_Q|Z;8*g zl}2-}6}4v{IazXO=6JtRMT{*t>cxG!&D#8d-SI0S({GFfZ-0<~T7#o4Pn;2Xy#Kl4 zm;gK{V+1T=1}IXDr^RU+>e#R>JMo7TTcK1%AV*V9s&$(rGc$9KCMYK7xB}#`RAy&q z%QqRu2MsJ&MdbeVkO?8dM0J0`R&w|L^1cW3uC&T+(@wvV@jc6K&@MAo0d@Z&A+IB4 zGq`5g*KM~Ky6^&2kPnd;7aAH0hJT`Lh_D!o6Z0Mhs7IIy4sjyq;q*(*0&Z=+9-lWR z(ECyeDUG75v7j&Wz>)8oJiP@=VXf`@4WNN-J!ETU3{Xbi&ngHrV?jH9<$h%tCvpYi zE5T>qM<%48Yn0>PB!0M_@p^Gq#65=}no?=>hpoPt{lQdB`cok>&NbKkb93n>7-{6j zG7TQ~^a;Ql$mCiW!Da$QQhkTQH6#Mg)nP6ViKSB0UU@K7g`;6rW zR!^RMn4Xy6AH47T#Y&>V^734^F{`7NCWl){lZt$ghYu+%7P@52B&Rt6I(e^LL85BP zps>}l#9O#Svowh@DJ`U#u9#4WMP6|e$kiB<3kvom>l+&uloUAe@$q7FuYQ_2>IEp7 zn7T15;!cFR$Irc@M(!GNnByx2w$WtN?bN2H>Rye4xHI=JKX~xK1g6vkh=G?rW=75~ zm|u*@VVM&fEv4izeFgFrrn>a>x#&fj_exZ&qjF-oNEOndp|HkK_5m|nyF3y)xA3gQ zl9w#7XV}UGjb0^UR#jABhJ}S;hJ}P+?C$Ig0zXt^b7=|f&)xw}iO997BG@%3``L9f zUMpKB;Pq>WuZDzee6&WpzvOYTokfP|qYLF2gn^oY^v1?}=6ae)6B6^<E;`qTX$xnOQEp)`p< zBMEV-6D8fNm3rFy^zNVaGZ@qv3c&&fmGtHpW+agLpNnBJ$BoM3k7h+i^N0E+17)T( zZm8|#*{JldT=|*Ardq!Q4Kxh~I>;sd=iyYk-DT(yR4=d8qvv2Ug;^U-g2IVi*R87+ zx=Lx6^^hyZm#-ajJ4fh4c=~g)s1S4MwrGFfLlttJGPcpzw~F)|NAElboH?S0iRmeL+=VSa_f5v?O6E1+bF*mI51~cti?sQOoE_3doNal6C#h+sM zO8**Y`IU5ELLxP|^Q*;{Sd02W)UERL{7k0IZGd0D-UE-7RgpoPfsNmH0#~be>dOa} zp%G4-(bK$uh%_#lL;Io;!DHf`vfh-&mw>MN89JR}T2Z$;<3RpwsVjo!^{&Z4W+kLc z)z+5}^6w=$n05{Be{$YsEuQ)0e|r2ZW5463%E!la|Fz0-+R*f5>H1p&m4H2T9ZQL4 zx6Y*Hy>VZv#L)+Lp^D9Z{Le18Tfe>y{dUM^Sa%DCQF{JvW!bZR`3mbF*dXHMb!b3Y zr&WJy6N!UM8gPB4?`7;qTGX58m>Uz^VzROyFtR{JEf~P=XiD2hpeCnWofNVm7l@Vi zC6VL4F|~M^7!b>B2p#s;L^L;^JJCm^wItW{XdI1X>!fI>S>9#C!Y2^ZnRE%~nET8Y z&10k(1}I(EO+l3Zo}*r+uhsv*=Ds`}$~J7jlBrOc*ETbjq*q2vmMld`mTK~1ga(CV zQnD1;DunDr2rYJ#CELi7h^%EPA)&El$!?PDn0fB& zx$o;fuk$+3P3l4Hm)<@a&MSDI=seXh`9kx>FD$^imojK|b)d$L4fXCUvv!2PKW|-- zdAj3BG^pdega|ZfO#WE-Bz;9?t$^83yf0)*aX#6g5s|C(*5^i;zR^o#+UcXA7_Rqa zd;c**9Ft~yT3AR(ih@S1*;Ud>`ARC4L*@IyGyhabe4w?uv46N^Z8#HI8J(5o=$Ccd6+h8DS-SE&emE}w{3R`(=LF}tf$wHp9*27mRD! zqk>1Su(!9G{zYAQqeelERDAs8~Ib(asULj z$Cr-hlez!%T)~!%H9t(aE3EBZ(kWd~Q!8nY;N<)3aUIU&+jZL)$0YE>_0a@Ro379z zTg>ibcf^T>4y*+PWBr@~o{7PFkMzA-sN3zAi!2&<-S{&5&DVn0pk*R>2XOlWo%qox zu(1~S1$$2J^B;S9xYjig1Qo5gTw@P|tV!0Llsl6n40}NUwj2d7JQSNUqY3%V zZR$#PqImlXn^9WfP8hnvGTw#Bd zgjB!Zz}~=3WL$gfeZ2HH6!&*ff;9V6Iwuyce9RwN~ojCK%=>2Kdf4rva$8hdj>q$ z-{YH{Ok(j~6O7Z;M@*Xb*_WT+l)f(;sAWyYx97)7yX~K!p7pO-zoeB=&d!9;lFVHI zEmFEZ(G+!lV6^4HLC56*-W3b*SrJ!oUd06SjYbacim z>eH3*2OX5bW7a)J>n523R>1Ebg~t5nYjQyItp&P7x%)bOnH!&}Soh!tyXY(PlcXOx z`=6j$<0%TqCqAF+t)^AjS52BlCuzP3x^gY=RRGdma>{=xcHdFau9#CvRZH(ON$#@> zw2sUW6^--*M&0&8Y6;L~+7Hs#o>NjcZw3uS>O43<@^+1w@2Zq<)f^(A^sztXvqbSy zZ4AGZTPxo;nmo6usX!)|L12Whq|>-A*fZ(1Z;2`{-qH}WpxO&!5k-DGCPL8%xX%F< zysE8@A1Hg==jEFomTn>tK5o9ZG1ZbsxT;E$VL>GS#oZ$EA71TNe14B|tnKj`hk0CM z$I~Nv;llkj>jo<7NTkAQS<4P2cke~WF3>Gc)0(BMdRbN}Zag1y;+S1rcywEh^7nAw zRdsn+V#xmJkqs2zahqgLf`qLsvc?09_%N#D}v#+n;xv_z{*D)$|xy((;f9t)g zs?n_PrfzI8rC)=VkkhY1$+PWb{- zUZadt>UELvwO5Y{K^-TQ9rjpddtzu?*(S2_>VD9g_1!+<(*Kpr%kU6|=!eyV5DLyy z%8PX*Ios|)y2N9sg-yQAm?ku7e;RhyHmj)#di&4Y9@`BYk1|IpB_g8mM((-~LaV7La)JO*a0b$8;qe`d=nzJCmR zRFZ!`?PL`8w&@FnbV{IU?yGE*g}bs3EgbVD$?CodYe^A_uRI zZ=x&S^UBkbE_WD8MNf26&|tDciiZZm(5vgSBbEC?99&!~D}6*vSyQz%Lnc!;r7OA! z^aJ9hSz6?Ie*V$b*Wg;-%CvM?d8we5H-sF3ju?mQbv0ZS8#18OSlxGBIl}b^bGU z<~nEKY)MCYFCwnAKo8gav2cY&KBtc``%q>&rw$Ix8Vl2EQm&&`7d!h&OBH=Fwl!H` zz-zZ=^Q`0$-L>J@Xx+J8I)Li3E1lwhY_+j&?Amp{!`IkIH-n!XX>4p%W7eA?B&Sk# zk#D%{sw-&P7zL?81f;GeryV6;Jm~Rg9;X>Ly~Pu$^=7$GZ+2~_=WTuD$kor^gufvhW!Y6*#@kIO#Ld=$ zQkJhrgrcmI?ZWt}X1+$XK|Jbr_>8U$eW^z^3UIe6lY$O}FdPW*{?h8K8K7ijzLKz> zc;O8`Ga+qJ!EO97$SPEJG!t8O=4A^#6Fkd4I5|ln#1^KNB>hjd#2s?n211~x+;!S> z&T725vA%}?yh37qJenN~QdVHjKm(VrH59JQA&6RCv39i3vLU+1#3n_$$aaM{Va_@i z&r#>1m``p`Z!xQclas-dd(|n>tnWM}2RVCFH-6lfi|13M&3)l}SfkEvy{reF-Xv(;9x@KT$Zb-3j&T_@%AAdj`@Wkuc3CbPsOWH~Uj=z#9>uFtg*b<{mY@eaf6QogpT!jwT@_^uY&Q2Y;h zse=CX0R*Bym9R+VFA^m&7fQUt?I+)yH(6PpLIj_Zaws0%?&KP$@p#t&tuBt;~P>k;%isYwushnvsKc0d$b`{h#R`_kc_T zG$Z^#K0T%!9)Xe1@sWM9Uh_Uy*jDm2acy*#gZJuP_}#J4@z~%EPX? z*OyS#h~X8WA~Y_^+7R0goB62}+xJz2Z63v;_JV;xo=%_6V0RileGb}s?y>g$FgRXS z9f5fnaz01d<0$>?ymt1#0aY zpQ@HD&hGW}>b5QeWPnpNLZ^_e5wfp_dtzkMlmt)H+ud&YPuv(XlPG0Uz>$VlJs(Ja z&EF-SAQsuAjLSDzf^3tuSE|hUzvsyUHWTnCA9kaTt)24$Do|>t#ivBbE47Wrn$@Q5$Eo+CD_$6e3Fpv7K~**B9UlW>MltQ9~hoAiO#k1N`8mSsCLmFpK)!>mZRRe)-i%Rbk2N2~)Hf-2({DiuyK2}#!KH_5pe^LP3bDy_` z-u*+COk1|lCF(Q#o2sfhV+WZcVE&bX-wb(@f>9L^41W*25+rd!k-~p5Z&~7Y<+h>yV_pe zx5#8)7V={JpT{C}T^`_DY35Db+z2lAC=M_E`bWkPX*G#pm92f7fZ)PYJVo(aPfaK; zea|l{x((!ZOa&V`IcDZZo%P>4B}aYH2Gm>fh#!-oA*QpFnCXVu{@(VyU~PnTlrCa+ z<)ojkbVvkEY{~Sz7{jzAyA1L(>#?8ns_SNHc>h4dkC1<6S2Y&TcfL#c6qb%qzh2;* zWr(umsF(q-s0`mA8zhND%6LrDHMd6B;@zV-wa81BSQ6V~8L1!quy0rZEA-bVB8RH}vu9kwRcGVa+?14*mKci-=vKG^ z96eQwMkP^f1ZO+sx-#p#LtEk`pP3NRXK>=*c5q`@d6~XN5B#kd@cMZ4XynEmsG9p! z3N?LH8qbX7Pw$vetL+P7A;SbQ;{OCc&OHWyiL~Q@Dv=$pbmMbkyLC@(R@Q*}b#0{X zF#7_DtIZ+)MXZ(ZV_88V4z%1@O`m4$BGq-joeFz3?ohy3=>Tmka8Z#Z8+ga5M88Ug z5)BEPTS)gpkp>7U8&y>s=;&tAW7r+-QXehw*1`CZd2x-{Ic@?XZTT$6;8v*}$icJ$ z+UL8ACfo8Tlx-kx{O&@1gvQQ4v6aj=T6km}IP3@!5s_?g2X%#gBT-yquR6dgRu(oQ z+W98IR1E8f$vx5>o+8q(?+x!Kxs`8~Lfc%rghrv!XcQM0*XQA3GL*G5dz+hgGS1RJ zAxH4he?^Y81Ai_X5a7`8*`sP|h0q9eu**(NyT~Ni2xIgy%!{+-5NI48R&nyIyw^ y@L^aJ8b-hG+^}JN-Mz^fzhT1$1bt6s+EB{0U2e15f-79va6&^{J?E&o_x}JUu?1cL literal 0 HcmV?d00001 diff --git a/runtimec/documentation/architecture/rwir-binrwir-aliasing.svg b/runtimec/documentation/architecture/rwir-binrwir-aliasing.svg new file mode 100644 index 00000000..06315198 --- /dev/null +++ b/runtimec/documentation/architecture/rwir-binrwir-aliasing.svg @@ -0,0 +1 @@ +

Partitioned BinRWIR references

Call binding

RWIR and BinRWIR contract

read current version

write and increment version

later read observes write

Register a
READ capability

Register a_out
WRITE capability

Alias Rule
MUST_ALIAS read 0 and write 0

Read Binding

Write Binding

Canonical Cell
value and mutation version

array.get
Read a and i; Write x

array.set
Read j and x; Write a_out

array.get
Read a and j; Write y

\ No newline at end of file diff --git a/runtimec/engine/engine.c b/runtimec/engine/engine.c new file mode 100644 index 00000000..9eaf4cda --- /dev/null +++ b/runtimec/engine/engine.c @@ -0,0 +1,134 @@ +/* + * 组件:engine 的 scaffold 实现 + * 作用:session 与 Program repository 的 fail-closed 入口;输出指针 + * 一律先置 NULL,不伪造空 session/空 lease。 + * 联系:公共接口的 Connect/Bootstrap 调用;真实实现建立显式 owner graph + * 与 lease/generation 语义。 + */ + +#include "engine/program_repository.h" +#include "engine/session.h" + +runtimec_status_t runtimec_session_create( + const runtimec_host_services_t *host_services, + const runtimec_session_options_t *options, + runtimec_session_t **output_session, + runtimec_error_t *error) { + (void)host_services; + (void)options; + (void)error; + if (output_session != NULL) { + *output_session = NULL; + } + if (host_services == NULL || options == NULL || output_session == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} +runtimec_status_t runtimec_session_destroy(runtimec_session_t *session) { + if (session == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} +runtimec_status_t runtimec_session_get_host_services( + runtimec_session_t *session, + const runtimec_host_services_t **output_host_services) { + if (output_host_services != NULL) { + *output_host_services = NULL; + } + if (session == NULL || output_host_services == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} +runtimec_status_t runtimec_session_clear_derived_state( + runtimec_session_t *session) { + if (session == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} +runtimec_status_t runtimec_program_repository_create( + runtimec_allocator_t allocator, + size_t capacity, + runtimec_program_repository_t **output_repository, + runtimec_error_t *error) { + (void)allocator; + (void)capacity; + (void)error; + if (output_repository != NULL) { + *output_repository = NULL; + } + if (output_repository == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} +runtimec_status_t runtimec_program_repository_destroy( + runtimec_program_repository_t *repository) { + if (repository == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} +runtimec_status_t runtimec_program_repository_find( + runtimec_program_repository_t *repository, + const runtimec_program_repository_key_t *key, + runtimec_program_lookup_result_t *output_lookup_result, + runtimec_program_lease_t *output_lease, + runtimec_error_t *error) { + (void)repository; + (void)key; + (void)error; + if (output_lookup_result != NULL) { + *output_lookup_result = RUNTIMEC_PROGRAM_LOOKUP_INVALID; + } + if (output_lease != NULL) { + *output_lease = (runtimec_program_lease_t){0}; + } + if (repository == NULL || key == NULL || output_lookup_result == NULL || + output_lease == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} +runtimec_status_t runtimec_program_repository_insert( + runtimec_program_repository_t *repository, + const runtimec_program_repository_key_t *key, + vmbin_program_t *program, + runtimec_program_lease_t *output_lease, + runtimec_error_t *error) { + (void)error; + if (output_lease != NULL) { + *output_lease = (runtimec_program_lease_t){0}; + } + if (repository == NULL || key == NULL || program == NULL || + output_lease == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} +runtimec_status_t runtimec_program_repository_release( + runtimec_program_repository_t *repository, + runtimec_program_lease_t *lease) { + if (repository == NULL || lease == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} +runtimec_status_t runtimec_program_repository_invalidate( + runtimec_program_repository_t *repository, + const runtimec_snapshot_t *snapshot) { + if (repository == NULL || snapshot == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} +runtimec_status_t runtimec_program_repository_clear( + runtimec_program_repository_t *repository) { + if (repository == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/engine/program_repository.h b/runtimec/engine/program_repository.h new file mode 100644 index 00000000..c0ee1032 --- /dev/null +++ b/runtimec/engine/program_repository.h @@ -0,0 +1,76 @@ +#ifndef RUNTIMEC_ENGINE_PROGRAM_REPOSITORY_H +#define RUNTIMEC_ENGINE_PROGRAM_REPOSITORY_H + +/* + * 组件:engine/program_repository + * 作用:Program 缓存与租约:find 只查询不可变 Program;insert 只接收 + * route 已完成编译的 Program;release 归还 lease;invalidate/clear 按统一失效 + * 模型撤销新获取资格,但不得释放仍被 lease pin 的 Program。cache key + * 至少含 store 实例、函数、source revision、 + * schema、instruction set architecture、compiler revision 与 + * BinRWIR binary interface 世代。 + * 联系:route 在编译前查询,并在 vmkv 编译后插入;lease 保证解释、vmjit、 + * call binding 期间 Program 不被回收。 + * 约束:Program 内容归 vmbin;repository 只持有 lease 与索引,绝不调用 vmkv。 + */ + +#include "contract/allocator.h" +#include "contract/snapshot.h" +#include "contract/status.h" +#include "vmbin/program.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct runtimec_program_repository_t runtimec_program_repository_t; +typedef struct runtimec_program_repository_key_t { + runtimec_snapshot_t snapshot; + uint32_t rwir_manifest_version; + uint32_t binrwir_binary_interface_generation; + uint32_t compiler_revision; + uint32_t reserved; +} runtimec_program_repository_key_t; +typedef enum runtimec_program_lookup_result_t { + RUNTIMEC_PROGRAM_LOOKUP_INVALID = 0, + RUNTIMEC_PROGRAM_LOOKUP_FOUND = 1, + RUNTIMEC_PROGRAM_LOOKUP_NOT_FOUND = 2 +} runtimec_program_lookup_result_t; +typedef struct runtimec_program_lease_t { + const vmbin_program_t *program; + runtimec_snapshot_t snapshot; + void *token; +} runtimec_program_lease_t; +runtimec_status_t runtimec_program_repository_create( + runtimec_allocator_t allocator, + size_t capacity, + runtimec_program_repository_t **output_repository, + runtimec_error_t *error); +runtimec_status_t runtimec_program_repository_destroy( + runtimec_program_repository_t *repository); +runtimec_status_t runtimec_program_repository_find( + runtimec_program_repository_t *repository, + const runtimec_program_repository_key_t *key, + runtimec_program_lookup_result_t *output_lookup_result, + runtimec_program_lease_t *output_lease, + runtimec_error_t *error); +runtimec_status_t runtimec_program_repository_insert( + runtimec_program_repository_t *repository, + const runtimec_program_repository_key_t *key, + vmbin_program_t *program, + runtimec_program_lease_t *output_lease, + runtimec_error_t *error); +runtimec_status_t runtimec_program_repository_release( + runtimec_program_repository_t *repository, + runtimec_program_lease_t *lease); +runtimec_status_t runtimec_program_repository_invalidate( + runtimec_program_repository_t *repository, + const runtimec_snapshot_t *snapshot); +runtimec_status_t runtimec_program_repository_clear( + runtimec_program_repository_t *repository); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/engine/route.c b/runtimec/engine/route.c new file mode 100644 index 00000000..52a1448a --- /dev/null +++ b/runtimec/engine/route.c @@ -0,0 +1,34 @@ +/* + * 组件:engine/route 的实现 + * 作用:唯一执行策略入口;当前 fail-closed,返回 NOT_IMPLEMENTED 并 + * 把结构化 exit 标为 ERROR。 + * 联系:这是唯一同时看到 vmkv、vmbin 与 vmjit 的文件,并且只有这里 + * 可以选择执行路径和提交 checkpoint。 + */ + +#include "engine/route.h" +#include "vmbin/interpreter.h" +#include "vmjit/vmjit.h" +#include "vmkv/compiler.h" + +runtimec_status_t runtimec_route_execute( + runtimec_session_t *session, + const runtimec_route_request_t *request, + runtimec_route_result_t *output_result, + runtimec_error_t *error) { + (void)session; + (void)request; + (void)error; + if (output_result != NULL) { + *output_result = (runtimec_route_result_t){0}; + output_result->status = RUNTIMEC_STATUS_INVALID; + output_result->exit.status = RUNTIMEC_STATUS_INVALID; + output_result->exit.kind = VMBIN_EXIT_ERROR; + } + if (session == NULL || request == NULL || output_result == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + output_result->status = RUNTIMEC_STATUS_NOT_IMPLEMENTED; + output_result->exit.status = RUNTIMEC_STATUS_NOT_IMPLEMENTED; + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/engine/route.h b/runtimec/engine/route.h new file mode 100644 index 00000000..bac3b5c0 --- /dev/null +++ b/runtimec/engine/route.h @@ -0,0 +1,55 @@ +#ifndef RUNTIMEC_ENGINE_ROUTE_H +#define RUNTIMEC_ENGINE_ROUTE_H + +/* + * 组件:engine/route + * 作用:唯一执行策略所有者:取权威快照 -> 查 Program repository -> + * 未命中则 vmkv 编译 -> 构建/恢复 vmbin frame -> vmjit 尝试执行 -> + * EXECUTED 处理退出 / FALLBACK 走 vmbin -> 只提交成功指令的 + * effects/checkpoint -> 观察 status/source generation -> 继续、暂停、 + * handoff、done、invalidate 或 error。 + * 联系:只有 route.c 同时包含 vmkv、vmbin 与 vmjit;host port 只经本层 + * 提交 durable effect;公共接口层把请求翻译成本层请求。 + * 约束:其它文件不得绕过 route 自行选择执行器或提交 checkpoint。 + */ + +#include +#include +#include "contract/status.h" +#include "contract/view.h" +#include "engine/session.h" +#include "vmbin/exit.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum runtimec_route_kind_t { + RUNTIMEC_ROUTE_FUNCTION = 0, + RUNTIMEC_ROUTE_PROGRAM_COUNTER = 1, + RUNTIMEC_ROUTE_VTHREAD = 2, + RUNTIMEC_ROUTE_BOOTSTRAP = 3 +} runtimec_route_kind_t; +typedef struct runtimec_route_request_t { + runtimec_route_kind_t kind; + runtimec_string_view_t target; + const runtimec_string_view_t *arguments; + size_t argument_count; + uint64_t instruction_budget; +} runtimec_route_request_t; +typedef struct runtimec_route_result_t { + runtimec_status_t status; + vmbin_exit_t exit; + runtimec_string_view_t return_value; +} runtimec_route_result_t; +runtimec_status_t runtimec_route_execute( + runtimec_session_t *session, + const runtimec_route_request_t *request, + runtimec_route_result_t *output_result, + runtimec_error_t *error); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/engine/session.h b/runtimec/engine/session.h new file mode 100644 index 00000000..9df1e69f --- /dev/null +++ b/runtimec/engine/session.h @@ -0,0 +1,52 @@ +#ifndef RUNTIMEC_ENGINE_SESSION_H +#define RUNTIMEC_ENGINE_SESSION_H + +/* + * 组件:engine/session + * 作用:显式 owner graph 的根:host、vmkv compiler、Program repository、 + * frame/register/view 池、vmjit compiler 与 code cache、configuration、 + * generation 与 quiescent point。禁止用 + * function-static、global 或 thread-local storage 隐藏这些 owner。 + * 联系:公共接口层创建 session;route 在 session 上执行;多 + * session/测试隔离都从本对象出发。 + * 约束:当前 scaffold 不宣称 handle 线程安全;并发协议必须由 session + * 的锁序与 generation/lease 设计提供。 + */ + +#include +#include +#include +#include "contract/allocator.h" +#include "contract/host_services.h" +#include "contract/status.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct runtimec_session_t runtimec_session_t; +typedef struct runtimec_session_options_t { + uint32_t structure_size; + runtimec_allocator_t allocator; + size_t program_cache_capacity; + size_t code_cache_limit; + bool enable_vmjit; + bool observe_every_instruction; +} runtimec_session_options_t; +runtimec_status_t runtimec_session_create( + const runtimec_host_services_t *host_services, + const runtimec_session_options_t *options, + runtimec_session_t **output_session, + runtimec_error_t *error); +runtimec_status_t runtimec_session_destroy(runtimec_session_t *session); +runtimec_status_t runtimec_session_get_host_services( + runtimec_session_t *session, + const runtimec_host_services_t **output_host_services); +runtimec_status_t runtimec_session_clear_derived_state( + runtimec_session_t *session); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/host/host.c b/runtimec/host/host.c new file mode 100644 index 00000000..7004a19b --- /dev/null +++ b/runtimec/host/host.c @@ -0,0 +1,79 @@ +/* host 的严格生命周期与能力表借用。 */ + +#include "host/host_internal.h" + +#include +#include + +static runtimec_status_t runtimec_host_fail( + runtimec_error_t *error, runtimec_status_t status, + const char *message) { + runtimec_error_set( + error, status, RUNTIMEC_ERROR_DOMAIN_HOST, 0, + runtimec_string_view_from_c_string(message), + runtimec_string_view_make(NULL, 0U)); + return status; +} + +runtimec_status_t runtimec_host_create( + const runtimec_host_services_t *services, runtimec_host_t **output, + runtimec_error_t *error) { + runtimec_error_reset(error); + if (output != NULL) { + *output = NULL; + } + if (services == NULL || output == NULL || error == NULL || + !runtimec_host_services_is_valid(services)) { + return runtimec_host_fail( + error, RUNTIMEC_STATUS_INVALID, + "invalid host create request"); + } + runtimec_host_t *host = runtimec_allocator_allocate( + &services->allocator, sizeof(*host), alignof(runtimec_host_t)); + if (host == NULL) { + return runtimec_host_fail( + error, RUNTIMEC_STATUS_OUT_OF_MEMORY, + "host allocation failed"); + } + host->services = *services; + *output = host; + return RUNTIMEC_STATUS_SUCCESS; +} + +runtimec_status_t runtimec_host_destroy( + runtimec_host_t *host, runtimec_error_t *error) { + runtimec_error_reset(error); + if (host == NULL || error == NULL || + !runtimec_host_services_is_valid(&host->services)) { + return runtimec_host_fail( + error, RUNTIMEC_STATUS_INVALID, + "invalid host destroy request"); + } + runtimec_allocator_t allocator = host->services.allocator; + memset(host, 0, sizeof(*host)); + runtimec_status_t deallocation_status = runtimec_allocator_deallocate( + &allocator, host, sizeof(*host), alignof(runtimec_host_t)); + if (deallocation_status != RUNTIMEC_STATUS_SUCCESS) { + return runtimec_host_fail( + error, RUNTIMEC_STATUS_ERROR, + "host deallocation violated the allocator contract"); + } + return RUNTIMEC_STATUS_SUCCESS; +} + +runtimec_status_t runtimec_host_get_services( + const runtimec_host_t *host, + const runtimec_host_services_t **output, runtimec_error_t *error) { + runtimec_error_reset(error); + if (output != NULL) { + *output = NULL; + } + if (host == NULL || output == NULL || error == NULL || + !runtimec_host_services_is_valid(&host->services)) { + return runtimec_host_fail( + error, RUNTIMEC_STATUS_INVALID, + "invalid host services request"); + } + *output = &host->services; + return RUNTIMEC_STATUS_SUCCESS; +} diff --git a/runtimec/host/host.h b/runtimec/host/host.h new file mode 100644 index 00000000..46e92f1d --- /dev/null +++ b/runtimec/host/host.h @@ -0,0 +1,32 @@ +#ifndef RUNTIMEC_HOST_HOST_H +#define RUNTIMEC_HOST_HOST_H + +/* + * host 是 runtimec 对外部能力的唯一所有者。它只持有一份经过精确版本 + * 校验的能力表,不拥有 BinRWIR,不决定 vmjit 路由,也不提交 checkpoint。 + */ + +#include "contract/error.h" +#include "contract/host_services.h" +#include "contract/status.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct runtimec_host runtimec_host_t; + +runtimec_status_t runtimec_host_create( + const runtimec_host_services_t *services, runtimec_host_t **output, + runtimec_error_t *error); +runtimec_status_t runtimec_host_destroy( + runtimec_host_t *host, runtimec_error_t *error); +runtimec_status_t runtimec_host_get_services( + const runtimec_host_t *host, + const runtimec_host_services_t **output, runtimec_error_t *error); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/host/host_internal.h b/runtimec/host/host_internal.h new file mode 100644 index 00000000..831be30b --- /dev/null +++ b/runtimec/host/host_internal.h @@ -0,0 +1,10 @@ +#ifndef RUNTIMEC_HOST_HOST_INTERNAL_H +#define RUNTIMEC_HOST_HOST_INTERNAL_H + +#include "host/host.h" + +struct runtimec_host { + runtimec_host_services_t services; +}; + +#endif diff --git a/runtimec/host/kvspace_adapter.c b/runtimec/host/kvspace_adapter.c new file mode 100644 index 00000000..a934a16f --- /dev/null +++ b/runtimec/host/kvspace_adapter.c @@ -0,0 +1,30 @@ +/* kvspace adapter 的失败封闭骨架。 */ + +#include "host/kvspace_adapter.h" + +static runtimec_status_t runtimec_kvspace_adapter_fail( + runtimec_error_t *error, runtimec_status_t status, + const char *message) { + runtimec_error_set( + error, status, RUNTIMEC_ERROR_DOMAIN_STORAGE, 0, + runtimec_string_view_from_c_string(message), + runtimec_string_view_make(NULL, 0U)); + return status; +} + +runtimec_status_t runtimec_kvspace_adapter_create_services( + const runtimec_kvspace_adapter_request_t *request, + runtimec_host_services_t *output, runtimec_error_t *error) { + runtimec_error_reset(error); + runtimec_host_services_initialize(output); + if (request == NULL || output == NULL || error == NULL || + request->borrowed_kvspace_handle == NULL || + !runtimec_allocator_is_valid(&request->allocator)) { + return runtimec_kvspace_adapter_fail( + error, RUNTIMEC_STATUS_INVALID, + "invalid kvspace adapter request"); + } + return runtimec_kvspace_adapter_fail( + error, RUNTIMEC_STATUS_NOT_IMPLEMENTED, + "kvspace adapter is not implemented"); +} diff --git a/runtimec/host/kvspace_adapter.h b/runtimec/host/kvspace_adapter.h new file mode 100644 index 00000000..f7e0f6db --- /dev/null +++ b/runtimec/host/kvspace_adapter.h @@ -0,0 +1,31 @@ +#ifndef RUNTIMEC_HOST_KVSPACE_ADAPTER_H +#define RUNTIMEC_HOST_KVSPACE_ADAPTER_H + +/* + * kvspace adapter 只把一个借用的 kvspace 句柄转换为 host 能力表。当前 + * 尚未连接 kvspace C 函数,因此唯一入口明确返回 NOT_IMPLEMENTED。 + */ + +#include "contract/allocator.h" +#include "contract/error.h" +#include "contract/host_services.h" +#include "contract/status.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct runtimec_kvspace_adapter_request { + runtimec_allocator_t allocator; + void *borrowed_kvspace_handle; +} runtimec_kvspace_adapter_request_t; + +runtimec_status_t runtimec_kvspace_adapter_create_services( + const runtimec_kvspace_adapter_request_t *request, + runtimec_host_services_t *output, runtimec_error_t *error); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/include/kvlang/runtimec.h b/runtimec/include/kvlang/runtimec.h new file mode 100644 index 00000000..dba4705e --- /dev/null +++ b/runtimec/include/kvlang/runtimec.h @@ -0,0 +1,106 @@ +#ifndef KVLANG_RUNTIMEC_H +#define KVLANG_RUNTIMEC_H + +/* + * runtimec 的唯一公共 C 接口。 + * + * 公共层只负责创建 runtimec、提交一次执行请求和销毁 runtimec。RWIR、 + * BinRWIR、vmkv、vmbin、vmjit 与 kvspace 的内部结构都不在此暴露。 + * 所有可失败调用返回 runtimec_status_t,输出对象在失败前先进入无效状态, + * 错误写入调用方提供的缓冲区。当前骨架只会明确返回未实现,不伪造成功。 + */ + +#include +#include + +#if defined(_WIN32) || defined(__CYGWIN__) +# if defined(KVLANG_RUNTIMEC_BUILDING_LIBRARY) +# define KVLANG_RUNTIMEC_EXPORT __declspec(dllexport) +# else +# define KVLANG_RUNTIMEC_EXPORT __declspec(dllimport) +# endif +#elif defined(__GNUC__) || defined(__clang__) +# define KVLANG_RUNTIMEC_EXPORT __attribute__((visibility("default"))) +#else +# define KVLANG_RUNTIMEC_EXPORT +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum runtimec_status { + RUNTIMEC_STATUS_SUCCESS = 0, + RUNTIMEC_STATUS_YIELD = 1, + RUNTIMEC_STATUS_WAIT = 2, + RUNTIMEC_STATUS_FALLBACK = 3, + RUNTIMEC_STATUS_UNSUPPORTED = 4, + RUNTIMEC_STATUS_NOT_IMPLEMENTED = 5, + RUNTIMEC_STATUS_INVALID = 6, + RUNTIMEC_STATUS_OUT_OF_MEMORY = 7, + RUNTIMEC_STATUS_ERROR = 8, + RUNTIMEC_STATUS_INSUFFICIENT_CAPACITY = 9 +} runtimec_status_t; + +typedef struct kvlang_runtime kvlang_runtime_t; + +typedef struct kvlang_runtime_text_buffer { + char *data; /* 调用方拥有;capacity 为 0 时可以为 NULL。 */ + size_t capacity; /* 包含字符串终止空字符的可写字节数。 */ + size_t length; /* 实际写入字节数,不含字符串终止空字符。 */ + size_t required_length; /* 完整内容字节数,不含字符串终止空字符。 */ +} kvlang_runtime_text_buffer_t; + +/* + * message 容量不足时不写入半条诊断:函数返回 + * RUNTIMEC_STATUS_INSUFFICIENT_CAPACITY,status 与返回值一致, + * operation_status 保存原始失败,required_length 给出完整消息长度。 + */ +typedef struct kvlang_runtime_error { + runtimec_status_t status; /* 与函数返回状态完全一致。 */ + runtimec_status_t operation_status; /* 容量失败时保存原始操作状态。 */ + int64_t code; + kvlang_runtime_text_buffer_t message; +} kvlang_runtime_error_t; + +typedef struct kvlang_runtime_create_request { + const char *data_source_name; +} kvlang_runtime_create_request_t; + +typedef enum kvlang_runtime_entry_kind { + KVLANG_RUNTIME_ENTRY_FUNCTION = 0, + KVLANG_RUNTIME_ENTRY_PROGRAM_COUNTER = 1, + KVLANG_RUNTIME_ENTRY_VTHREAD = 2, + KVLANG_RUNTIME_ENTRY_BOOTSTRAP = 3 +} kvlang_runtime_entry_kind_t; + +typedef struct kvlang_runtime_execute_request { + kvlang_runtime_entry_kind_t entry_kind; + const char *entry_name; + const char *const *arguments; + size_t argument_count; +} kvlang_runtime_execute_request_t; + +typedef struct kvlang_runtime_execute_result { + kvlang_runtime_text_buffer_t value; + kvlang_runtime_text_buffer_t program_counter; +} kvlang_runtime_execute_result_t; + +KVLANG_RUNTIMEC_EXPORT runtimec_status_t kvlang_runtime_create( + const kvlang_runtime_create_request_t *request, + kvlang_runtime_t **output, kvlang_runtime_error_t *error); + +KVLANG_RUNTIMEC_EXPORT runtimec_status_t kvlang_runtime_destroy( + kvlang_runtime_t *runtime, kvlang_runtime_error_t *error); + +KVLANG_RUNTIMEC_EXPORT runtimec_status_t kvlang_runtime_execute( + kvlang_runtime_t *runtime, + const kvlang_runtime_execute_request_t *request, + kvlang_runtime_execute_result_t *output, + kvlang_runtime_error_t *error); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/interface/exports.txt b/runtimec/interface/exports.txt new file mode 100644 index 00000000..94e6dc72 --- /dev/null +++ b/runtimec/interface/exports.txt @@ -0,0 +1,3 @@ +kvlang_runtime_create +kvlang_runtime_destroy +kvlang_runtime_execute diff --git a/runtimec/interface/public_interface.c b/runtimec/interface/public_interface.c new file mode 100644 index 00000000..46e70898 --- /dev/null +++ b/runtimec/interface/public_interface.c @@ -0,0 +1,111 @@ +/* runtimec 公共 C 接口的失败封闭骨架。 */ + +#include + +#include + +static int kvlang_runtime_text_buffer_is_valid( + const kvlang_runtime_text_buffer_t *buffer) { + return buffer != NULL && + (buffer->capacity == 0U || buffer->data != NULL); +} + +static void kvlang_runtime_text_buffer_clear( + kvlang_runtime_text_buffer_t *buffer) { + if (buffer != NULL) { + buffer->length = 0U; + buffer->required_length = 0U; + if (buffer->data != NULL && buffer->capacity != 0U) { + buffer->data[0] = '\0'; + } + } +} + +static runtimec_status_t kvlang_runtime_fail( + kvlang_runtime_error_t *error, runtimec_status_t status, + const char *message) { + if (error == NULL) { + return status; + } + error->status = status; + error->operation_status = status; + error->code = 0; + if (!kvlang_runtime_text_buffer_is_valid(&error->message)) { + error->status = RUNTIMEC_STATUS_INVALID; + error->operation_status = RUNTIMEC_STATUS_INVALID; + error->message.length = 0U; + error->message.required_length = 0U; + return RUNTIMEC_STATUS_INVALID; + } + kvlang_runtime_text_buffer_clear(&error->message); + if (message == NULL) { + return status; + } + size_t message_length = strlen(message); + error->message.required_length = message_length; + if (error->message.capacity <= message_length) { + error->status = RUNTIMEC_STATUS_INSUFFICIENT_CAPACITY; + return RUNTIMEC_STATUS_INSUFFICIENT_CAPACITY; + } + memcpy(error->message.data, message, message_length + 1U); + error->message.length = message_length; + return status; +} + +KVLANG_RUNTIMEC_EXPORT runtimec_status_t kvlang_runtime_create( + const kvlang_runtime_create_request_t *request, + kvlang_runtime_t **output, kvlang_runtime_error_t *error) { + if (output != NULL) { + *output = NULL; + } + if (request == NULL || output == NULL || error == NULL || + !kvlang_runtime_text_buffer_is_valid(&error->message) || + request->data_source_name == NULL || + request->data_source_name[0] == '\0') { + return kvlang_runtime_fail( + error, RUNTIMEC_STATUS_INVALID, + "invalid runtimec create request"); + } + return kvlang_runtime_fail( + error, RUNTIMEC_STATUS_NOT_IMPLEMENTED, + "runtimec creation is not implemented"); +} + +KVLANG_RUNTIMEC_EXPORT runtimec_status_t kvlang_runtime_destroy( + kvlang_runtime_t *runtime, kvlang_runtime_error_t *error) { + if (runtime == NULL || error == NULL || + !kvlang_runtime_text_buffer_is_valid(&error->message)) { + return kvlang_runtime_fail( + error, RUNTIMEC_STATUS_INVALID, + "invalid runtimec destroy request"); + } + return kvlang_runtime_fail( + error, RUNTIMEC_STATUS_NOT_IMPLEMENTED, + "runtimec destruction is not implemented"); +} + +KVLANG_RUNTIMEC_EXPORT runtimec_status_t kvlang_runtime_execute( + kvlang_runtime_t *runtime, + const kvlang_runtime_execute_request_t *request, + kvlang_runtime_execute_result_t *output, + kvlang_runtime_error_t *error) { + if (output != NULL) { + kvlang_runtime_text_buffer_clear(&output->value); + kvlang_runtime_text_buffer_clear(&output->program_counter); + } + if (runtime == NULL || request == NULL || output == NULL || error == NULL || + !kvlang_runtime_text_buffer_is_valid(&error->message) || + !kvlang_runtime_text_buffer_is_valid(&output->value) || + !kvlang_runtime_text_buffer_is_valid(&output->program_counter) || + request->entry_kind < KVLANG_RUNTIME_ENTRY_FUNCTION || + request->entry_kind > KVLANG_RUNTIME_ENTRY_BOOTSTRAP || + request->entry_name == NULL || request->entry_name[0] == '\0' || + (request->argument_count != 0U && request->arguments == NULL)) { + return kvlang_runtime_fail( + error, RUNTIMEC_STATUS_INVALID, + "invalid runtimec execute request"); + } + return kvlang_runtime_fail( + error, RUNTIMEC_STATUS_NOT_IMPLEMENTED, + "runtimec execution is not implemented"); +} diff --git a/runtimec/specification/README.md b/runtimec/specification/README.md new file mode 100644 index 00000000..2d0bf7fb --- /dev/null +++ b/runtimec/specification/README.md @@ -0,0 +1,18 @@ +# runtimec specification + +本目录是 runtimec 语言行为与 RWIR 结构事实的唯一入口,不保存执行策略,也不把 +当前 C 结构、BinRWIR 编码或机器二进制接口冻结为长期格式。 + +- `five-language-behavior-matrix.md`:语言行为决策的唯一事实源。 +- `rwir_catalog.def`:RWIR 操作标识符、参数结构与行为决策引用。 +- `scalar_operations.def`:已裁决行为到标量执行族的映射。 + +新增语言行为时,必须先在五语言矩阵的一行中完整写明 C、Python、Rust、Go、 +V8/TypeScript 的行为、kvlang 选择、理由、边界测试数据与错误规则。随后, +`rwir_catalog.def` 或 `scalar_operations.def` 条目用 +`behavior-decision: ` 引用该行;manifest 不得复制行为正文。 + +没有完整矩阵决策的行为不得进入 manifest、vmkv、vmbin 或 vmjit。矩阵、引用和 +边界测试数据必须在同一变更中完成,`check_behavior_matrix.py` 对此失败封闭。 + +当前两个 manifest 不含操作记录。未来生成表必须来自它们,禁止复制第二张手写表。 diff --git a/runtimec/specification/five-language-behavior-matrix.md b/runtimec/specification/five-language-behavior-matrix.md new file mode 100644 index 00000000..6c829289 --- /dev/null +++ b/runtimec/specification/five-language-behavior-matrix.md @@ -0,0 +1,33 @@ +# 五语言行为决策矩阵 + + + +本文件是 runtimec 语言行为决策的唯一事实源,不是实现进度表。任何行为进入 +`specification/`、`vmkv/`、`vmbin/` 或 `vmjit/` 前,必须先在这里形成完整 +决策。五种语言一致时,kvlang 遵从共同直觉;五种语言分裂时,必须明确选择 +阵营、边界样例和非法输入结果。 + +`tools/architecture/check_behavior_matrix.py` 校验表结构,并要求产品代码中的 +`behavior-decision: ` 标记引用本表已有决策。没有标记的非占位 +specification manifest 条目直接失败。 + +| Decision | Behavior | C | Python | Rust | Go | V8/TypeScript | Agreement | kvlang decision | Boundary fixture | Invalid input | Design record | +|---|---|---|---|---|---|---|---|---|---|---|---| +| integer-no-float-roundtrip | Integer calculation does not pass through floating point | integer operators stay in integer domains | integer operators stay in integer domains | integer operators stay in integer domains | integer operators stay in integer domains | BigInt operators stay in the BigInt domain | consensus | Keep integer calculation in an integer representation from input through result | values above 2^53 retain exact integer results | reject mixed representations unless that operation has its own matrix row | runtimec principle 7 | +| floating-to-integer-truncation | Finite floating point to integer conversion removes the fractional part toward zero | toward zero within representable range | `int` truncates toward zero | `as` truncates toward zero | conversion removes the fractional part toward zero | `Math.trunc` truncates toward zero | consensus | Truncate the fractional part toward zero | `-3.9` becomes `-3` | reject non-finite and out-of-range values | runtimec principle 7 | +| signed-integer-division | Division of signed integers with a nonzero divisor | quotient truncates toward zero | quotient floors | quotient truncates toward zero | quotient truncates toward zero | Number division is not integer division | split | Follow C, Rust, and Go: truncate the quotient toward zero | `-7 / 3` becomes `-2` | zero divisor returns `RUNTIMEC_STATUS_INVALID` | runtimec principle 7 | +| mixed-numeric-equality | Equality between integer `3` and floating point `3.0` | integer converts for numeric comparison | equal | explicit conversion required between concrete types | concrete typed values require matching types | equal under numeric equality | split | Follow C numeric conversion and compare exact represented values | `3 == 3.0` is true; `9007199254740993` is never rounded through floating point | reject a comparison when exact conversion cannot be represented | runtimec principle 7 | +| character-result | A character-producing operation returns one language value | `char` is an integer type | one-character string | `char` is a Unicode scalar value | rune is an alias of `int32` | one-code-unit string | split | Follow Python and V8/TypeScript: return a string value | code point U+0041 returns `"A"` | reject an invalid Unicode scalar value | runtimec principle 7 | +| read-write-alias | One call reads and writes the same storage through separate parameters | pointer aliasing can expose writes to later reads | object aliasing exposes mutation | explicit borrowing controls aliasing | slice aliasing exposes writes | object aliasing exposes mutation | split | RWIR permits declared read/write aliasing; later reads observe ordered writes | bind `a` and `a_out` to one array during in-place quicksort | undeclared aliasing returns `RUNTIMEC_STATUS_INVALID` | RWIR Read/Write Alias Rule | + +## Required workflow + +1. Add one complete row with a stable Decision value. +2. Record all five language behaviors; `unknown` and placeholder text are forbidden. +3. Choose `consensus` or `split` and state the exact kvlang behavior. +4. Add a boundary fixture and an invalid-input result. +5. Add `behavior-decision: ` beside the specification or implementation. +6. Only then add executable semantics. + +Changing an established row is a language change. The same change must update fixtures and +its issue or design record; silent reinterpretation is forbidden. diff --git a/runtimec/specification/rwir_catalog.def b/runtimec/specification/rwir_catalog.def new file mode 100644 index 00000000..667ec8de --- /dev/null +++ b/runtimec/specification/rwir_catalog.def @@ -0,0 +1,13 @@ +/* + * 组件:specification/rwir_catalog.def + * 作用:RWIR 操作结构的唯一 manifest 输入。 + * 联系:每条操作只能引用 five-language-behavior-matrix.md 已裁决的行为; + * vmkv、vmbin 与 vmjit 的生成表必须来自本文件。 + * 约束:本文件不重新定义语言行为,不保存执行策略,不冻结 BinRWIR 编码。 + * 每条记录前必须写 behavior-decision 标记;当前 scaffold 不定义记录。 + */ +#ifndef RUNTIMEC_RWIR_OPERATION +#error "Define RUNTIMEC_RWIR_OPERATION before including rwir_catalog.def" +#endif + +/* The scaffold defines no RWIR operation records. */ diff --git a/runtimec/specification/scalar_operations.def b/runtimec/specification/scalar_operations.def new file mode 100644 index 00000000..6ce36b9a --- /dev/null +++ b/runtimec/specification/scalar_operations.def @@ -0,0 +1,13 @@ +/* + * 组件:specification/scalar_operations.def + * 作用:已裁决语义规则到标量执行族的唯一映射输入。 + * 联系:vmbin 解释器与 vmjit 必须从同一份生成结果消费此映射。 + * 约束:不得在此文件发明语言行为;five-language-behavior-matrix.md 是唯一 + * 行为事实源。每条记录前必须写 behavior-decision 标记;当前 scaffold + * 不定义标量操作记录。 + */ +#ifndef RUNTIMEC_SCALAR_OPERATION +#error "Define RUNTIMEC_SCALAR_OPERATION before including scalar_operations.def" +#endif + +/* The scaffold defines no scalar operation records. */ diff --git a/runtimec/tests/CMakeLists.txt b/runtimec/tests/CMakeLists.txt new file mode 100644 index 00000000..ce99c298 --- /dev/null +++ b/runtimec/tests/CMakeLists.txt @@ -0,0 +1,90 @@ +# runtimec scaffold acceptance tests. The public surface is one header and one +# structured interface; no historical header or symbol is accepted. +function(runtimec_test_warnings target_name) + if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang|AppleClang") + target_compile_options(${target_name} PRIVATE + -Wall -Wextra -Wpedantic -Werror) + elseif(MSVC) + target_compile_options(${target_name} PRIVATE /W4 /WX) + endif() +endfunction() + +add_executable(runtimec_headers_c_test public_headers_c_test.c) +target_compile_features(runtimec_headers_c_test PRIVATE c_std_11) +target_include_directories(runtimec_headers_c_test PRIVATE + "${RUNTIMEC_INCLUDE_DIRECTORY}") +runtimec_test_warnings(runtimec_headers_c_test) +add_test(NAME runtimec.headers.c COMMAND runtimec_headers_c_test) +set_tests_properties(runtimec.headers.c PROPERTIES + LABELS "runtimec;scaffold;headers") + +add_executable(runtimec_contracts_test contracts_test.c) +target_compile_features(runtimec_contracts_test PRIVATE c_std_11) +target_include_directories(runtimec_contracts_test PRIVATE + "${CMAKE_CURRENT_SOURCE_DIR}/.." + "${RUNTIMEC_INCLUDE_DIRECTORY}") +target_link_libraries(runtimec_contracts_test PRIVATE + runtimec_contract runtimec_binrwir runtimec_vmbin) +runtimec_test_warnings(runtimec_contracts_test) +add_test(NAME runtimec.contracts COMMAND runtimec_contracts_test) +set_tests_properties(runtimec.contracts PROPERTIES + LABELS "runtimec;scaffold;contracts") + +add_executable(runtimec_fail_closed_test stub_fail_closed_test.c) +target_compile_features(runtimec_fail_closed_test PRIVATE c_std_11) +target_include_directories(runtimec_fail_closed_test PRIVATE + "${RUNTIMEC_INCLUDE_DIRECTORY}") +target_link_libraries(runtimec_fail_closed_test PRIVATE + kvlang_runtimec_scaffold) +runtimec_test_warnings(runtimec_fail_closed_test) +add_test(NAME runtimec.fail_closed COMMAND runtimec_fail_closed_test) +set_tests_properties(runtimec.fail_closed PROPERTIES + LABELS "runtimec;scaffold") + +include(CheckLanguage) +check_language(CXX) +if(CMAKE_CXX_COMPILER) + enable_language(CXX) + add_executable(runtimec_headers_cplusplus_test + public_headers_cplusplus_test.cpp) + target_compile_features(runtimec_headers_cplusplus_test PRIVATE cxx_std_17) + target_include_directories(runtimec_headers_cplusplus_test PRIVATE + "${RUNTIMEC_INCLUDE_DIRECTORY}") + if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang") + target_compile_options(runtimec_headers_cplusplus_test PRIVATE + -Wall -Wextra -Wpedantic -Werror) + endif() + add_test(NAME runtimec.headers.cplusplus + COMMAND runtimec_headers_cplusplus_test) + set_tests_properties(runtimec.headers.cplusplus PROPERTIES + LABELS "runtimec;scaffold;headers") +endif() + +find_package(Python3 COMPONENTS Interpreter REQUIRED) +add_test(NAME runtimec.architecture.layers + COMMAND "${Python3_EXECUTABLE}" + "${CMAKE_CURRENT_SOURCE_DIR}/../tools/architecture/check_layers.py" + --source-root "${CMAKE_CURRENT_SOURCE_DIR}/../..") +add_test(NAME runtimec.architecture.names + COMMAND "${Python3_EXECUTABLE}" + "${CMAKE_CURRENT_SOURCE_DIR}/../tools/architecture/check_names.py" + --source-root "${CMAKE_CURRENT_SOURCE_DIR}/../..") +add_test(NAME runtimec.architecture.behavior_matrix + COMMAND "${Python3_EXECUTABLE}" + "${CMAKE_CURRENT_SOURCE_DIR}/../tools/architecture/check_behavior_matrix.py" + --source-root "${CMAKE_CURRENT_SOURCE_DIR}/../..") +set_tests_properties( + runtimec.architecture.layers + runtimec.architecture.names + runtimec.architecture.behavior_matrix + PROPERTIES LABELS "runtimec;scaffold;architecture") + +if(UNIX) + add_test(NAME runtimec.interface.exports + COMMAND "${Python3_EXECUTABLE}" + "${CMAKE_CURRENT_SOURCE_DIR}/../tools/architecture/check_exports.py" + --library "$" + --manifest "${CMAKE_CURRENT_SOURCE_DIR}/../interface/exports.txt") + set_tests_properties(runtimec.interface.exports PROPERTIES + LABELS "runtimec;scaffold;interface") +endif() diff --git a/runtimec/tests/contracts_test.c b/runtimec/tests/contracts_test.c new file mode 100644 index 00000000..26e1d77f --- /dev/null +++ b/runtimec/tests/contracts_test.c @@ -0,0 +1,69 @@ +/* Freeze only the compact cross-component contracts chosen by the design. */ + +#include +#include + +#include + +#include "vmbin/binding.h" +#include "vmbin/exit.h" +#include "vmbin/instruction.h" +#include "vmbin/program.h" +#include "vmbin/reference.h" +#include "vmbin/signature.h" +#include "vmbin/value.h" + +_Static_assert(RUNTIMEC_STATUS_SUCCESS == 0, "success must remain zero"); +_Static_assert(RUNTIMEC_STATUS_YIELD == 1, "yield status changed"); +_Static_assert(RUNTIMEC_STATUS_WAIT == 2, "wait status changed"); +_Static_assert(RUNTIMEC_STATUS_FALLBACK == 3, "fallback status changed"); +_Static_assert(RUNTIMEC_STATUS_UNSUPPORTED == 4, "unsupported status changed"); +_Static_assert(RUNTIMEC_STATUS_NOT_IMPLEMENTED == 5, + "not-implemented status changed"); +_Static_assert(RUNTIMEC_STATUS_INVALID == 6, "invalid status changed"); +_Static_assert(RUNTIMEC_STATUS_OUT_OF_MEMORY == 7, + "out-of-memory status changed"); +_Static_assert(RUNTIMEC_STATUS_ERROR == 8, "error status changed"); +_Static_assert(RUNTIMEC_STATUS_INSUFFICIENT_CAPACITY == 9, + "insufficient-capacity status changed"); + +_Static_assert(sizeof(vmbin_reference_t) == 4U, + "BinRWIR references must remain four bytes"); +_Static_assert(sizeof(vmbin_alias_rule_t) == 8U, + "alias rules must remain eight bytes"); +_Static_assert(sizeof(vmbin_instruction_t) == 16U, + "BinRWIR instructions must remain sixteen bytes"); +_Static_assert(sizeof(vmbin_register_descriptor_t) == 16U, + "register descriptors must remain sixteen bytes"); +_Static_assert(sizeof(vmbin_literal_descriptor_t) == 16U, + "literal descriptors must remain sixteen bytes"); +_Static_assert(sizeof(vmbin_callsite_t) == 16U, + "callsites must remain sixteen bytes"); +_Static_assert(sizeof(vmbin_call_alias_mapping_t) == 8U, + "call alias mappings must remain eight bytes"); +_Static_assert(sizeof(vmbin_value_slot_t) == 32U, + "value slots must remain thirty-two bytes"); +_Static_assert(sizeof(vmbin_cell_t) == 64U, + "canonical cells must remain sixty-four bytes"); +_Static_assert(sizeof(vmbin_exit_t) == 48U, + "structured exits must remain forty-eight bytes"); + +static int plain_data_copy_round_trip(void) { + const vmbin_value_slot_t initial_value = {0}; + const vmbin_exit_t initial_exit = {0}; + vmbin_value_slot_t copied_value; + vmbin_exit_t copied_exit; + + memcpy(&copied_value, &initial_value, sizeof(copied_value)); + memcpy(&copied_exit, &initial_exit, sizeof(copied_exit)); + return memcmp(&copied_value, &initial_value, sizeof(copied_value)) == 0 && + memcmp(&copied_exit, &initial_exit, sizeof(copied_exit)) == 0 + ? 0 + : 1; +} + +int main(void) { + kvlang_runtime_t *opaque_runtime = NULL; + (void)opaque_runtime; + return plain_data_copy_round_trip(); +} diff --git a/runtimec/tests/public_headers_c_test.c b/runtimec/tests/public_headers_c_test.c new file mode 100644 index 00000000..e3fcef75 --- /dev/null +++ b/runtimec/tests/public_headers_c_test.c @@ -0,0 +1,30 @@ +/* The only public C header must expose the structured runtimec interface. */ + +#include + +#define RUNTIMEC_ASSERT_FUNCTION_TYPE(function_name, function_pointer_type) \ + _Static_assert(_Generic(&(function_name), function_pointer_type: 1, \ + default: 0), \ + "unexpected declaration for " #function_name) + +typedef runtimec_status_t (*runtimec_create_function)( + const kvlang_runtime_create_request_t *, kvlang_runtime_t **, + kvlang_runtime_error_t *); +typedef runtimec_status_t (*runtimec_destroy_function)( + kvlang_runtime_t *, kvlang_runtime_error_t *); +typedef runtimec_status_t (*runtimec_execute_function)( + kvlang_runtime_t *, const kvlang_runtime_execute_request_t *, + kvlang_runtime_execute_result_t *, kvlang_runtime_error_t *); + +RUNTIMEC_ASSERT_FUNCTION_TYPE(kvlang_runtime_create, runtimec_create_function); +RUNTIMEC_ASSERT_FUNCTION_TYPE(kvlang_runtime_destroy, runtimec_destroy_function); +RUNTIMEC_ASSERT_FUNCTION_TYPE(kvlang_runtime_execute, runtimec_execute_function); + +_Static_assert(RUNTIMEC_STATUS_SUCCESS == 0, + "the only successful status must remain zero"); +_Static_assert(sizeof(kvlang_runtime_t *) == sizeof(void *), + "the runtime handle must remain opaque and pointer-sized"); + +int main(void) { + return 0; +} diff --git a/runtimec/tests/public_headers_cplusplus_test.cpp b/runtimec/tests/public_headers_cplusplus_test.cpp new file mode 100644 index 00000000..5f16cfcd --- /dev/null +++ b/runtimec/tests/public_headers_cplusplus_test.cpp @@ -0,0 +1,25 @@ +/* The C interface must be directly consumable from C++17. */ + +#include + +#include + +static_assert(std::is_same_v< + decltype(&kvlang_runtime_create), + runtimec_status_t (*)(const kvlang_runtime_create_request_t *, + kvlang_runtime_t **, + kvlang_runtime_error_t *)>); +static_assert(std::is_same_v< + decltype(&kvlang_runtime_destroy), + runtimec_status_t (*)(kvlang_runtime_t *, + kvlang_runtime_error_t *)>); +static_assert(std::is_same_v< + decltype(&kvlang_runtime_execute), + runtimec_status_t (*)(kvlang_runtime_t *, + const kvlang_runtime_execute_request_t *, + kvlang_runtime_execute_result_t *, + kvlang_runtime_error_t *)>); + +int main() { + return 0; +} diff --git a/runtimec/tests/stub_fail_closed_test.c b/runtimec/tests/stub_fail_closed_test.c new file mode 100644 index 00000000..15c6e691 --- /dev/null +++ b/runtimec/tests/stub_fail_closed_test.c @@ -0,0 +1,100 @@ +/* The unimplemented public interface must fail without producing output. */ + +#include +#include +#include + +#include + +static int failures; + +#define RUNTIMEC_EXPECT(condition) \ + do { \ + if (!(condition)) { \ + fprintf(stderr, "%s:%d: expectation failed: %s\n", __FILE__, \ + __LINE__, #condition); \ + ++failures; \ + } \ + } while (0) + +static kvlang_runtime_error_t prepare_error(char *message, size_t capacity) { + kvlang_runtime_error_t error = {0}; + error.message.data = message; + error.message.capacity = capacity; + return error; +} + +int main(void) { + char error_message[128] = "dirty"; + char value[16] = "dirty"; + char program_counter[16] = "dirty"; + kvlang_runtime_error_t error = prepare_error( + error_message, sizeof(error_message)); + kvlang_runtime_t *runtime = (kvlang_runtime_t *)(uintptr_t)1U; + kvlang_runtime_t *created_runtime = runtime; + kvlang_runtime_create_request_t create_request = {"shared-memory://test"}; + const char *arguments[] = {"value"}; + kvlang_runtime_execute_request_t execute_request = { + KVLANG_RUNTIME_ENTRY_FUNCTION, "example", arguments, 1U, + }; + kvlang_runtime_execute_result_t result = { + {value, sizeof(value), 5U, 5U}, + {program_counter, sizeof(program_counter), 5U, 5U}, + }; + + RUNTIMEC_EXPECT(kvlang_runtime_create( + &create_request, &created_runtime, &error) == + RUNTIMEC_STATUS_NOT_IMPLEMENTED); + RUNTIMEC_EXPECT(created_runtime == NULL); + RUNTIMEC_EXPECT(error.status == RUNTIMEC_STATUS_NOT_IMPLEMENTED); + RUNTIMEC_EXPECT(error.message.length != 0U); + + { + char small_error_message[4] = {'x', 'y', 'z', '\0'}; + kvlang_runtime_error_t small_error = prepare_error( + small_error_message, sizeof(small_error_message)); + created_runtime = runtime; + RUNTIMEC_EXPECT(kvlang_runtime_create( + &create_request, &created_runtime, &small_error) == + RUNTIMEC_STATUS_INSUFFICIENT_CAPACITY); + RUNTIMEC_EXPECT(created_runtime == NULL); + RUNTIMEC_EXPECT(small_error.status == + RUNTIMEC_STATUS_INSUFFICIENT_CAPACITY); + RUNTIMEC_EXPECT(small_error.operation_status == + RUNTIMEC_STATUS_NOT_IMPLEMENTED); + RUNTIMEC_EXPECT(small_error.message.length == 0U); + RUNTIMEC_EXPECT(small_error.message.required_length >= + sizeof(small_error_message)); + RUNTIMEC_EXPECT(small_error_message[0] == '\0'); + RUNTIMEC_EXPECT(small_error_message[1] == 'y'); + RUNTIMEC_EXPECT(small_error_message[2] == 'z'); + } + + error = prepare_error(error_message, sizeof(error_message)); + strcpy(value, "dirty"); + strcpy(program_counter, "dirty"); + result.value.length = 5U; + result.value.required_length = 5U; + result.program_counter.length = 5U; + result.program_counter.required_length = 5U; + RUNTIMEC_EXPECT(kvlang_runtime_execute( + runtime, &execute_request, &result, &error) == + RUNTIMEC_STATUS_NOT_IMPLEMENTED); + RUNTIMEC_EXPECT(result.value.length == 0U); + RUNTIMEC_EXPECT(result.value.required_length == 0U); + RUNTIMEC_EXPECT(value[0] == '\0'); + RUNTIMEC_EXPECT(result.program_counter.length == 0U); + RUNTIMEC_EXPECT(result.program_counter.required_length == 0U); + RUNTIMEC_EXPECT(program_counter[0] == '\0'); + + error = prepare_error(error_message, sizeof(error_message)); + RUNTIMEC_EXPECT(kvlang_runtime_destroy(runtime, &error) == + RUNTIMEC_STATUS_NOT_IMPLEMENTED); + RUNTIMEC_EXPECT(error.status == RUNTIMEC_STATUS_NOT_IMPLEMENTED); + + if (failures != 0) { + fprintf(stderr, "stub_fail_closed_test: %d failure(s)\n", failures); + return 1; + } + return 0; +} diff --git a/runtimec/tools/architecture/check_behavior_matrix.py b/runtimec/tools/architecture/check_behavior_matrix.py new file mode 100644 index 00000000..307fdc38 --- /dev/null +++ b/runtimec/tools/architecture/check_behavior_matrix.py @@ -0,0 +1,166 @@ +#!/usr/bin/env python3 +"""Require five-language decisions before runtimec language semantics.""" + +from __future__ import annotations + +import argparse +import re +import sys +from dataclasses import dataclass +from pathlib import Path + + +EXPECTED_COLUMNS = ( + "Decision", "Behavior", "C", "Python", "Rust", "Go", "V8/TypeScript", + "Agreement", "kvlang decision", "Boundary fixture", "Invalid input", + "Design record", +) +DECISION_PATTERN = re.compile(r"^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$") +MARKER_PATTERN = re.compile(r"behavior-decision:\s*([a-z][a-z0-9-]*)") +MANIFEST_ENTRY_PATTERN = re.compile( + r"^\s*RUNTIMEC_[A-Z0-9_]*(?:OP|OPERATION)\s*\(" +) +PLACEHOLDER_PATTERN = re.compile(r"\b(?:todo|tbd|unknown|placeholder)\b", re.IGNORECASE) +SCANNED_PRODUCT_DIRECTORIES = ("specification", "vmkv", "vmbin", "vmjit") + + +@dataclass(frozen=True, order=True) +class Finding: + path: str + line: int + rule: str + detail: str + + def render(self) -> str: + return f"{self.path}:{self.line}: [{self.rule}] {self.detail}" + + +def parse_arguments(command_arguments: list[str]) -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--source-root", type=Path, + default=Path(__file__).resolve().parents[3], + help="repository source root, or the runtimec directory itself", + ) + parser.add_argument("--quiet", action="store_true", help="suppress success output") + return parser.parse_args(command_arguments) + + +def locate_runtimec(source_root: Path) -> tuple[Path, Path]: + source_root = source_root.resolve() + return ((source_root.parent, source_root) if source_root.name == "runtimec" + else (source_root, source_root / "runtimec")) + + +def display(path: Path, repository_root: Path) -> str: + try: + return path.resolve().relative_to(repository_root).as_posix() + except ValueError: + return path.as_posix() + + +def table_cells(line: str) -> tuple[str, ...]: + return tuple(cell.strip() for cell in line.strip().strip("|").split("|")) + + +def read_decisions( + matrix_path: Path, repository_root: Path, +) -> tuple[set[str], list[Finding]]: + findings: list[Finding] = [] + matrix_display = display(matrix_path, repository_root) + if not matrix_path.is_file(): + return set(), [Finding(matrix_display, 1, "missing-matrix", "matrix is required")] + lines = matrix_path.read_text(encoding="utf-8").splitlines() + if "" not in lines: + findings.append(Finding(matrix_display, 1, "missing-version", "version 1 marker is required")) + header_index = next( + (index for index, line in enumerate(lines) if table_cells(line) == EXPECTED_COLUMNS), None, + ) + if header_index is None: + return set(), findings + [Finding( + matrix_display, 1, "invalid-header", "required twelve-column table is missing", + )] + + decisions: set[str] = set() + for index in range(header_index + 2, len(lines)): + line = lines[index] + if not line.startswith("|"): + break + cells = table_cells(line) + line_number = index + 1 + if len(cells) != len(EXPECTED_COLUMNS): + findings.append(Finding(matrix_display, line_number, "column-count", + f"expected {len(EXPECTED_COLUMNS)}, found {len(cells)}")) + continue + decision = cells[0] + if not DECISION_PATTERN.fullmatch(decision): + findings.append(Finding(matrix_display, line_number, "invalid-decision", decision)) + elif decision in decisions: + findings.append(Finding(matrix_display, line_number, "duplicate-decision", decision)) + else: + decisions.add(decision) + for column, cell in zip(EXPECTED_COLUMNS, cells): + if not cell or PLACEHOLDER_PATTERN.search(cell): + findings.append(Finding(matrix_display, line_number, "incomplete-cell", column)) + if cells[7] not in {"consensus", "split"}: + findings.append(Finding(matrix_display, line_number, "invalid-agreement", cells[7])) + if not decisions: + findings.append(Finding(matrix_display, header_index + 1, "empty-matrix", + "at least one decision is required")) + return decisions, findings + + +def iter_product_files(runtimec_root: Path): + for directory_name in SCANNED_PRODUCT_DIRECTORIES: + directory = runtimec_root / directory_name + if directory.is_dir(): + for path in sorted(directory.rglob("*")): + if path.is_file() and path.suffix in {".c", ".h", ".def"}: + yield path + + +def audit_markers( + runtimec_root: Path, repository_root: Path, decisions: set[str], +) -> tuple[list[Finding], int]: + findings: list[Finding] = [] + scanned = 0 + for path in iter_product_files(runtimec_root): + scanned += 1 + lines = path.read_text(encoding="utf-8").splitlines() + path_display = display(path, repository_root) + for index, line in enumerate(lines): + for match in MARKER_PATTERN.finditer(line): + if match.group(1) not in decisions: + findings.append(Finding(path_display, index + 1, "unknown-decision", + match.group(1))) + if (path.suffix == ".def" and MANIFEST_ENTRY_PATTERN.search(line) + and "INVALID" not in line): + context = "\n".join(lines[max(0, index - 2):index + 1]) + if MARKER_PATTERN.search(context) is None: + findings.append(Finding( + path_display, index + 1, "manifest-before-matrix", + "add a behavior-decision marker before this entry", + )) + return findings, scanned + + +def main(command_arguments: list[str] | None = None) -> int: + arguments = parse_arguments(command_arguments or sys.argv[1:]) + repository_root, runtimec_root = locate_runtimec(arguments.source_root) + matrix_path = runtimec_root / "specification" / \ + "five-language-behavior-matrix.md" + decisions, findings = read_decisions(matrix_path, repository_root) + marker_findings, scanned = audit_markers(runtimec_root, repository_root, decisions) + findings.extend(marker_findings) + for finding in sorted(set(findings)): + print(finding.render()) + if findings: + print(f"check_behavior_matrix: FAIL ({len(set(findings))} finding(s))") + return 1 + if not arguments.quiet: + print(f"check_behavior_matrix: OK ({len(decisions)} decisions, {scanned} files scanned)") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/runtimec/tools/architecture/check_exports.py b/runtimec/tools/architecture/check_exports.py new file mode 100644 index 00000000..897d1200 --- /dev/null +++ b/runtimec/tools/architecture/check_exports.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +"""Require the dynamic library export set to equal interface/exports.txt.""" + +from __future__ import annotations + +import argparse +import platform +import subprocess +from pathlib import Path + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--library", type=Path, required=True) + parser.add_argument("--manifest", type=Path, required=True) + arguments = parser.parse_args() + + expected = { + line.strip() + for line in arguments.manifest.read_text(encoding="utf-8").splitlines() + if line.strip() and not line.lstrip().startswith("#") + } + system = platform.system() + command = (["nm", "-gU", str(arguments.library)] if system == "Darwin" + else ["nm", "-D", "--defined-only", str(arguments.library)]) + output = subprocess.run( + command, check=True, text=True, stdout=subprocess.PIPE, + ).stdout + actual = set() + for line in output.splitlines(): + if line.strip(): + symbol = line.split()[-1] + if system == "Darwin" and symbol.startswith("_"): + symbol = symbol[1:] + actual.add(symbol) + + missing = sorted(expected - actual) + extra = sorted(actual - expected) + for symbol in missing: + print(f"missing export: {symbol}") + for symbol in extra: + print(f"unexpected export: {symbol}") + if missing or extra: + return 1 + print(f"check_exports: OK ({len(actual)} symbol(s))") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/runtimec/tools/architecture/check_layers.py b/runtimec/tools/architecture/check_layers.py new file mode 100644 index 00000000..bba4abd4 --- /dev/null +++ b/runtimec/tools/architecture/check_layers.py @@ -0,0 +1,218 @@ +#!/usr/bin/env python3 +"""Enforce the single runtimec dependency trunk.""" + +from __future__ import annotations + +import argparse +import re +import sys +from dataclasses import dataclass +from pathlib import Path, PurePosixPath + + +SOURCE_SUFFIXES = {".c", ".h"} +BINRWIR_CONTRACT_FILES = { + "value.h", "reference.h", "signature.h", "instruction.h", "program.h", + "program.c", "binding.h", "frame.h", "frame.c", "exit.h", +} +PRODUCT_DIRECTORIES = ( + "include", "interface", "contract", "host", "vmbin", "vmkv", + "vmjit", "engine", "generated", +) +KNOWN_LAYERS = { + "public", "contract", "host", "binrwir", "vmbin", "vmkv", "vmjit", + "engine", "interface", +} +ALLOWED_DEPENDENCIES = { + "public": {"public"}, + "contract": {"public", "contract"}, + "host": {"contract", "host"}, + "binrwir": {"contract", "binrwir"}, + "vmbin": {"contract", "binrwir", "vmbin"}, + "vmkv": {"contract", "binrwir", "vmkv"}, + "vmjit": {"contract", "binrwir", "vmjit"}, + "engine": { + "contract", "host", "binrwir", "vmbin", "vmkv", "vmjit", "engine", + }, + "interface": {"public", "contract", "engine", "interface"}, +} +INCLUDE_PATTERN = re.compile(r'^\s*#\s*include\s*([<"])([^>"]+)[>"]') +FORBIDDEN_TREE_PATTERN = re.compile(r"(?:^|/)(?:runtime|runtimec2)(?:/|$)") +INTERNAL_PREFIXES = { + "contract", "host", "vmbin", "vmkv", "vmjit", "engine", "interface", +} +EXECUTION_LAYERS = {"vmkv", "vmbin", "vmjit"} + + +@dataclass(frozen=True, order=True) +class Finding: + path: str + line: int + rule: str + detail: str + + def render(self) -> str: + return f"{self.path}:{self.line}: [{self.rule}] {self.detail}" + + +def parse_arguments(command_arguments: list[str]) -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--source-root", type=Path, + default=Path(__file__).resolve().parents[3], + help="repository source root, or the runtimec directory itself", + ) + parser.add_argument("--quiet", action="store_true", help="suppress success output") + return parser.parse_args(command_arguments) + + +def locate_runtimec(source_root: Path) -> tuple[Path, Path]: + source_root = source_root.resolve() + return ((source_root.parent, source_root) if source_root.name == "runtimec" + else (source_root, source_root / "runtimec")) + + +def relative_display(path: Path, repository_root: Path) -> str: + try: + return path.resolve().relative_to(repository_root).as_posix() + except ValueError: + return path.as_posix() + + +def layer_for_relative(relative: PurePosixPath) -> str | None: + parts = relative.parts + if not parts: + return None + if parts[0] == "include": + return "public" + if parts[0] == "interface": + return "interface" + if parts[0] == "generated": + return "contract" + if parts[0] == "vmbin" and len(parts) >= 2: + if parts[1] == "binrwir" or parts[-1] in BINRWIR_CONTRACT_FILES: + return "binrwir" + return parts[0] if parts[0] in KNOWN_LAYERS else None + + +def inferred_include_layer(token: str) -> str | None: + parts = tuple(part for part in PurePosixPath(token).parts if part not in {".", ".."}) + if not parts: + return None + if parts[0] == "kvlang": + return "public" + if parts[0] == "runtimec" and len(parts) > 1: + parts = parts[1:] + if not parts: + return None + if parts[0] == "vmbin" and len(parts) > 1: + if parts[1] == "binrwir" or parts[-1] in BINRWIR_CONTRACT_FILES: + return "binrwir" + return parts[0] if parts[0] in INTERNAL_PREFIXES else None + + +def resolve_include( + token: str, source: Path, runtimec_root: Path, repository_root: Path, +) -> Path | None: + candidates = [ + source.parent / token, runtimec_root / token, + runtimec_root / "include" / token, runtimec_root / "contract" / token, + runtimec_root / "host" / token, runtimec_root / "vmbin" / token, + runtimec_root / "vmkv" / token, runtimec_root / "vmjit" / token, + runtimec_root / "engine" / token, runtimec_root / "interface" / token, + repository_root / token, + ] + return next((candidate.resolve() for candidate in candidates if candidate.is_file()), None) + + +def iter_product_sources(runtimec_root: Path): + for directory_name in PRODUCT_DIRECTORIES: + directory = runtimec_root / directory_name + if directory.is_dir(): + for path in sorted(directory.rglob("*")): + if path.is_file() and path.suffix in SOURCE_SUFFIXES: + yield path + + +def audit(repository_root: Path, runtimec_root: Path) -> tuple[list[Finding], int]: + findings: list[Finding] = [] + scanned = 0 + for source in iter_product_sources(runtimec_root): + scanned += 1 + relative = PurePosixPath(source.relative_to(runtimec_root).as_posix()) + source_layer = layer_for_relative(relative) + display = relative_display(source, repository_root) + if source_layer is None: + findings.append(Finding(display, 1, "unknown-source-layer", + "product source has no owner")) + continue + try: + lines = source.read_text(encoding="utf-8").splitlines() + except (OSError, UnicodeError) as error: + findings.append(Finding(display, 1, "read-error", str(error))) + continue + + for line_number, line in enumerate(lines, 1): + match = INCLUDE_PATTERN.match(line) + if not match: + continue + delimiter, token = match.groups() + normalized = token.replace("\\", "/") + if FORBIDDEN_TREE_PATTERN.search(normalized): + findings.append(Finding( + display, line_number, "forbidden-tree-include", + f"{source_layer} includes deleted tree {token!r}", + )) + continue + resolved = resolve_include(token, source, runtimec_root, repository_root) + target_layer = None + if resolved is not None: + try: + target_relative = PurePosixPath( + resolved.relative_to(runtimec_root.resolve()).as_posix() + ) + except ValueError: + continue + target_layer = layer_for_relative(target_relative) + else: + target_layer = inferred_include_layer(normalized) + if delimiter == '"': + findings.append(Finding( + display, line_number, "unresolved-private-include", + f"cannot resolve private include {token!r}", + )) + if target_layer is None: + continue + if target_layer not in ALLOWED_DEPENDENCIES[source_layer]: + findings.append(Finding( + display, line_number, "forbidden-layer-edge", + f"{source_layer} -> {target_layer} via {token!r}", + )) + if (source_layer == "engine" and target_layer in EXECUTION_LAYERS + and relative.as_posix() not in {"engine/route.c", "engine/route.h"}): + findings.append(Finding( + display, line_number, "route-bypass", + f"only engine/route may depend on {target_layer}", + )) + return sorted(set(findings)), scanned + + +def main(command_arguments: list[str] | None = None) -> int: + arguments = parse_arguments(command_arguments or sys.argv[1:]) + repository_root, runtimec_root = locate_runtimec(arguments.source_root) + if not runtimec_root.is_dir(): + print(f"{runtimec_root}:1: [missing-runtimec] runtimec source directory does not exist") + return 2 + findings, scanned = audit(repository_root, runtimec_root) + for finding in findings: + print(finding.render()) + if findings: + print(f"check_layers: FAIL ({len(findings)} finding(s), {scanned} file(s) scanned)") + return 1 + if not arguments.quiet: + print(f"check_layers: OK ({scanned} file(s) scanned)") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/runtimec/tools/architecture/check_names.py b/runtimec/tools/architecture/check_names.py new file mode 100644 index 00000000..dd6039bb --- /dev/null +++ b/runtimec/tools/architecture/check_names.py @@ -0,0 +1,213 @@ +#!/usr/bin/env python3 +"""Enforce the runtimec vocabulary and reject alternate architecture paths.""" + +from __future__ import annotations + +import argparse +import re +import sys +from dataclasses import dataclass +from pathlib import Path + + +PRODUCT_DIRECTORIES = ( + "include", "interface", "contract", "host", "vmbin", "vmkv", + "vmjit", "engine", "generated", "specification", +) +TEXT_SUFFIXES = {".c", ".h", ".cmake", ".in", ".map", ".exports", ".def"} +FORBIDDEN_PATH_PARTS = { + "abi": "execution_interface", "api": "interface", "compat": "delete", + "compatibility": "delete", "docs": "documentation", "legacy": "delete", + "spec": "specification", +} +FORBIDDEN_NAMES = ( + ("old-binir-name", re.compile(r"\bbinir\b", re.IGNORECASE)), + ("old-binir-identifier", re.compile(r"\bbinir_[A-Za-z0-9_]*\b")), + ("old-runtimec2-name", re.compile(r"\bruntimec2\b")), + ("old-runtime-tree", re.compile(r"(?:^|[\"<])runtime/")), + ("old-success-name", re.compile(r"\bRUNTIMEC_STATUS_OK\b")), + ("compatibility-language", re.compile( + r"\b(?:backward|compat|compatibility|legacy|forwarding)[ _-]?(?:header|layer|path|support)?\b", + re.IGNORECASE, + )), + ("third-fast-kernel", re.compile(r"\bfast[ _-]?kernel\b", re.IGNORECASE)), + ("third-executor", re.compile( + r"\b(?:fast|quick|direct|native|optimized)[ _-]?(?:executor|interpreter|execute|runner)\b", + re.IGNORECASE, + )), + ("old-fast-operation", re.compile(r"\bfast[ _-]?op(?:eration)?\b", re.IGNORECASE)), + ("alternate-execution-window", re.compile(r"\bexecute[ _-]?window\b", re.IGNORECASE)), + ("old-vmkv-type", re.compile(r"\bVmkv\b")), + ("old-vmbin-type", re.compile(r"\bVmBin\b")), + ("ambiguous-segment-type", re.compile(r"\b(?:Segment|CodeSeg|CInsn)\b")), + ("old-native-context", re.compile(r"\b(?:NativeCtx|NativeFn)\b")), + ("old-frame-type", re.compile(r"\b(?:FrameCtx|RunResult)\b")), + ("old-runtimec2-macro", re.compile(r"\b(?:RC2|KV2)_[A-Za-z0-9_]*\b")), + ("old-runtimec2-test-name", re.compile(r"\bc2_[A-Za-z0-9_]*\b")), + ("old-codeseg-name", re.compile(r"\bcodeseg\b", re.IGNORECASE)), +) +ABBREVIATIONS = { + "abi": "binary_interface or interface", "api": "interface", + "arg": "argument", "buf": "buffer", "cfg": "control_flow_graph", + "ctx": "context", "desc": "descriptor", "dst": "destination", + "fn": "function", "id": "identifier", "impl": "implementation", + "len": "length", "op": "operation", "pc": "program_counter", + "ptr": "pointer", "ref": "reference", "req": "request", + "src": "source", "tmp": "temporary", +} +ABBREVIATION_PATTERNS = tuple( + (abbreviation, replacement, re.compile( + rf"(? str: + return f"{self.path}:{self.line}: [{self.rule}] forbidden name {self.token!r}" + + +def parse_arguments(command_arguments: list[str]) -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--source-root", type=Path, + default=Path(__file__).resolve().parents[3], + help="repository source root, or the runtimec directory itself", + ) + parser.add_argument("--quiet", action="store_true", help="suppress success output") + return parser.parse_args(command_arguments) + + +def locate_runtimec(source_root: Path) -> tuple[Path, Path]: + source_root = source_root.resolve() + return ((source_root.parent, source_root) if source_root.name == "runtimec" + else (source_root, source_root / "runtimec")) + + +def relative_display(path: Path, repository_root: Path) -> str: + try: + return path.resolve().relative_to(repository_root).as_posix() + except ValueError: + return path.as_posix() + + +def iter_product_files(runtimec_root: Path): + cmake_lists = runtimec_root / "CMakeLists.txt" + if cmake_lists.is_file(): + yield cmake_lists + for directory_name in PRODUCT_DIRECTORIES: + directory = runtimec_root / directory_name + if directory.is_dir(): + for path in sorted(directory.rglob("*")): + if path.is_file() and ( + path.suffix in TEXT_SUFFIXES or path.name == "CMakeLists.txt" + ): + yield path + + +def audit_public_headers(runtimec_root: Path, repository_root: Path) -> list[Finding]: + include_root = runtimec_root / "include" + allowed_header = include_root / "kvlang" / "runtimec.h" + return [ + Finding(relative_display(header, repository_root), 1, + "noncanonical-public-header", + header.relative_to(include_root).as_posix()) + for header in sorted(include_root.rglob("*.h")) + if header != allowed_header + ] if include_root.is_dir() else [] + + +def c_code_without_comments_or_literals(text: str) -> str: + return C_NON_CODE_PATTERN.sub( + lambda match: re.sub(r"[^\n]", " ", match.group(0)), text, + ) + + +def audit(repository_root: Path, runtimec_root: Path) -> tuple[list[Finding], int]: + findings = audit_public_headers(runtimec_root, repository_root) + scanned = 0 + for forbidden_directory in ("api", "compat", "docs", "spec"): + path = runtimec_root / forbidden_directory + if path.exists(): + findings.append(Finding(relative_display(path, repository_root), 1, + "forbidden-directory", forbidden_directory)) + + for path in iter_product_files(runtimec_root): + scanned += 1 + display = relative_display(path, repository_root) + relative_path = path.relative_to(runtimec_root) + for part in relative_path.parts: + replacement = FORBIDDEN_PATH_PARTS.get(part.lower()) + if replacement is not None: + findings.append(Finding(display, 1, "forbidden-path-name", + f"{part} -> {replacement}")) + for rule, pattern in FORBIDDEN_NAMES: + match = pattern.search(relative_path.as_posix()) + if match: + findings.append(Finding(display, 1, f"{rule}-in-path", match.group(0))) + try: + text = path.read_text(encoding="utf-8") + lines = text.splitlines() + except (OSError, UnicodeError) as error: + findings.append(Finding(display, 1, "read-error", str(error))) + continue + if path.suffix in {".c", ".h"}: + code = c_code_without_comments_or_literals(text) + for match in VOID_LIFECYCLE_PATTERN.finditer(code): + findings.append(Finding( + display, + code.count("\n", 0, match.start()) + 1, + "void-lifecycle-function", + match.group(1), + )) + for line_number, line in enumerate(lines, 1): + for rule, pattern in FORBIDDEN_NAMES: + for match in pattern.finditer(line): + findings.append(Finding(display, line_number, rule, match.group(0))) + if path.name == "CMakeLists.txt": + continue + for abbreviation, replacement, pattern in ABBREVIATION_PATTERNS: + for match in pattern.finditer(line): + findings.append(Finding( + display, line_number, + f"abbreviation-{abbreviation}-use-{replacement}", match.group(0), + )) + return sorted(set(findings)), scanned + + +def main(command_arguments: list[str] | None = None) -> int: + arguments = parse_arguments(command_arguments or sys.argv[1:]) + repository_root, runtimec_root = locate_runtimec(arguments.source_root) + if not runtimec_root.is_dir(): + print(f"{runtimec_root}:1: [missing-runtimec] runtimec source directory does not exist") + return 2 + findings, scanned = audit(repository_root, runtimec_root) + for finding in findings: + print(finding.render()) + if findings: + print(f"check_names: FAIL ({len(findings)} finding(s), {scanned} file(s) scanned)") + return 1 + if not arguments.quiet: + print(f"check_names: OK ({scanned} file(s) scanned)") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/runtimec/vmbin/binding.c b/runtimec/vmbin/binding.c new file mode 100644 index 00000000..68444157 --- /dev/null +++ b/runtimec/vmbin/binding.c @@ -0,0 +1,89 @@ +/* + * 组件:vmbin/binding 的实现 + * 作用:Cell 与 Binding 的安全重置和失败桩。 + * 约束:未实现操作不得伪造值或版本。 + */ + +#include "vmbin/binding.h" + +#include + +runtimec_status_t vmbin_cell_reset(vmbin_cell_t *cell) { + if (cell == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + memset(cell, 0, sizeof(*cell)); + return RUNTIMEC_STATUS_SUCCESS; +} + +runtimec_status_t vmbin_cell_invalidate(vmbin_cell_t *cell) { + if (cell == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_cell_query(const vmbin_cell_t *cell, + vmbin_value_slot_t *output_value, + uint64_t *output_mutation_version) { + if (output_value != NULL) { + memset(output_value, 0, sizeof(*output_value)); + } + if (output_mutation_version != NULL) { + *output_mutation_version = UINT64_MAX; + } + if (cell == NULL || output_value == NULL || + output_mutation_version == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_binding_reset(vmbin_binding_t *binding) { + if (binding == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + memset(binding, 0, sizeof(*binding)); + binding->register_identifier = VMBIN_REGISTER_IDENTIFIER_NONE; + return RUNTIMEC_STATUS_SUCCESS; +} + +runtimec_status_t vmbin_binding_bind(vmbin_binding_t *binding, + uint32_t register_identifier, + vmbin_binding_access_t access, + vmbin_cell_t *cell) { + if (binding == NULL || + register_identifier == VMBIN_REGISTER_IDENTIFIER_NONE || + (access != VMBIN_BINDING_ACCESS_READ && + access != VMBIN_BINDING_ACCESS_WRITE) || + cell == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_binding_read(vmbin_binding_t *binding, + vmbin_value_slot_t *output_value) { + if (output_value != NULL) { + memset(output_value, 0, sizeof(*output_value)); + } + if (binding == NULL || output_value == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_binding_write(vmbin_binding_t *binding, + const vmbin_value_slot_t *value) { + if (binding == NULL || value == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_binding_invalidate(vmbin_binding_t *binding) { + if (binding == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/vmbin/binding.h b/runtimec/vmbin/binding.h new file mode 100644 index 00000000..156179e7 --- /dev/null +++ b/runtimec/vmbin/binding.h @@ -0,0 +1,90 @@ +#ifndef VMBIN_BINDING_H +#define VMBIN_BINDING_H + +/* + * 组件:vmbin/binding + * 作用:Binding 将一个有方向的寄存器映射到 canonical Cell。 + * 联系:Frame 持有 Cell 与 Binding;call 按签名检查显式别名。 + * 约束:不同读写寄存器可以指向同一 Cell;Cell 可从 kvspace 重建。 + */ + +#include + +#include "contract/status.h" +#include "vmbin/value.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define VMBIN_CELL_IDENTIFIER_NONE UINT32_MAX +#define VMBIN_REGISTER_IDENTIFIER_NONE UINT32_MAX + +typedef enum vmbin_cell_state { + VMBIN_CELL_UNKNOWN = 0, + VMBIN_CELL_ABSENT = 1, + VMBIN_CELL_PRESENT = 2, + VMBIN_CELL_INVALID = 3 +} vmbin_cell_state_t; + +typedef enum vmbin_cell_flags { + VMBIN_CELL_FLAG_NONE = 0, + VMBIN_CELL_FLAG_DIRTY = 1U << 0, + VMBIN_CELL_FLAG_MATERIALIZED = 1U << 1, + VMBIN_CELL_FLAG_PINNED = 1U << 2, + VMBIN_CELL_FLAG_BORROWED = 1U << 3 +} vmbin_cell_flags_t; + +typedef enum vmbin_binding_access { + VMBIN_BINDING_ACCESS_NONE = 0, + VMBIN_BINDING_ACCESS_READ = 1U << 0, + VMBIN_BINDING_ACCESS_WRITE = 1U << 1 +} vmbin_binding_access_t; + +typedef enum vmbin_binding_flags { + VMBIN_BINDING_FLAG_NONE = 0, + VMBIN_BINDING_FLAG_PARAMETER = 1U << 0, + VMBIN_BINDING_FLAG_LOCAL = 1U << 1 +} vmbin_binding_flags_t; + +typedef struct vmbin_cell { + vmbin_value_slot_t value; /* staged 值(32 字节目标中立槽) */ + uint64_t storage_identifier; /* canonical logical storage 身份 */ + uint64_t storage_generation; /* 外部写/relocation 后变化 */ + uint64_t mutation_version; /* 写后递增,读缓存据此失效 */ + uint16_t state; /* vmbin_cell_state_t */ + uint16_t flags; /* vmbin_cell_flags_t(dirty/pinned 等) */ + uint32_t reserved_32_bits; +} vmbin_cell_t; + +typedef struct vmbin_binding { + vmbin_cell_t *cell; /* canonical Cell;可被多个 Binding 共享 */ + uint64_t observed_version; /* 上次读到的 mutation_version */ + uint32_t register_identifier; /* 程序中有方向的寄存器标识符 */ + uint16_t access; /* vmbin_binding_access_t */ + uint16_t flags; /* vmbin_binding_flags_t */ +} vmbin_binding_t; + +runtimec_status_t vmbin_cell_reset(vmbin_cell_t *cell); +runtimec_status_t vmbin_cell_invalidate(vmbin_cell_t *cell); +runtimec_status_t vmbin_cell_query(const vmbin_cell_t *cell, + vmbin_value_slot_t *output_value, + uint64_t *output_mutation_version); +runtimec_status_t vmbin_binding_reset(vmbin_binding_t *binding); +runtimec_status_t vmbin_binding_bind(vmbin_binding_t *binding, + uint32_t register_identifier, + vmbin_binding_access_t access, + vmbin_cell_t *cell); +runtimec_status_t vmbin_binding_read(vmbin_binding_t *binding, + vmbin_value_slot_t *output_value); +runtimec_status_t vmbin_binding_write(vmbin_binding_t *binding, + const vmbin_value_slot_t *value); +runtimec_status_t vmbin_binding_invalidate(vmbin_binding_t *binding); +_Static_assert(sizeof(vmbin_cell_t) == 64U, + "vmbin cells must remain 64 bytes"); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmbin/builtin/registry.c b/runtimec/vmbin/builtin/registry.c new file mode 100644 index 00000000..4e5748e2 --- /dev/null +++ b/runtimec/vmbin/builtin/registry.c @@ -0,0 +1,54 @@ +/* + * 组件:vmbin/builtin/registry 的实现 + * 作用:初始化只读条目表;查找业务保持失败关闭。 + */ + +#include "registry.h" + +#include + +runtimec_status_t +vmbin_builtin_registry_initialize(vmbin_builtin_registry_t *registry, + const vmbin_builtin_entry_t *entries, + size_t entry_count) { + if (registry == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + memset(registry, 0, sizeof(*registry)); + if (entry_count != 0U && entries == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + registry->entries = entries; + registry->entry_count = entry_count; + return RUNTIMEC_STATUS_SUCCESS; +} + +runtimec_status_t vmbin_builtin_registry_reset( + vmbin_builtin_registry_t *registry) { + if (registry == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + memset(registry, 0, sizeof(*registry)); + return RUNTIMEC_STATUS_SUCCESS; +} + +runtimec_status_t vmbin_builtin_registry_destroy( + vmbin_builtin_registry_t *registry) { + return vmbin_builtin_registry_reset(registry); +} + +runtimec_status_t +vmbin_builtin_registry_find(const vmbin_builtin_registry_t *registry, + uint32_t builtin_identifier, + const vmbin_builtin_entry_t **output_entry) { + (void)registry; + (void)builtin_identifier; + if (output_entry != NULL) { + *output_entry = NULL; + } + if (registry == NULL || builtin_identifier == VMBIN_IDENTIFIER_NONE || + output_entry == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/vmbin/builtin/registry.h b/runtimec/vmbin/builtin/registry.h new file mode 100644 index 00000000..862ee86d --- /dev/null +++ b/runtimec/vmbin/builtin/registry.h @@ -0,0 +1,64 @@ +#ifndef VMBIN_BUILTIN_REGISTRY_H +#define VMBIN_BUILTIN_REGISTRY_H + +/* + * 组件:vmbin/builtin/registry + * 作用:将 builtin 标识符映射到唯一处理函数。 + * 联系:interpreter 调用;vmjit 可以内联或退出,但不另建语义实现。 + * 约束:Registry 不拥有条目或处理函数,生命周期属于 session。 + */ + +#include +#include + +#include "contract/status.h" +#include "vmbin/exit.h" +#include "vmbin/frame.h" +#include "vmbin/instruction.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef runtimec_status_t +(*vmbin_builtin_handler_function_t)( + vmbin_frame_t *frame, + const vmbin_instruction_view_t *instruction, + vmbin_exit_t *output_exit); + +typedef enum vmbin_builtin_flags { + VMBIN_BUILTIN_FLAG_NONE = 0, + VMBIN_BUILTIN_FLAG_EFFECT = 1U << 0, + VMBIN_BUILTIN_FLAG_MAY_YIELD = 1U << 1, + VMBIN_BUILTIN_FLAG_REQUIRES_MATERIALIZATION = 1U << 2 +} vmbin_builtin_flags_t; + +typedef struct vmbin_builtin_entry { + uint32_t builtin_identifier; + uint32_t flags; + vmbin_builtin_handler_function_t handler; +} vmbin_builtin_entry_t; + +typedef struct vmbin_builtin_registry { + const vmbin_builtin_entry_t *entries; + size_t entry_count; +} vmbin_builtin_registry_t; + +runtimec_status_t +vmbin_builtin_registry_initialize(vmbin_builtin_registry_t *registry, + const vmbin_builtin_entry_t *entries, + size_t entry_count); +runtimec_status_t vmbin_builtin_registry_reset( + vmbin_builtin_registry_t *registry); +runtimec_status_t vmbin_builtin_registry_destroy( + vmbin_builtin_registry_t *registry); +runtimec_status_t +vmbin_builtin_registry_find(const vmbin_builtin_registry_t *registry, + uint32_t builtin_identifier, + const vmbin_builtin_entry_t **output_entry); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmbin/call.c b/runtimec/vmbin/call.c new file mode 100644 index 00000000..bcd88fbe --- /dev/null +++ b/runtimec/vmbin/call.c @@ -0,0 +1,71 @@ +/* + * 组件:vmbin/call 的实现 + * 作用:调用绑定与进出 Frame 的失败桩。 + * 约束:未实现必须同时返回结构化错误和未实现状态。 + */ + +#include "vmbin/call.h" + +static runtimec_status_t vmbin_call_unimplemented( + vmbin_exit_t *output_exit) { + if (output_exit != NULL) { + *output_exit = (vmbin_exit_t){0}; + output_exit->kind = VMBIN_EXIT_ERROR; + output_exit->status = RUNTIMEC_STATUS_NOT_IMPLEMENTED; + output_exit->logical_program_counter = VMBIN_PROGRAM_COUNTER_NONE; + output_exit->resume_logical_program_counter = + VMBIN_PROGRAM_COUNTER_NONE; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_call_binding_create( + const vmbin_frame_t *caller, + const vmbin_program_t *callee, + const vmbin_call_request_t *request, + const runtimec_allocator_t *allocator, + vmbin_call_binding_t **output_binding) { + (void)caller; + (void)callee; + (void)request; + (void)allocator; + if (output_binding != NULL) { + *output_binding = NULL; + } + if (caller == NULL || callee == NULL || request == NULL || + request->callsite_identifier == VMBIN_IDENTIFIER_NONE || + allocator == NULL || output_binding == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} +runtimec_status_t vmbin_call_binding_destroy(vmbin_call_binding_t *binding) { + if (binding == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} +runtimec_status_t vmbin_call_enter( + vmbin_frame_t *caller, + vmbin_frame_t *callee, + const vmbin_call_binding_t *binding, + vmbin_exit_t *output_exit) { + runtimec_status_t status = vmbin_call_unimplemented(output_exit); + if (caller == NULL || callee == NULL || binding == NULL || + output_exit == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return status; +} +runtimec_status_t vmbin_call_return( + vmbin_frame_t *caller, + const vmbin_frame_t *callee, + const vmbin_call_binding_t *binding, + vmbin_exit_t *output_exit) { + runtimec_status_t status = vmbin_call_unimplemented(output_exit); + if (caller == NULL || callee == NULL || binding == NULL || + output_exit == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return status; +} diff --git a/runtimec/vmbin/call.h b/runtimec/vmbin/call.h new file mode 100644 index 00000000..bd8257f5 --- /dev/null +++ b/runtimec/vmbin/call.h @@ -0,0 +1,51 @@ +#ifndef VMBIN_CALL_H +#define VMBIN_CALL_H + +/* + * 组件:vmbin/call + * 作用:按被调用 Program 的签名建立调用绑定并传递读写参数。 + * 联系:engine route 驱动调用;签名是别名策略的唯一来源。 + * 约束:调用不得重复已经提交的副作用。 + */ + +#include + +#include "contract/allocator.h" +#include "contract/status.h" +#include "vmbin/exit.h" +#include "vmbin/frame.h" +#include "vmbin/program.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct vmbin_call_binding vmbin_call_binding_t; +typedef struct vmbin_call_request { + uint32_t callsite_identifier; + uint32_t return_logical_program_counter; +} vmbin_call_request_t; + +runtimec_status_t vmbin_call_binding_create( + const vmbin_frame_t *caller, + const vmbin_program_t *callee, + const vmbin_call_request_t *request, + const runtimec_allocator_t *allocator, + vmbin_call_binding_t **output_binding); +runtimec_status_t vmbin_call_binding_destroy(vmbin_call_binding_t *binding); +runtimec_status_t vmbin_call_enter( + vmbin_frame_t *caller, + vmbin_frame_t *callee, + const vmbin_call_binding_t *binding, + vmbin_exit_t *output_exit); +runtimec_status_t vmbin_call_return( + vmbin_frame_t *caller, + const vmbin_frame_t *callee, + const vmbin_call_binding_t *binding, + vmbin_exit_t *output_exit); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmbin/exit.h b/runtimec/vmbin/exit.h new file mode 100644 index 00000000..5dd3c824 --- /dev/null +++ b/runtimec/vmbin/exit.h @@ -0,0 +1,59 @@ +#ifndef VMBIN_EXIT_H +#define VMBIN_EXIT_H + +/* + * 组件:vmbin/exit + * 作用:表达 interpreter 或 vmjit 离开执行窗口的唯一结构化结果。 + * 联系:engine route 消费退出并决定调用、交接、恢复或报错。 + * 约束:不得携带需要持久化的机器地址或伪造成功状态。 + */ + +#include + +#include "contract/status.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define VMBIN_PROGRAM_COUNTER_NONE UINT32_MAX + +typedef enum vmbin_exit_kind { + VMBIN_EXIT_NONE = 0, + VMBIN_EXIT_DONE, + VMBIN_EXIT_CALL, + VMBIN_EXIT_BUILTIN, + VMBIN_EXIT_HANDOFF, + VMBIN_EXIT_YIELD, + VMBIN_EXIT_DEOPTIMIZATION, + VMBIN_EXIT_ERROR +} vmbin_exit_kind_t; + +typedef enum vmbin_exit_flags { + VMBIN_EXIT_FLAG_NONE = 0, + VMBIN_EXIT_FLAG_FRAME_MATERIALIZED = 1U << 0, + VMBIN_EXIT_FLAG_RETRY_LOGICAL_PROGRAM_COUNTER = 1U << 1 +} vmbin_exit_flags_t; + +typedef struct vmbin_exit { + uint16_t kind; /* vmbin_exit_kind_t:为什么离开窗口 */ + uint16_t flags; /* vmbin_exit_flags_t:物化与重试提示 */ + runtimec_status_t status; /* 组件状态,与结构化退出原因正交 */ + uint32_t logical_program_counter; + uint32_t resume_logical_program_counter; + uint32_t detail_code; /* 结构化细节码(拒绝原因/错误分类) */ + uint32_t target_identifier; + uint32_t value_base; /* 退出携带值的起始槽(如需要) */ + uint32_t value_count; /* 退出携带值的数量 */ + uint64_t payload_low; /* 有限普通数据负载,低 64 位 */ + uint64_t payload_high; /* 有限普通数据负载,高 64 位 */ +} vmbin_exit_t; + +_Static_assert(sizeof(vmbin_exit_t) == 48U, + "vmbin structured exit must remain 48 bytes"); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmbin/frame.c b/runtimec/vmbin/frame.c new file mode 100644 index 00000000..181fdea8 --- /dev/null +++ b/runtimec/vmbin/frame.c @@ -0,0 +1,105 @@ +/* + * 组件:vmbin/frame 的实现 + * 作用:安全初始化和重置 Frame,其余入口保持失败关闭。 + * 约束:Frame 不拥有 Program、Cell 或 Binding 存储。 + */ + +#include "vmbin/frame.h" + +#include + +runtimec_status_t vmbin_frame_initialize( + vmbin_frame_t *frame, const vmbin_program_t *program, + vmbin_frame_t *parent, vmbin_cell_t *cells, size_t cell_count, + vmbin_binding_t *bindings, size_t binding_count, + uint64_t snapshot_generation, uint64_t program_generation, + uint32_t logical_program_counter) { + if (frame == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + memset(frame, 0, sizeof(*frame)); + if (program == NULL || + (cell_count != 0U && cells == NULL) || + (binding_count != 0U && bindings == NULL)) { + return RUNTIMEC_STATUS_INVALID; + } + + frame->program = program; + frame->parent = parent; + frame->cells = cells; + frame->cell_count = cell_count; + frame->bindings = bindings; + frame->binding_count = binding_count; + frame->snapshot_generation = snapshot_generation; + frame->program_generation = program_generation; + frame->logical_program_counter = logical_program_counter; + frame->flags = VMBIN_FRAME_FLAG_INITIALIZED; + return RUNTIMEC_STATUS_SUCCESS; +} + +runtimec_status_t vmbin_frame_reset(vmbin_frame_t *frame) { + if (frame == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + memset(frame, 0, sizeof(*frame)); + return RUNTIMEC_STATUS_SUCCESS; +} + +runtimec_status_t vmbin_frame_destroy(vmbin_frame_t *frame) { + return vmbin_frame_reset(frame); +} + +runtimec_status_t vmbin_frame_lookup_cell(vmbin_frame_t *frame, + uint32_t cell_identifier, + vmbin_cell_t **output_cell) { + if (output_cell != NULL) { + *output_cell = NULL; + } + if (frame == NULL || cell_identifier == VMBIN_CELL_IDENTIFIER_NONE || + output_cell == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_frame_lookup_binding( + vmbin_frame_t *frame, uint32_t register_identifier, + vmbin_binding_t **output_binding) { + if (output_binding != NULL) { + *output_binding = NULL; + } + if (frame == NULL || + register_identifier == VMBIN_REGISTER_IDENTIFIER_NONE || + output_binding == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_frame_bind_register( + vmbin_frame_t *frame, uint32_t register_identifier, + uint32_t cell_identifier, + vmbin_binding_access_t access) { + if (frame == NULL || + register_identifier == VMBIN_REGISTER_IDENTIFIER_NONE || + cell_identifier == VMBIN_CELL_IDENTIFIER_NONE || + (access != VMBIN_BINDING_ACCESS_READ && + access != VMBIN_BINDING_ACCESS_WRITE)) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_frame_materialize_register( + vmbin_frame_t *frame, uint32_t register_identifier, + vmbin_value_slot_t *output_value) { + if (output_value != NULL) { + memset(output_value, 0, sizeof(*output_value)); + } + if (frame == NULL || + register_identifier == VMBIN_REGISTER_IDENTIFIER_NONE || + output_value == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/vmbin/frame.h b/runtimec/vmbin/frame.h new file mode 100644 index 00000000..5971222a --- /dev/null +++ b/runtimec/vmbin/frame.h @@ -0,0 +1,70 @@ +#ifndef VMBIN_FRAME_H +#define VMBIN_FRAME_H + +/* + * 组件:vmbin/frame + * 作用:保存可从 kvspace 重建的执行帧镜像。 + * 联系:engine route 创建 Frame;interpreter 与 vmjit 消费。 + * 约束:Frame 不是持久事实源,每条源指令边界必须可观察。 + */ + +#include +#include + +#include "contract/status.h" +#include "vmbin/binding.h" +#include "vmbin/program.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum vmbin_frame_flags { + VMBIN_FRAME_FLAG_NONE = 0, + VMBIN_FRAME_FLAG_INITIALIZED = 1U << 0, + VMBIN_FRAME_FLAG_OBSERVABLE = 1U << 1, + VMBIN_FRAME_FLAG_RESUMED = 1U << 2 +} vmbin_frame_flags_t; + +typedef struct vmbin_frame { + const vmbin_program_t *program; + struct vmbin_frame *parent; + vmbin_cell_t *cells; + size_t cell_count; + vmbin_binding_t *bindings; + size_t binding_count; + uint64_t snapshot_generation; + uint64_t program_generation; + uint32_t logical_program_counter; + uint32_t flags; +} vmbin_frame_t; + +#define VMBIN_FRAME_ALIGNMENT ((uint32_t)_Alignof(vmbin_frame_t)) + +runtimec_status_t vmbin_frame_initialize( + vmbin_frame_t *frame, const vmbin_program_t *program, + vmbin_frame_t *parent, vmbin_cell_t *cells, size_t cell_count, + vmbin_binding_t *bindings, size_t binding_count, + uint64_t snapshot_generation, uint64_t program_generation, + uint32_t logical_program_counter); +runtimec_status_t vmbin_frame_reset(vmbin_frame_t *frame); +runtimec_status_t vmbin_frame_destroy(vmbin_frame_t *frame); +runtimec_status_t vmbin_frame_lookup_cell(vmbin_frame_t *frame, + uint32_t cell_identifier, + vmbin_cell_t **output_cell); +runtimec_status_t vmbin_frame_lookup_binding( + vmbin_frame_t *frame, uint32_t register_identifier, + vmbin_binding_t **output_binding); +runtimec_status_t vmbin_frame_bind_register( + vmbin_frame_t *frame, uint32_t register_identifier, + uint32_t cell_identifier, + vmbin_binding_access_t access); +runtimec_status_t vmbin_frame_materialize_register( + vmbin_frame_t *frame, uint32_t register_identifier, + vmbin_value_slot_t *output_value); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmbin/instruction.c b/runtimec/vmbin/instruction.c new file mode 100644 index 00000000..9e8eb096 --- /dev/null +++ b/runtimec/vmbin/instruction.c @@ -0,0 +1,42 @@ +/* + * 组件:vmbin/instruction 的实现 + * 作用:构建请求校验与只读视图生成;当前明确返回未实现。 + */ + +#include "vmbin/instruction.h" + +#include + +runtimec_status_t vmbin_instruction_validate_build_request( + const vmbin_instruction_build_request_t *request) { + if (request == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + if (request->operation_code == VMBIN_OPERATION_CODE_NONE || + request->form < VMBIN_INSTRUCTION_FORM_NARROW || + request->form > VMBIN_INSTRUCTION_FORM_WIDE || + (request->reads.count != 0U && request->reads.data == NULL) || + (request->writes.count != 0U && request->writes.data == NULL)) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_instruction_get_view( + const vmbin_instruction_t *instruction, + uint32_t source_logical_program_counter, + const vmbin_reference_t *references, size_t reference_count, + vmbin_instruction_view_t *output_view) { + (void)instruction; + (void)source_logical_program_counter; + (void)references; + (void)reference_count; + if (output_view != NULL) { + memset(output_view, 0, sizeof(*output_view)); + } + if (instruction == NULL || output_view == NULL || + (reference_count != 0U && references == NULL)) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/vmbin/instruction.h b/runtimec/vmbin/instruction.h new file mode 100644 index 00000000..51fad74f --- /dev/null +++ b/runtimec/vmbin/instruction.h @@ -0,0 +1,85 @@ +#ifndef VMBIN_INSTRUCTION_H +#define VMBIN_INSTRUCTION_H + +/* + * 组件:vmbin/instruction + * 作用:热指令的固定宽度表示,以及读取和写入引用的分区视图。 + * 联系:Program 拥有指令和引用池;interpreter 与 vmjit 只读消费。 + * 约束:当前窄式和宽式布局不是冻结的持久格式。 + */ + +#include +#include + +#include "contract/status.h" +#include "vmbin/reference.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define VMBIN_OPERATION_CODE_NONE UINT16_MAX + +typedef enum vmbin_instruction_flags { + VMBIN_INSTRUCTION_FLAG_NONE = 0, + VMBIN_INSTRUCTION_FLAG_CONTROL = 1U << 0, + VMBIN_INSTRUCTION_FLAG_EFFECT = 1U << 1 +} vmbin_instruction_flags_t; + +typedef enum vmbin_instruction_form { + VMBIN_INSTRUCTION_FORM_INVALID = 0, + VMBIN_INSTRUCTION_FORM_NARROW = 1, + VMBIN_INSTRUCTION_FORM_WIDE = 2 +} vmbin_instruction_form_t; + +typedef struct vmbin_instruction { + uint32_t operand_offset; + uint32_t auxiliary; + uint16_t operation_code; + uint16_t flags; + uint8_t read_count; + uint8_t write_count; + uint8_t form; + uint8_t reserved_byte; +} vmbin_instruction_t; + +typedef struct vmbin_reference_span { + const vmbin_reference_t *data; + size_t count; +} vmbin_reference_span_t; + +typedef struct vmbin_instruction_build_request { + uint32_t source_logical_program_counter; + uint32_t auxiliary; + uint16_t operation_code; + uint16_t flags; + uint8_t form; + uint8_t reserved_bytes[3]; + vmbin_reference_span_t reads; + vmbin_reference_span_t writes; +} vmbin_instruction_build_request_t; + +typedef struct vmbin_instruction_view { + const vmbin_instruction_t *instruction; + uint32_t source_logical_program_counter; + uint32_t reserved_32_bits; + vmbin_reference_span_t reads; + vmbin_reference_span_t writes; +} vmbin_instruction_view_t; + +runtimec_status_t vmbin_instruction_validate_build_request( + const vmbin_instruction_build_request_t *request); +runtimec_status_t vmbin_instruction_get_view( + const vmbin_instruction_t *instruction, + uint32_t source_logical_program_counter, + const vmbin_reference_t *references, size_t reference_count, + vmbin_instruction_view_t *output_view); + +_Static_assert(sizeof(vmbin_instruction_t) == 16U, + "vmbin instructions must remain 16 bytes"); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmbin/interpreter.c b/runtimec/vmbin/interpreter.c new file mode 100644 index 00000000..2953b949 --- /dev/null +++ b/runtimec/vmbin/interpreter.c @@ -0,0 +1,30 @@ +/* + * 组件:vmbin/interpreter 的实现 + * 作用:唯一 vmbin 执行入口的失败桩。 + * 约束:所有解释策略只能位于本执行器内部,不建立第三执行器。 + */ + +#include "interpreter.h" +#include "interpreter_dispatch.h" + +#include + +runtimec_status_t +vmbin_execute(vmbin_frame_t *frame, + const vmbin_builtin_registry_t *builtin_registry, + vmbin_profile_t *profile, vmbin_exit_t *output_exit) { + (void)profile; + + if (output_exit != NULL) { + memset(output_exit, 0, sizeof(*output_exit)); + output_exit->kind = VMBIN_EXIT_ERROR; + output_exit->status = RUNTIMEC_STATUS_NOT_IMPLEMENTED; + output_exit->logical_program_counter = VMBIN_PROGRAM_COUNTER_NONE; + output_exit->resume_logical_program_counter = + VMBIN_PROGRAM_COUNTER_NONE; + } + if (frame == NULL || builtin_registry == NULL || output_exit == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/vmbin/interpreter.h b/runtimec/vmbin/interpreter.h new file mode 100644 index 00000000..476dc2a2 --- /dev/null +++ b/runtimec/vmbin/interpreter.h @@ -0,0 +1,31 @@ +#ifndef VMBIN_INTERPRETER_H +#define VMBIN_INTERPRETER_H + +/* + * 组件:vmbin/interpreter + * 作用:定义唯一完整的 BinRWIR 正确性执行入口。 + * 联系:engine route 是唯一调用者;vmjit 拒绝时回到此入口。 + * 约束:generic、typed、fused、continuous 只能是本解释器内部策略。 + */ + +#include "builtin/registry.h" +#include "contract/status.h" +#include "exit.h" +#include "frame.h" +#include "profile.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* 从 Frame 的当前逻辑程序计数器开始执行,直到产生结构化退出。 */ +runtimec_status_t +vmbin_execute(vmbin_frame_t *frame, + const vmbin_builtin_registry_t *builtin_registry, + vmbin_profile_t *profile, vmbin_exit_t *output_exit); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmbin/interpreter_dispatch.c b/runtimec/vmbin/interpreter_dispatch.c new file mode 100644 index 00000000..dae57fb3 --- /dev/null +++ b/runtimec/vmbin/interpreter_dispatch.c @@ -0,0 +1,44 @@ +/* + * 组件:vmbin/interpreter 内部派生 dispatch 的失败桩 + * 作用:保留派生能力边界,但不实现处理函数选择或执行语义。 + */ + +#include "vmbin/interpreter_dispatch.h" + +#include + +runtimec_status_t vmbin_interpreter_dispatch_table_create( + const vmbin_program_t *program, + const runtimec_allocator_t *allocator, + vmbin_interpreter_dispatch_table_t **output_table) { + if (output_table != NULL) { + *output_table = NULL; + } + if (program == NULL || allocator == NULL || output_table == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_interpreter_dispatch_table_destroy( + vmbin_interpreter_dispatch_table_t *table) { + if (table == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_interpreter_dispatch_table_get( + const vmbin_interpreter_dispatch_table_t *table, + uint32_t instruction_identifier, + vmbin_interpreter_dispatch_entry_t *output_entry) { + if (output_entry != NULL) { + memset(output_entry, 0, sizeof(*output_entry)); + output_entry->handler_identifier = UINT16_MAX; + } + if (table == NULL || instruction_identifier == VMBIN_IDENTIFIER_NONE || + output_entry == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/vmbin/interpreter_dispatch.h b/runtimec/vmbin/interpreter_dispatch.h new file mode 100644 index 00000000..bc2f50be --- /dev/null +++ b/runtimec/vmbin/interpreter_dispatch.h @@ -0,0 +1,39 @@ +#ifndef VMBIN_INTERPRETER_DISPATCH_H +#define VMBIN_INTERPRETER_DISPATCH_H + +/* + * 组件:vmbin/interpreter 内部派生 dispatch + * 作用:把不可变 Program 派生为解释器私有的处理函数选择表。 + * 联系:只有 interpreter 构造和消费;Program 与 vmjit 均不依赖本表。 + * 约束:可整层丢弃重建,不拥有语义,不构成执行入口或第三执行器。 + */ + +#include + +#include "contract/allocator.h" +#include "contract/status.h" +#include "vmbin/program.h" + +typedef struct vmbin_interpreter_dispatch_table + vmbin_interpreter_dispatch_table_t; + +typedef struct vmbin_interpreter_dispatch_entry { + uint16_t handler_identifier; + uint8_t handler_form; + uint8_t flags; +} vmbin_interpreter_dispatch_entry_t; + +runtimec_status_t vmbin_interpreter_dispatch_table_create( + const vmbin_program_t *program, + const runtimec_allocator_t *allocator, + vmbin_interpreter_dispatch_table_t **output_table); + +runtimec_status_t vmbin_interpreter_dispatch_table_destroy( + vmbin_interpreter_dispatch_table_t *table); + +runtimec_status_t vmbin_interpreter_dispatch_table_get( + const vmbin_interpreter_dispatch_table_t *table, + uint32_t instruction_identifier, + vmbin_interpreter_dispatch_entry_t *output_entry); + +#endif diff --git a/runtimec/vmbin/profile.c b/runtimec/vmbin/profile.c new file mode 100644 index 00000000..01cc64e7 --- /dev/null +++ b/runtimec/vmbin/profile.c @@ -0,0 +1,50 @@ +/* + * 组件:vmbin/profile 的实现 + * 作用:初始化、清零和读取调用方拥有的统计存储。 + */ + +#include "profile.h" + +#include + +runtimec_status_t +vmbin_profile_initialize(vmbin_profile_t *profile, + vmbin_profile_counter_t *counter_storage, + size_t counter_count) { + if (profile == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + memset(profile, 0, sizeof(*profile)); + if (counter_count != 0U && counter_storage == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + if (counter_storage != NULL) { + memset(counter_storage, 0, counter_count * sizeof(*counter_storage)); + } + profile->counters = counter_storage; + profile->counter_count = counter_count; + return RUNTIMEC_STATUS_SUCCESS; +} + +runtimec_status_t vmbin_profile_reset(vmbin_profile_t *profile) { + if (profile == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + if (profile->counters != NULL) { + memset(profile->counters, 0, + profile->counter_count * sizeof(*profile->counters)); + } + profile->frame_count = 0U; + profile->instruction_count = 0U; + profile->flags = 0U; + profile->reserved_32_bits = 0U; + return RUNTIMEC_STATUS_SUCCESS; +} + +runtimec_status_t vmbin_profile_destroy(vmbin_profile_t *profile) { + if (profile == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + memset(profile, 0, sizeof(*profile)); + return RUNTIMEC_STATUS_SUCCESS; +} diff --git a/runtimec/vmbin/profile.h b/runtimec/vmbin/profile.h new file mode 100644 index 00000000..816964ee --- /dev/null +++ b/runtimec/vmbin/profile.h @@ -0,0 +1,46 @@ +#ifndef VMBIN_PROFILE_H +#define VMBIN_PROFILE_H + +/* + * 组件:vmbin/profile + * 作用:保存 session 拥有的可丢弃执行统计。 + * 联系:interpreter 更新;engine session 持有;vmjit 可以读取。 + * 约束:统计不是正确性依赖,也不得进入不可变 Program。 + */ + +#include +#include + +#include "contract/status.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct vmbin_profile_counter { + uint64_t instruction_count; + uint64_t dispatch_ticks; + uint64_t fallback_count; +} vmbin_profile_counter_t; + +typedef struct vmbin_profile { + vmbin_profile_counter_t *counters; + size_t counter_count; + uint64_t frame_count; + uint64_t instruction_count; + uint32_t flags; + uint32_t reserved_32_bits; +} vmbin_profile_t; + +runtimec_status_t +vmbin_profile_initialize(vmbin_profile_t *profile, + vmbin_profile_counter_t *counter_storage, + size_t counter_count); +runtimec_status_t vmbin_profile_reset(vmbin_profile_t *profile); +runtimec_status_t vmbin_profile_destroy(vmbin_profile_t *profile); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmbin/program.c b/runtimec/vmbin/program.c new file mode 100644 index 00000000..98c5cc1e --- /dev/null +++ b/runtimec/vmbin/program.c @@ -0,0 +1,206 @@ +/* + * 组件:vmbin/program 的实现 + * 作用:Program 查询和构造入口;当前均明确返回未实现。 + * 约束:每个输出在失败前进入无效状态。 + */ + +#include "vmbin/program.h" + +#include + +static void vmbin_program_identity_invalidate( + vmbin_program_identity_t *identity) { + if (identity != NULL) { + memset(identity, 0, sizeof(*identity)); + identity->schema_version = UINT32_MAX; + identity->rwir_manifest_version = UINT32_MAX; + identity->binrwir_binary_interface_generation = UINT32_MAX; + } +} + +runtimec_status_t vmbin_program_get_identity( + const vmbin_program_t *program, + vmbin_program_identity_t *output_identity) { + vmbin_program_identity_invalidate(output_identity); + if (program == NULL || output_identity == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_program_validate(const vmbin_program_t *program) { + if (program == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_program_get_view( + const vmbin_program_t *program, vmbin_program_view_t *output_view) { + if (output_view != NULL) { + memset(output_view, 0, sizeof(*output_view)); + vmbin_program_identity_invalidate(&output_view->identity); + } + if (program == NULL || output_view == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_program_get_instruction( + const vmbin_program_t *program, uint32_t instruction_identifier, + vmbin_instruction_view_t *output_instruction) { + if (output_instruction != NULL) { + memset(output_instruction, 0, sizeof(*output_instruction)); + } + if (program == NULL || instruction_identifier == VMBIN_IDENTIFIER_NONE || + output_instruction == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_program_destroy(vmbin_program_t *program) { + if (program == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_program_builder_create( + const runtimec_allocator_t *allocator, + const vmbin_program_identity_t *identity, + vmbin_program_builder_t **output_builder) { + if (output_builder != NULL) { + *output_builder = NULL; + } + if (allocator == NULL || identity == NULL || output_builder == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_program_builder_reset(vmbin_program_builder_t *builder) { + if (builder == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_program_builder_destroy( + vmbin_program_builder_t *builder) { + if (builder == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_program_builder_add_parameter( + vmbin_program_builder_t *builder, vmbin_parameter_direction_t direction, + uint32_t register_identifier, uint16_t *output_parameter_ordinal) { + if (output_parameter_ordinal != NULL) { + *output_parameter_ordinal = UINT16_MAX; + } + if (builder == NULL || direction == VMBIN_PARAMETER_DIRECTION_INVALID || + register_identifier == VMBIN_IDENTIFIER_NONE || + output_parameter_ordinal == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_program_builder_add_alias_rule( + vmbin_program_builder_t *builder, const vmbin_alias_rule_t *rule, + uint32_t *output_alias_rule_identifier) { + if (output_alias_rule_identifier != NULL) { + *output_alias_rule_identifier = VMBIN_IDENTIFIER_NONE; + } + if (builder == NULL || rule == NULL || + output_alias_rule_identifier == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_program_builder_add_register( + vmbin_program_builder_t *builder, + const vmbin_register_descriptor_t *register_descriptor, + uint32_t *output_register_identifier) { + if (output_register_identifier != NULL) { + *output_register_identifier = VMBIN_IDENTIFIER_NONE; + } + if (builder == NULL || register_descriptor == NULL || + output_register_identifier == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_program_builder_add_symbol( + vmbin_program_builder_t *builder, const uint8_t *bytes, size_t byte_count, + uint32_t *output_symbol_identifier) { + if (output_symbol_identifier != NULL) { + *output_symbol_identifier = VMBIN_IDENTIFIER_NONE; + } + if (builder == NULL || (byte_count != 0U && bytes == NULL) || + output_symbol_identifier == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_program_builder_add_literal( + vmbin_program_builder_t *builder, + const vmbin_literal_descriptor_t *literal_descriptor, + const uint8_t *bytes, size_t byte_count, + uint32_t *output_literal_identifier) { + if (output_literal_identifier != NULL) { + *output_literal_identifier = VMBIN_IDENTIFIER_NONE; + } + if (builder == NULL || literal_descriptor == NULL || + (byte_count != 0U && bytes == NULL) || + output_literal_identifier == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_program_builder_add_callsite( + vmbin_program_builder_t *builder, + const vmbin_callsite_build_request_t *request, + uint32_t *output_callsite_identifier) { + if (output_callsite_identifier != NULL) { + *output_callsite_identifier = VMBIN_IDENTIFIER_NONE; + } + if (builder == NULL || request == NULL || + output_callsite_identifier == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_program_builder_add_instruction( + vmbin_program_builder_t *builder, + const vmbin_instruction_build_request_t *request, + uint32_t *output_instruction_identifier) { + if (output_instruction_identifier != NULL) { + *output_instruction_identifier = VMBIN_IDENTIFIER_NONE; + } + if (builder == NULL || request == NULL || + output_instruction_identifier == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t +vmbin_program_builder_finalize(vmbin_program_builder_t *builder, + vmbin_program_t **output_program) { + if (output_program != NULL) { + *output_program = NULL; + } + if (builder == NULL || output_program == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/vmbin/program.h b/runtimec/vmbin/program.h new file mode 100644 index 00000000..95354979 --- /dev/null +++ b/runtimec/vmbin/program.h @@ -0,0 +1,216 @@ +#ifndef VMBIN_PROGRAM_H +#define VMBIN_PROGRAM_H + +/* + * 组件:vmbin/program + * 作用:定义不可变 BinRWIR Program、构造器和只读视图。 + * 联系:vmkv 构造 Program;interpreter 与 vmjit 只读消费。 + * 约束:可变绑定、统计、缓存和机器码不得进入 Program。 + */ + +#include +#include + +#include "contract/allocator.h" +#include "contract/status.h" +#include "vmbin/instruction.h" +#include "vmbin/reference.h" +#include "vmbin/signature.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define VMBIN_IDENTIFIER_NONE UINT32_MAX + +typedef enum vmbin_program_flags { + VMBIN_PROGRAM_FLAG_NONE = 0, + VMBIN_PROGRAM_FLAG_TYPED = 1U << 0, + VMBIN_PROGRAM_FLAG_HAS_CONTROL_FLOW = 1U << 1, + VMBIN_PROGRAM_FLAG_HAS_EFFECTS = 1U << 2 +} vmbin_program_flags_t; + +typedef enum vmbin_register_derived_access { + VMBIN_REGISTER_DERIVED_ACCESS_NONE = 0, + VMBIN_REGISTER_DERIVED_ACCESS_READ = 1U << 0, + VMBIN_REGISTER_DERIVED_ACCESS_WRITE = 1U << 1 +} vmbin_register_derived_access_t; + +typedef enum vmbin_register_flags { + VMBIN_REGISTER_FLAG_NONE = 0, + VMBIN_REGISTER_FLAG_PARAMETER = 1U << 0, + VMBIN_REGISTER_FLAG_POINTER = 1U << 1, + VMBIN_REGISTER_FLAG_MEMBER = 1U << 2, + VMBIN_REGISTER_FLAG_PINNED = 1U << 3 +} vmbin_register_flags_t; + +typedef enum vmbin_literal_flags { + VMBIN_LITERAL_FLAG_NONE = 0, + VMBIN_LITERAL_FLAG_NULL = 1U << 0, + VMBIN_LITERAL_FLAG_RELOCATABLE = 1U << 1 +} vmbin_literal_flags_t; + +typedef enum vmbin_callsite_flags { + VMBIN_CALLSITE_FLAG_NONE = 0, + VMBIN_CALLSITE_FLAG_TAIL = 1U << 0, + VMBIN_CALLSITE_FLAG_MAY_YIELD = 1U << 1 +} vmbin_callsite_flags_t; + +typedef enum vmbin_call_alias_mapping_flags { + VMBIN_CALL_ALIAS_MAPPING_FLAG_NONE = 0, + VMBIN_CALL_ALIAS_MAPPING_FLAG_PROJECTED = 1U << 0, + VMBIN_CALL_ALIAS_MAPPING_FLAG_INDIRECT = 1U << 1 +} vmbin_call_alias_mapping_flags_t; + +typedef struct vmbin_program_identity { + uint64_t snapshot_generation; + uint64_t program_generation; + uint32_t schema_version; + uint32_t rwir_manifest_version; + uint32_t binrwir_binary_interface_generation; + uint32_t compiler_revision; +} vmbin_program_identity_t; + +typedef struct vmbin_register_descriptor { + uint32_t symbol_identifier; + uint32_t type_identifier; + uint32_t auxiliary; + uint16_t flags; + /* Cache only: validators derive and check this against the signature. */ + uint8_t derived_access; + uint8_t reserved_byte; +} vmbin_register_descriptor_t; + +typedef struct vmbin_literal_descriptor { + uint32_t byte_offset; + uint32_t byte_size; + uint32_t type_identifier; + uint16_t flags; + uint16_t alignment; +} vmbin_literal_descriptor_t; + +typedef struct vmbin_symbol_descriptor { + uint32_t byte_offset; + uint32_t byte_size; +} vmbin_symbol_descriptor_t; + +typedef struct vmbin_callsite { + uint32_t callee_symbol_identifier; + uint32_t binding_offset; + uint32_t alias_mapping_offset; + uint8_t read_count; + uint8_t write_count; + uint8_t alias_mapping_count; + uint8_t flags; +} vmbin_callsite_t; + +typedef struct vmbin_call_alias_mapping { + uint16_t read_argument; + uint16_t write_argument; + uint16_t alias_rule_ordinal; + uint16_t flags; +} vmbin_call_alias_mapping_t; + +typedef struct vmbin_callsite_build_request { + uint32_t callee_symbol_identifier; + uint8_t flags; + uint8_t reserved_bytes[3]; + vmbin_reference_span_t read_bindings; + vmbin_reference_span_t write_bindings; + const vmbin_call_alias_mapping_t *alias_mappings; + size_t alias_mapping_count; +} vmbin_callsite_build_request_t; + +typedef struct vmbin_program vmbin_program_t; +typedef struct vmbin_program_builder vmbin_program_builder_t; + +typedef struct vmbin_program_view { + vmbin_program_identity_t identity; + vmbin_signature_view_t signature; + const vmbin_instruction_t *instructions; + size_t instruction_count; + const uint32_t *source_logical_program_counters; + const vmbin_reference_t *references; + size_t reference_count; + const vmbin_register_descriptor_t *registers; + size_t register_count; + const vmbin_literal_descriptor_t *literals; + size_t literal_count; + const vmbin_symbol_descriptor_t *symbols; + size_t symbol_count; + const vmbin_callsite_t *callsites; + size_t callsite_count; + const vmbin_call_alias_mapping_t *alias_mappings; + size_t alias_mapping_count; + const uint8_t *literal_bytes; + size_t literal_byte_count; + const uint8_t *symbol_bytes; + size_t symbol_byte_count; + uint32_t flags; + uint32_t reserved_32_bits; +} vmbin_program_view_t; + +runtimec_status_t vmbin_program_get_identity( + const vmbin_program_t *program, vmbin_program_identity_t *output_identity); +runtimec_status_t vmbin_program_validate(const vmbin_program_t *program); +runtimec_status_t vmbin_program_get_view(const vmbin_program_t *program, + vmbin_program_view_t *output_view); +runtimec_status_t vmbin_program_get_instruction( + const vmbin_program_t *program, uint32_t instruction_identifier, + vmbin_instruction_view_t *output_instruction); +runtimec_status_t vmbin_program_destroy(vmbin_program_t *program); + +runtimec_status_t vmbin_program_builder_create( + const runtimec_allocator_t *allocator, + const vmbin_program_identity_t *identity, + vmbin_program_builder_t **output_builder); +runtimec_status_t vmbin_program_builder_reset(vmbin_program_builder_t *builder); +runtimec_status_t vmbin_program_builder_destroy( + vmbin_program_builder_t *builder); + +runtimec_status_t vmbin_program_builder_add_parameter( + vmbin_program_builder_t *builder, vmbin_parameter_direction_t direction, + uint32_t register_identifier, uint16_t *output_parameter_ordinal); +runtimec_status_t vmbin_program_builder_add_alias_rule( + vmbin_program_builder_t *builder, const vmbin_alias_rule_t *rule, + uint32_t *output_alias_rule_identifier); +runtimec_status_t vmbin_program_builder_add_register( + vmbin_program_builder_t *builder, + const vmbin_register_descriptor_t *register_descriptor, + uint32_t *output_register_identifier); +runtimec_status_t vmbin_program_builder_add_symbol( + vmbin_program_builder_t *builder, const uint8_t *bytes, size_t byte_count, + uint32_t *output_symbol_identifier); +runtimec_status_t vmbin_program_builder_add_literal( + vmbin_program_builder_t *builder, + const vmbin_literal_descriptor_t *literal_descriptor, + const uint8_t *bytes, size_t byte_count, + uint32_t *output_literal_identifier); +runtimec_status_t vmbin_program_builder_add_callsite( + vmbin_program_builder_t *builder, + const vmbin_callsite_build_request_t *request, + uint32_t *output_callsite_identifier); +runtimec_status_t vmbin_program_builder_add_instruction( + vmbin_program_builder_t *builder, + const vmbin_instruction_build_request_t *request, + uint32_t *output_instruction_identifier); +runtimec_status_t +vmbin_program_builder_finalize(vmbin_program_builder_t *builder, + vmbin_program_t **output_program); + +_Static_assert(sizeof(vmbin_register_descriptor_t) == 16U, + "vmbin register descriptions must remain 16 bytes"); +_Static_assert(sizeof(vmbin_program_identity_t) == 32U, + "vmbin program identity must remain 32 bytes"); +_Static_assert(sizeof(vmbin_literal_descriptor_t) == 16U, + "vmbin literal descriptions must remain 16 bytes"); +_Static_assert(sizeof(vmbin_callsite_t) == 16U, + "vmbin callsites must remain 16 bytes"); +_Static_assert(sizeof(vmbin_call_alias_mapping_t) == 8U, + "vmbin call alias mappings must remain 8 bytes"); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmbin/reference.c b/runtimec/vmbin/reference.c new file mode 100644 index 00000000..d05c2627 --- /dev/null +++ b/runtimec/vmbin/reference.c @@ -0,0 +1,52 @@ +/* + * 组件:vmbin/reference 的实现 + * 作用:引用创建、校验与读取入口;业务语义尚未实现。 + * 约束:所有输出先进入明确无效状态,再返回未实现。 + */ + +#include "vmbin/reference.h" + +#include + +runtimec_status_t vmbin_reference_create( + vmbin_reference_kind_t kind, uint32_t identifier, + vmbin_reference_t *output_reference) { + if (output_reference != NULL) { + *output_reference = VMBIN_REFERENCE_INVALID; + } + if (output_reference == NULL || kind <= VMBIN_REFERENCE_KIND_INVALID || + kind > VMBIN_REFERENCE_KIND_SYMBOL || + identifier > VMBIN_REFERENCE_IDENTIFIER_MASK) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_reference_validate(vmbin_reference_t reference) { + if (reference == VMBIN_REFERENCE_INVALID) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_reference_get_kind( + vmbin_reference_t reference, vmbin_reference_kind_t *output_kind) { + if (output_kind != NULL) { + *output_kind = VMBIN_REFERENCE_KIND_INVALID; + } + if (output_kind == NULL || reference == VMBIN_REFERENCE_INVALID) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_reference_get_identifier( + vmbin_reference_t reference, uint32_t *output_identifier) { + if (output_identifier != NULL) { + *output_identifier = UINT32_MAX; + } + if (output_identifier == NULL || reference == VMBIN_REFERENCE_INVALID) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/vmbin/reference.h b/runtimec/vmbin/reference.h new file mode 100644 index 00000000..0d77cc43 --- /dev/null +++ b/runtimec/vmbin/reference.h @@ -0,0 +1,49 @@ +#ifndef VMBIN_REFERENCE_H +#define VMBIN_REFERENCE_H + +/* + * 组件:vmbin/reference + * 作用:以 32 位紧凑值表示寄存器、字面量或符号引用。 + * 联系:instruction 按读取区和写入区保存引用,Program 提供只读视图。 + * 约束:引用不重复保存方向;非法引用使用全一位模式。 + */ + +#include + +#include "contract/status.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef uint32_t vmbin_reference_t; + +typedef enum vmbin_reference_kind { + VMBIN_REFERENCE_KIND_INVALID = 0, + VMBIN_REFERENCE_KIND_REGISTER = 1, + VMBIN_REFERENCE_KIND_LITERAL = 2, + VMBIN_REFERENCE_KIND_SYMBOL = 3 +} vmbin_reference_kind_t; + +#define VMBIN_REFERENCE_KIND_SHIFT 30U +#define VMBIN_REFERENCE_KIND_MASK UINT32_C(0xC0000000) +#define VMBIN_REFERENCE_IDENTIFIER_MASK UINT32_C(0x3FFFFFFF) +#define VMBIN_REFERENCE_INVALID UINT32_MAX + +runtimec_status_t vmbin_reference_create( + vmbin_reference_kind_t kind, uint32_t identifier, + vmbin_reference_t *output_reference); +runtimec_status_t vmbin_reference_validate(vmbin_reference_t reference); +runtimec_status_t vmbin_reference_get_kind( + vmbin_reference_t reference, vmbin_reference_kind_t *output_kind); +runtimec_status_t vmbin_reference_get_identifier( + vmbin_reference_t reference, uint32_t *output_identifier); + +_Static_assert(sizeof(vmbin_reference_t) == 4U, + "vmbin references must remain 4 bytes"); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmbin/signature.c b/runtimec/vmbin/signature.c new file mode 100644 index 00000000..9de17863 --- /dev/null +++ b/runtimec/vmbin/signature.c @@ -0,0 +1,37 @@ +/* + * 组件:vmbin/signature 的实现 + * 作用:签名校验与别名策略查询;当前明确返回未实现。 + * 约束:默认输出仅是无效前置状态,不表示已经证明不重叠。 + */ + +#include "vmbin/signature.h" + +runtimec_status_t +vmbin_signature_validate(const vmbin_signature_view_t *signature) { + if (signature == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + if ((signature->read_parameter_count != 0U && + signature->read_parameters == NULL) || + (signature->write_parameter_count != 0U && + signature->write_parameters == NULL) || + (signature->alias_rule_count != 0U && + signature->alias_rules == NULL)) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmbin_signature_get_alias_policy( + const vmbin_signature_view_t *signature, uint16_t read_parameter, + uint16_t write_parameter, vmbin_alias_policy_t *output_policy) { + if (output_policy != NULL) { + *output_policy = VMBIN_ALIAS_POLICY_INVALID; + } + if (signature == NULL || output_policy == NULL || + read_parameter >= signature->read_parameter_count || + write_parameter >= signature->write_parameter_count) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/vmbin/signature.h b/runtimec/vmbin/signature.h new file mode 100644 index 00000000..06375215 --- /dev/null +++ b/runtimec/vmbin/signature.h @@ -0,0 +1,68 @@ +#ifndef VMBIN_SIGNATURE_H +#define VMBIN_SIGNATURE_H + +/* + * 组件:vmbin/signature + * 作用:定义读参数、写参数和跨方向显式别名规则。 + * 联系:vmkv 生成签名;call 与 vmjit 按同一签名校验绑定。 + * 约束:签名是别名策略的唯一所有者;未知关系不得猜测为不重叠。 + */ + +#include +#include + +#include "contract/status.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum vmbin_parameter_direction { + VMBIN_PARAMETER_DIRECTION_INVALID = 0, + VMBIN_PARAMETER_DIRECTION_READ = 1, + VMBIN_PARAMETER_DIRECTION_WRITE = 2 +} vmbin_parameter_direction_t; + +typedef enum vmbin_alias_policy { + VMBIN_ALIAS_POLICY_INVALID = 0, + VMBIN_ALIAS_NO_ALIAS = 1, + VMBIN_ALIAS_MAY_ALIAS = 2, + VMBIN_ALIAS_MUST_ALIAS = 3 +} vmbin_alias_policy_t; + +typedef enum vmbin_alias_rule_flags { + VMBIN_ALIAS_RULE_FLAG_NONE = 0, + VMBIN_ALIAS_RULE_FLAG_PROJECTION = 1U << 0 +} vmbin_alias_rule_flags_t; + +typedef struct vmbin_alias_rule { + uint16_t read_parameter; + uint16_t write_parameter; + uint8_t policy; + uint8_t flags; + uint16_t reserved_16_bits; +} vmbin_alias_rule_t; + +typedef struct vmbin_signature_view { + const uint32_t *read_parameters; + size_t read_parameter_count; + const uint32_t *write_parameters; + size_t write_parameter_count; + const vmbin_alias_rule_t *alias_rules; + size_t alias_rule_count; +} vmbin_signature_view_t; + +runtimec_status_t +vmbin_signature_validate(const vmbin_signature_view_t *signature); +runtimec_status_t vmbin_signature_get_alias_policy( + const vmbin_signature_view_t *signature, uint16_t read_parameter, + uint16_t write_parameter, vmbin_alias_policy_t *output_policy); + +_Static_assert(sizeof(vmbin_alias_rule_t) == 8U, + "vmbin alias rules must remain 8 bytes"); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmbin/value.h b/runtimec/vmbin/value.h new file mode 100644 index 00000000..130e0629 --- /dev/null +++ b/runtimec/vmbin/value.h @@ -0,0 +1,60 @@ +#ifndef VMBIN_VALUE_H +#define VMBIN_VALUE_H + +/* + * 组件:vmbin/value + * 作用:vmbin 与 vmjit 共享的 32 字节目标中立值槽。 + * 联系:Binding、Frame、interpreter 与 vmjit 共同使用。 + * 约束:布局是内部二进制接口,不是持久格式。 + */ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum vmbin_value_tag { + VMBIN_VALUE_INVALID = 0, + VMBIN_VALUE_EMPTY, + VMBIN_VALUE_BOOL, + VMBIN_VALUE_SIGNED, + VMBIN_VALUE_UNSIGNED, + VMBIN_VALUE_FLOAT, + VMBIN_VALUE_REFERENCE, + VMBIN_VALUE_ARRAY, + VMBIN_VALUE_DYNAMIC +} vmbin_value_tag_t; + +typedef enum vmbin_value_flags { + VMBIN_VALUE_FLAG_NONE = 0, + VMBIN_VALUE_FLAG_OWNED = 1U << 0, + VMBIN_VALUE_FLAG_BORROWED = 1U << 1, + VMBIN_VALUE_FLAG_NULLABLE = 1U << 2, + VMBIN_VALUE_FLAG_DIRTY = 1U << 3, + VMBIN_VALUE_FLAG_PINNED = 1U << 4 +} vmbin_value_flags_t; + +typedef struct vmbin_value_slot { + uint64_t payload_low; /* 标量位或句柄标识符,低 64 位 */ + uint64_t payload_high; /* 保留/高 64 位 */ + uint32_t type_identifier; /* canonical 类型或形状标识符 */ + uint16_t tag; /* vmbin_value_tag_t */ + uint16_t flags; /* owned/borrowed/nullable/dirty/pinned */ + uint32_t generation; /* 句柄/借用的世代守卫 */ + uint32_t reserved_32_bits; +} vmbin_value_slot_t; + +_Static_assert(sizeof(vmbin_value_slot_t) == 32U, + "vmbin value slot must remain 32 bytes"); +_Static_assert(offsetof(vmbin_value_slot_t, payload_low) == 0U, + "vmbin value payload must start at offset zero"); +_Static_assert(offsetof(vmbin_value_slot_t, generation) == 24U, + "vmbin value generation offset is contractual"); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmjit/backend.h b/runtimec/vmjit/backend.h new file mode 100644 index 00000000..0238d904 --- /dev/null +++ b/runtimec/vmjit/backend.h @@ -0,0 +1,58 @@ +#ifndef RUNTIMEC_VMJIT_BACKEND_H +#define RUNTIMEC_VMJIT_BACKEND_H + +/* + * 组件:vmjit/backend + * 作用:单一 backend 契约:目标架构与 feature 判定及机器码生成。x86_64 与 + * AArch64 是并列 peer,谁也不是另一个的默认模板。 + * backend 只拥有指令编码、调用约定实现、寄存器/spill、常量池/ + * branch fixup、可执行页切换与 instruction cache 同步;不拥有 Program 语义、 + * eligibility、cache identity 或 fallback policy。 + * 联系:vmjit/compiler 选择 backend;emit 请求来自 lower;输出由 + * code_memory 发布。backend 禁止读 RWIR、kvspace 或 route policy。 + * 约束:未知 processor 或缺 feature 必须显式 fallback,不得默认 x86_64。 + */ + +#include +#include +#include "contract/status.h" +#include "contract/view.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum vmjit_architecture_t { + VMJIT_ARCHITECTURE_NONE = 0, + VMJIT_ARCHITECTURE_X86_64 = 1, + VMJIT_ARCHITECTURE_AARCH64 = 2 +} vmjit_architecture_t; +typedef struct vmjit_target_t { + vmjit_architecture_t architecture; + runtimec_string_view_t triple; + uint64_t feature_mask; +} vmjit_target_t; +typedef struct vmjit_emit_request_t vmjit_emit_request_t; +typedef struct vmjit_emit_result_t vmjit_emit_result_t; +typedef struct vmjit_backend_t { + vmjit_architecture_t architecture; + runtimec_string_view_t name; + bool (*supports)(const vmjit_target_t *target); + runtimec_status_t (*emit)( + const vmjit_emit_request_t *request, + vmjit_emit_result_t *output_result, + runtimec_error_t *error); +} vmjit_backend_t; +runtimec_status_t vmjit_backend_for_target( + const vmjit_target_t *target, + const vmjit_backend_t **output_backend); +runtimec_status_t vmjit_x86_64_backend( + const vmjit_backend_t **output_backend); +runtimec_status_t vmjit_aarch64_backend( + const vmjit_backend_t **output_backend); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmjit/backend/aarch64.c b/runtimec/vmjit/backend/aarch64.c new file mode 100644 index 00000000..72932963 --- /dev/null +++ b/runtimec/vmjit/backend/aarch64.c @@ -0,0 +1,20 @@ +/* + * 组件:vmjit/backend/aarch64 + * 作用:AArch64 backend 入口;当前显式返回 FALLBACK。它不是 x86 完成后的 + * 占位:必须真实实现同一 backend contract,或 + * 显式 fallback(空桩不得被报告为 vmjit 可用)。 + * 联系:与 x86_64 peer;只消费 lower/emit request。 + */ + +#include "vmjit/backend.h" + +#include + +runtimec_status_t vmjit_aarch64_backend( + const vmjit_backend_t **output_backend) { + if (output_backend == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + *output_backend = NULL; + return RUNTIMEC_STATUS_FALLBACK; +} diff --git a/runtimec/vmjit/backend/backend.c b/runtimec/vmjit/backend/backend.c new file mode 100644 index 00000000..74542fca --- /dev/null +++ b/runtimec/vmjit/backend/backend.c @@ -0,0 +1,22 @@ +/* + * 组件:vmjit/backend/backend + * 作用:按目标选择 backend;当前显式返回 FALLBACK。未知 processor + * 不得默认 x86_64。 + * 联系:vmjit/compiler 调用;x86_64/aarch64 是并列 peer。 + */ + +#include "vmjit/backend.h" + +#include + +runtimec_status_t vmjit_backend_for_target( + const vmjit_target_t *target, + const vmjit_backend_t **output_backend) { + if (output_backend != NULL) { + *output_backend = NULL; + } + if (target == NULL || output_backend == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_FALLBACK; +} diff --git a/runtimec/vmjit/backend/x86_64.c b/runtimec/vmjit/backend/x86_64.c new file mode 100644 index 00000000..882ad25e --- /dev/null +++ b/runtimec/vmjit/backend/x86_64.c @@ -0,0 +1,21 @@ +/* + * 组件:vmjit/backend/x86_64 + * 作用:x86_64 backend 入口;当前显式返回 FALLBACK,route + * 回退 vmbin。它与 AArch64 是 peer 关系,只拥有 + * 目标机制(编码、调用约定、寄存器、spill、常量池、branch fixup、 + * 代码页切换与 instruction cache 同步)。 + * 联系:vmjit/compiler 通过 backend contract 选择;不得读 RWIR/kvspace。 + */ + +#include "vmjit/backend.h" + +#include + +runtimec_status_t vmjit_x86_64_backend( + const vmjit_backend_t **output_backend) { + if (output_backend == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + *output_backend = NULL; + return RUNTIMEC_STATUS_FALLBACK; +} diff --git a/runtimec/vmjit/cache.h b/runtimec/vmjit/cache.h new file mode 100644 index 00000000..31b94c75 --- /dev/null +++ b/runtimec/vmjit/cache.h @@ -0,0 +1,58 @@ +#ifndef RUNTIMEC_VMJIT_CACHE_H +#define RUNTIMEC_VMJIT_CACHE_H + +/* + * 组件:vmjit/cache + * 作用:代码缓存的 key 与 get_or_compile:key 至少包含 Program snapshot/ + * generation、执行 binary interface、架构、processor feature、tier、 + * code generation revision 与 vmjit generation; + * 活动 frame/lease 必须 pin 住 + * Program/code,新 generation 不得热替换仍执行的旧页。 + * 联系:engine/session 拥有 code cache;vmjit/compiler 生成 code; + * invalidate 由统一失效模型触发。 + * 约束:negative cache 与 retired list 是可删除 sidecar;cache 不是 + * Program 的事实源。 + */ + +#include "contract/allocator.h" +#include "contract/snapshot.h" +#include "contract/status.h" +#include "vmjit/compiler.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct vmjit_code_cache_t vmjit_code_cache_t; +typedef struct vmjit_cache_key_t { + runtimec_snapshot_t snapshot; + uint16_t execution_binary_interface_major_version; + uint16_t optimization_tier; + uint32_t code_generation_revision; + uint64_t feature_mask; + uint64_t vmjit_generation; +} vmjit_cache_key_t; +runtimec_status_t vmjit_code_cache_create( + runtimec_allocator_t allocator, + size_t capacity, + vmjit_code_cache_t **output_cache, + runtimec_error_t *error); +runtimec_status_t vmjit_code_cache_destroy(vmjit_code_cache_t *cache); +runtimec_status_t vmjit_code_cache_clear(vmjit_code_cache_t *cache); +runtimec_status_t vmjit_code_cache_invalidate( + vmjit_code_cache_t *cache, + const runtimec_snapshot_t *snapshot); +runtimec_status_t vmjit_code_cache_get_or_compile( + vmjit_code_cache_t *cache, + vmjit_compiler_t *compiler, + const vmjit_cache_key_t *key, + const vmjit_verified_program_t *verified_program, + vmjit_code_t **output_code, + vmjit_refusal_t *refusal, + runtimec_error_t *error); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmjit/code.h b/runtimec/vmjit/code.h new file mode 100644 index 00000000..463e3742 --- /dev/null +++ b/runtimec/vmjit/code.h @@ -0,0 +1,32 @@ +#ifndef RUNTIMEC_VMJIT_CODE_H +#define RUNTIMEC_VMJIT_CODE_H + +/* + * 组件:vmjit/code + * 作用:已发布机器码的引用计数句柄:retain/release 保证执行期间 code + * 不被回收;entry 返回调用入口。 + * 联系:code cache 产生并持有;engine/route 在执行前取 code lease; + * retired 后等最后一个 lease 释放再回收只读可执行页。 + * 约束:句柄不暴露机器地址给持久层;事务边界由 route 保证。 + */ + +#include "contract/snapshot.h" +#include "vmjit/backend.h" +#include "vmjit/execution_interface.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct vmjit_code vmjit_code_t; +runtimec_status_t vmjit_code_retain(vmjit_code_t *code); +runtimec_status_t vmjit_code_release(vmjit_code_t *code); +runtimec_status_t vmjit_code_get_machine_code_function( + const vmjit_code_t *code, + vmjit_machine_code_function_t *output_function); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmjit/code_memory.h b/runtimec/vmjit/code_memory.h new file mode 100644 index 00000000..b74e6f39 --- /dev/null +++ b/runtimec/vmjit/code_memory.h @@ -0,0 +1,42 @@ +#ifndef RUNTIMEC_VMJIT_CODE_MEMORY_H +#define RUNTIMEC_VMJIT_CODE_MEMORY_H + +/* + * 组件:vmjit/code_memory + * 作用:可执行页的生命周期:分配可写页 -> emit/relocate -> 切换可执行 + * 并取消可写 -> 平台 instruction cache 同步 -> 由 code lease 管理回收。 + * 内存不可同时可写与可执行。 + * 联系:backend 写入 writable_view;compiler 调 publish;code cache + * 管理 lease/retired。 + * 约束:发布失败或 entitlement 不足时返回错误,绝不执行未发布内存。 + */ + +#include + +#include "contract/status.h" +#include "contract/view.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct vmjit_code_memory vmjit_code_memory_t; +runtimec_status_t vmjit_code_memory_create( + size_t capacity, + vmjit_code_memory_t **output_memory, + runtimec_error_t *error); +runtimec_status_t vmjit_code_memory_writable_view( + vmjit_code_memory_t *memory, + runtimec_bytes_buffer_t *output_buffer, + runtimec_error_t *error); +runtimec_status_t vmjit_code_memory_publish( + vmjit_code_memory_t *memory, + size_t code_size, + runtimec_error_t *error); +runtimec_status_t vmjit_code_memory_destroy(vmjit_code_memory_t *memory); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmjit/compiler.h b/runtimec/vmjit/compiler.h new file mode 100644 index 00000000..14dab315 --- /dev/null +++ b/runtimec/vmjit/compiler.h @@ -0,0 +1,55 @@ +#ifndef RUNTIMEC_VMJIT_COMPILER_H +#define RUNTIMEC_VMJIT_COMPILER_H + +/* + * 组件:vmjit/compiler + * 作用:单一 vmjit pipeline 的编排入口:configuration、target、code cache + * limit、generation 与 compile(Program -> code)。所有优化层级共享 + * 同一 planner、binary interface、cache 与路由。 + * 联系:engine/route 在 vmjit enabled 且 eligible 时调用;输入是 verifier + * 产生的只读 verified Program;输出 code 交给 cache。 + * 约束:compile 不读 RWIR/kvspace;无法证明安全时拒绝,不“尽量执行”。 + */ + +#include +#include +#include + +#include "contract/allocator.h" +#include "contract/status.h" +#include "vmbin/program.h" +#include "vmjit/backend.h" +#include "vmjit/code.h" +#include "vmjit/verifier.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct vmjit_compiler_t vmjit_compiler_t; +typedef struct vmjit_config_t { + uint32_t structure_size; + bool enabled; + size_t code_cache_limit; + uint64_t generation; + vmjit_target_t target; +} vmjit_config_t; + +runtimec_status_t vmjit_compiler_create( + runtimec_allocator_t allocator, + const vmjit_config_t *config, + vmjit_compiler_t **output_compiler, + runtimec_error_t *error); +runtimec_status_t vmjit_compiler_destroy(vmjit_compiler_t *compiler); +runtimec_status_t vmjit_compile( + vmjit_compiler_t *compiler, + const vmjit_verified_program_t *verified_program, + vmjit_code_t **output_code, + vmjit_refusal_t *refusal, + runtimec_error_t *error); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmjit/execution_interface.h b/runtimec/vmjit/execution_interface.h new file mode 100644 index 00000000..c24d7796 --- /dev/null +++ b/runtimec/vmjit/execution_interface.h @@ -0,0 +1,46 @@ +#ifndef RUNTIMEC_VMJIT_EXECUTION_INTERFACE_H +#define RUNTIMEC_VMJIT_EXECUTION_INTERFACE_H + +/* + * 组件:vmjit/execution_interface + * 作用:机器码入口与执行 binary interface 的最小描述:入口函数签名、 + * ValueSlot 大小与 Frame 对齐。骨架期不冻结最终寄存器约定、vmjit + * frame/stack 布局或稳定机器 binary interface。 + * 联系:vmjit compiler 与 backend 共用;vmbin 的 ValueSlot 与 Frame 是 + * 唯一布局来源,机器码生成器不得手写第二份 offset。 + * 约束:版本变化必须进入 code cache key;本文件不定义语言语义。 + */ + +#include + +#include "contract/status.h" +#include "vmbin/exit.h" +#include "vmbin/frame.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define VMJIT_EXECUTION_BINARY_INTERFACE_MAJOR_VERSION 0u +#define VMJIT_EXECUTION_BINARY_INTERFACE_MINOR_VERSION 1u + +typedef void (*vmjit_machine_code_function_t)( + void *execution_state, + vmbin_frame_t *frame, + vmbin_exit_t *exit); + +typedef struct vmjit_execution_interface_t { + uint16_t binary_interface_major_version; + uint16_t binary_interface_minor_version; + uint32_t value_slot_size_bytes; + uint32_t frame_alignment_bytes; +} vmjit_execution_interface_t; + +runtimec_status_t vmjit_execution_interface( + vmjit_execution_interface_t *output_interface); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmjit/lower.h b/runtimec/vmjit/lower.h new file mode 100644 index 00000000..6a301534 --- /dev/null +++ b/runtimec/vmjit/lower.h @@ -0,0 +1,34 @@ +#ifndef RUNTIMEC_VMJIT_LOWER_H +#define RUNTIMEC_VMJIT_LOWER_H + +/* + * 组件:vmjit/lower + * 作用:把已验证的 plan 转成 target-neutral micro operation,不重新解释 RWIR + * 语义。 + * 联系:plan 来自 vmjit/plan;输出交给 backend 的 emit;lower 不接触 + * kvspace/host。 + * 约束:具体 micro operation 编码当前未冻结。 + */ + +#include "contract/allocator.h" +#include "contract/status.h" +#include "vmjit/plan.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct vmjit_lowered_program vmjit_lowered_program_t; +runtimec_status_t vmjit_lower( + const vmjit_plan_t *plan, + const runtimec_allocator_t *allocator, + vmjit_lowered_program_t **output_program, + runtimec_error_t *error); +runtimec_status_t vmjit_lowered_program_destroy( + vmjit_lowered_program_t *program); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmjit/plan.h b/runtimec/vmjit/plan.h new file mode 100644 index 00000000..13c05a5b --- /dev/null +++ b/runtimec/vmjit/plan.h @@ -0,0 +1,50 @@ +#ifndef RUNTIMEC_VMJIT_PLAN_H +#define RUNTIMEC_VMJIT_PLAN_H + +/* + * 组件:vmjit/plan + * 作用:vmjit 计划:control flow graph、basic block、liveness、寄存器分配、 + * spill、materialization、safepoint、source program counter、side exit、 + * callsite maps 与每指令可观察性策略。 + * 联系:仅由 verifier 输出的 verified Program 生成;lower 消费;backend 不直接看 + * plan 的语义,只消费 emit request。 + * 约束:无法构建 deoptimization 或 source program counter map 时必须拒绝, + * 不得退化成不精确 + * side exit。 + */ + +#include +#include + +#include "contract/allocator.h" +#include "contract/status.h" +#include "vmbin/program.h" +#include "vmjit/backend.h" +#include "vmjit/verifier.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct vmjit_plan vmjit_plan_t; +typedef struct vmjit_plan_options { + uint32_t tier; + uint32_t code_generation_revision; + bool observe_every_instruction; +} vmjit_plan_options_t; + +runtimec_status_t vmjit_plan_create( + const vmjit_verified_program_t *verified_program, + const vmjit_target_t *target, + const vmjit_plan_options_t *options, + const runtimec_allocator_t *allocator, + vmjit_plan_t **output_plan, + vmjit_refusal_t *refusal, + runtimec_error_t *error); +runtimec_status_t vmjit_plan_destroy(vmjit_plan_t *plan); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmjit/verifier.h b/runtimec/vmjit/verifier.h new file mode 100644 index 00000000..17fe0337 --- /dev/null +++ b/runtimec/vmjit/verifier.h @@ -0,0 +1,54 @@ +#ifndef RUNTIMEC_VMJIT_VERIFIER_H +#define RUNTIMEC_VMJIT_VERIFIER_H + +/* + * 组件:vmjit/verifier + * 作用:vmjit eligibility 的 fail-closed 判定:先要求 vmbin 确认 Program + * 有效,再判定 operation/backend 支持、先定义后使用、控制流 guard、 + * 寄存器压力、binary interface 限制、side effect、call、builtin、 + * handoff、observable 边界与 source program counter map 可构建。 + * 联系:vmjit/compiler 在 plan 前调用;拒绝结果以结构化 refusal 返回, + * route 据此回退 vmbin。 + * 约束:拒绝是正常控制流,不是运行时错误;不得“尽量执行”。 + */ + +#include + +#include "contract/status.h" +#include "vmbin/program.h" +#include "vmjit/backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum vmjit_refusal_reason_t { + VMJIT_REFUSAL_NONE = 0, + VMJIT_REFUSAL_DISABLED = 1, + VMJIT_REFUSAL_UNSUPPORTED_TARGET = 2, + VMJIT_REFUSAL_UNSUPPORTED_PROGRAM = 3, + VMJIT_REFUSAL_INVALID_PROGRAM = 4, + VMJIT_REFUSAL_RESOURCE_LIMIT = 5 +} vmjit_refusal_reason_t; +typedef struct vmjit_refusal_t { + vmjit_refusal_reason_t reason; + uint32_t logical_program_counter; + uint32_t detail_code; +} vmjit_refusal_t; + +typedef struct vmjit_verified_program_t { + const vmbin_program_t *program; +} vmjit_verified_program_t; + +runtimec_status_t vmjit_verify_program( + const vmbin_program_t *program, + const vmjit_target_t *target, + vmjit_verified_program_t *output_verified_program, + vmjit_refusal_t *refusal, + runtimec_error_t *error); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmjit/vmjit.c b/runtimec/vmjit/vmjit.c new file mode 100644 index 00000000..6540943b --- /dev/null +++ b/runtimec/vmjit/vmjit.c @@ -0,0 +1,307 @@ +/* + * 组件:vmjit 的 scaffold 实现 + * 作用:所有未实现阶段显式返回 NOT_IMPLEMENTED;唯一可选执行入口在 + * 无机器码能力时显式返回 FALLBACK,绝不伪造已执行结果。 + * 联系:engine/route 是唯一策略调用者;其余函数只构成 vmjit 内部流水线。 + * 约束:只接受 verifier 产生的 verified Program,不解释 RWIR 或 BinRWIR。 + */ + +#include "vmjit/vmjit.h" + +#include + +#include "vmjit/code_memory.h" +#include "vmjit/lower.h" +#include "vmjit/plan.h" + +static void vmjit_refusal_reset( + vmjit_refusal_t *refusal, + vmjit_refusal_reason_t reason) { + if (refusal != NULL) { + refusal->reason = reason; + refusal->logical_program_counter = 0U; + refusal->detail_code = 0U; + } +} + +runtimec_status_t vmjit_execution_interface( + vmjit_execution_interface_t *output_interface) { + if (output_interface != NULL) { + *output_interface = (vmjit_execution_interface_t){0}; + } + if (output_interface == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_compiler_create( + runtimec_allocator_t allocator, + const vmjit_config_t *config, + vmjit_compiler_t **output_compiler, + runtimec_error_t *error) { + (void)allocator; + (void)error; + if (output_compiler != NULL) { + *output_compiler = NULL; + } + if (config == NULL || output_compiler == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_compiler_destroy(vmjit_compiler_t *compiler) { + if (compiler == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_verify_program( + const vmbin_program_t *program, + const vmjit_target_t *target, + vmjit_verified_program_t *output_verified_program, + vmjit_refusal_t *refusal, + runtimec_error_t *error) { + (void)error; + if (output_verified_program != NULL) { + *output_verified_program = (vmjit_verified_program_t){0}; + } + vmjit_refusal_reset(refusal, VMJIT_REFUSAL_INVALID_PROGRAM); + if (program == NULL || target == NULL || output_verified_program == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + vmjit_refusal_reset(refusal, VMJIT_REFUSAL_DISABLED); + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_compile( + vmjit_compiler_t *compiler, + const vmjit_verified_program_t *verified_program, + vmjit_code_t **output_code, + vmjit_refusal_t *refusal, + runtimec_error_t *error) { + (void)error; + if (output_code != NULL) { + *output_code = NULL; + } + vmjit_refusal_reset(refusal, VMJIT_REFUSAL_INVALID_PROGRAM); + if (compiler == NULL || verified_program == NULL || + verified_program->program == NULL || output_code == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + vmjit_refusal_reset(refusal, VMJIT_REFUSAL_DISABLED); + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_code_retain(vmjit_code_t *code) { + if (code == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_code_release(vmjit_code_t *code) { + if (code == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_code_get_machine_code_function( + const vmjit_code_t *code, + vmjit_machine_code_function_t *output_function) { + if (output_function != NULL) { + *output_function = NULL; + } + if (code == NULL || output_function == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_plan_create( + const vmjit_verified_program_t *verified_program, + const vmjit_target_t *target, + const vmjit_plan_options_t *options, + const runtimec_allocator_t *allocator, + vmjit_plan_t **output_plan, + vmjit_refusal_t *refusal, + runtimec_error_t *error) { + (void)error; + if (output_plan != NULL) { + *output_plan = NULL; + } + vmjit_refusal_reset(refusal, VMJIT_REFUSAL_INVALID_PROGRAM); + if (verified_program == NULL || verified_program->program == NULL || + target == NULL || options == NULL || allocator == NULL || + output_plan == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + vmjit_refusal_reset(refusal, VMJIT_REFUSAL_DISABLED); + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_plan_destroy(vmjit_plan_t *plan) { + if (plan == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_lower( + const vmjit_plan_t *plan, + const runtimec_allocator_t *allocator, + vmjit_lowered_program_t **output_program, + runtimec_error_t *error) { + (void)error; + if (output_program != NULL) { + *output_program = NULL; + } + if (plan == NULL || allocator == NULL || output_program == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_lowered_program_destroy( + vmjit_lowered_program_t *program) { + if (program == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_code_memory_create( + size_t capacity, + vmjit_code_memory_t **output_memory, + runtimec_error_t *error) { + (void)capacity; + (void)error; + if (output_memory != NULL) { + *output_memory = NULL; + } + if (output_memory == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_code_memory_writable_view( + vmjit_code_memory_t *memory, + runtimec_bytes_buffer_t *output_buffer, + runtimec_error_t *error) { + (void)error; + if (output_buffer != NULL) { + runtimec_bytes_buffer_reset(output_buffer); + } + if (memory == NULL || output_buffer == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_code_memory_publish( + vmjit_code_memory_t *memory, + size_t code_size, + runtimec_error_t *error) { + (void)code_size; + (void)error; + if (memory == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_code_memory_destroy(vmjit_code_memory_t *memory) { + if (memory == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_code_cache_create( + runtimec_allocator_t allocator, + size_t capacity, + vmjit_code_cache_t **output_cache, + runtimec_error_t *error) { + (void)allocator; + (void)capacity; + (void)error; + if (output_cache != NULL) { + *output_cache = NULL; + } + if (output_cache == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_code_cache_destroy(vmjit_code_cache_t *cache) { + if (cache == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_code_cache_clear(vmjit_code_cache_t *cache) { + if (cache == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_code_cache_invalidate( + vmjit_code_cache_t *cache, + const runtimec_snapshot_t *snapshot) { + if (cache == NULL || snapshot == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_code_cache_get_or_compile( + vmjit_code_cache_t *cache, + vmjit_compiler_t *compiler, + const vmjit_cache_key_t *key, + const vmjit_verified_program_t *verified_program, + vmjit_code_t **output_code, + vmjit_refusal_t *refusal, + runtimec_error_t *error) { + (void)error; + if (output_code != NULL) { + *output_code = NULL; + } + vmjit_refusal_reset(refusal, VMJIT_REFUSAL_INVALID_PROGRAM); + if (cache == NULL || compiler == NULL || key == NULL || + verified_program == NULL || verified_program->program == NULL || + output_code == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + vmjit_refusal_reset(refusal, VMJIT_REFUSAL_DISABLED); + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +vmjit_execution_result_t vmjit_try_execute( + vmjit_compiler_t *compiler, + vmjit_code_cache_t *cache, + const vmjit_verified_program_t *verified_program, + vmbin_frame_t *frame, + runtimec_error_t *error) { + vmjit_execution_result_t result = {0}; + (void)error; + result.outcome = VMJIT_EXECUTION_OUTCOME_ERROR; + result.status = RUNTIMEC_STATUS_INVALID; + result.exit.kind = VMBIN_EXIT_ERROR; + result.exit.status = RUNTIMEC_STATUS_INVALID; + if (compiler == NULL || cache == NULL || verified_program == NULL || + verified_program->program == NULL || frame == NULL) { + return result; + } + result.outcome = VMJIT_EXECUTION_OUTCOME_FALLBACK; + result.status = RUNTIMEC_STATUS_FALLBACK; + result.exit.kind = VMBIN_EXIT_NONE; + result.exit.status = RUNTIMEC_STATUS_FALLBACK; + return result; +} diff --git a/runtimec/vmjit/vmjit.h b/runtimec/vmjit/vmjit.h new file mode 100644 index 00000000..d2969bf6 --- /dev/null +++ b/runtimec/vmjit/vmjit.h @@ -0,0 +1,48 @@ +#ifndef RUNTIMEC_VMJIT_H +#define RUNTIMEC_VMJIT_H + +/* + * 组件:vmjit/vmjit + * 作用:vmjit 总入口与执行结果契约:EXECUTED / FALLBACK / ERROR。 + * unsupported target、operation、disabled、negative + * cache、guard 或 deoptimization 应返回 FALLBACK;任何 side exit 必须落在 + * source-mapped、未重复副作用的安全边界。INVALID、NOT_IMPLEMENTED、 + * out-of-memory 或 ERROR 是错误,不得伪装成 FALLBACK。 + * 联系:engine/route 是唯一调用者;输入是只读 vmbin Program + Frame; + * 输出为结构化 exit,交给 route 决定后续提交或回退。 + * 约束:vmjit 不读 RWIR、不访问 kvspace、不拥有持久 program counter 或 status; + * try_execute 只接受 verifier 产生的 verified Program。 + */ + +#include "contract/status.h" +#include "vmbin/exit.h" +#include "vmbin/frame.h" +#include "vmjit/cache.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum vmjit_execution_outcome_t { + VMJIT_EXECUTION_OUTCOME_INVALID = 0, + VMJIT_EXECUTION_OUTCOME_EXECUTED = 1, + VMJIT_EXECUTION_OUTCOME_FALLBACK = 2, + VMJIT_EXECUTION_OUTCOME_ERROR = 3 +} vmjit_execution_outcome_t; +typedef struct vmjit_execution_result_t { + vmjit_execution_outcome_t outcome; + runtimec_status_t status; + vmbin_exit_t exit; +} vmjit_execution_result_t; +vmjit_execution_result_t vmjit_try_execute( + vmjit_compiler_t *compiler, + vmjit_code_cache_t *cache, + const vmjit_verified_program_t *verified_program, + vmbin_frame_t *frame, + runtimec_error_t *error); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmkv/compiler.h b/runtimec/vmkv/compiler.h new file mode 100644 index 00000000..91a62213 --- /dev/null +++ b/runtimec/vmkv/compiler.h @@ -0,0 +1,52 @@ +#ifndef RUNTIMEC_VMKV_COMPILER_H +#define RUNTIMEC_VMKV_COMPILER_H + +/* + * 组件:vmkv/compiler + * 作用:读取并校验明文 RWIR,调用 vmbin Program 构建器产出不可变 + * BinRWIR Program。 + * 联系:engine route 在 Program repository 未命中时调用;源只经 + * vmkv/source 与主机服务读取;Program 由 vmbin 持有。 + * 约束:vmkv 只有 RWIR 到 BinRWIR Program 这一条正常方向。它不执行、 + * 不生成机器码、不提交持久事实,也不依赖 vmjit。未实现路径 + * 必须返回 RUNTIMEC_STATUS_NOT_IMPLEMENTED。 + */ + +#include "contract/allocator.h" +#include "contract/snapshot.h" +#include "contract/status.h" +#include "vmbin/program.h" +#include "vmkv/source.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct vmkv_compiler_t vmkv_compiler_t; + +/* 一次编译请求。校验是强制步骤,不提供绕过开关。 */ +typedef struct vmkv_compile_request_t { + const runtimec_host_services_t *host_services; + runtimec_string_view_t function_path; + runtimec_snapshot_t expected_snapshot; +} vmkv_compile_request_t; + +runtimec_status_t vmkv_compiler_create( + runtimec_allocator_t allocator, + vmkv_compiler_t **output_compiler, + runtimec_error_t *error); + +runtimec_status_t vmkv_compiler_destroy(vmkv_compiler_t *compiler); + +/* 编译一个函数;成功时只返回不可变 BinRWIR Program。 */ +runtimec_status_t vmkv_compile( + vmkv_compiler_t *compiler, + const vmkv_compile_request_t *request, + vmbin_program_t **output_program, + runtimec_error_t *error); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmkv/rwir.h b/runtimec/vmkv/rwir.h new file mode 100644 index 00000000..21d8a661 --- /dev/null +++ b/runtimec/vmkv/rwir.h @@ -0,0 +1,83 @@ +#ifndef RUNTIMEC_VMKV_RWIR_H +#define RUNTIMEC_VMKV_RWIR_H + +/* + * 组件:vmkv/rwir + * 作用:明文 RWIR 指令的只读视图与顺序读取器。操作数按 + * [ReadReference...][WriteReference...] 两个分区表达方向:字面量 + * 只能出现在读分区,读参数只能读,写参数只能定位写入。 + * 联系:vmkv/source 提供函数源;vmkv/compiler 校验后构建不可变 + * BinRWIR Program。vmbin 与 vmjit 不直接消费本结构。 + * 约束:所有视图都只借用内存。读取器不执行、不修复、不兼容输入。 + */ + +#include +#include + +#include "contract/view.h" +#include "contract/status.h" +#include "vmkv/source.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* specification manifest 中稳定的 RWIR 操作标识符。 */ +typedef uint16_t vmkv_rwir_operation_identifier_t; + +/* 操作数类别;方向由所在分区决定。 */ +typedef enum vmkv_operand_kind_t { + VMKV_OPERAND_NONE = 0, + VMKV_OPERAND_LITERAL = 1, + VMKV_OPERAND_VARIABLE = 2, + VMKV_OPERAND_PATH = 3 +} vmkv_operand_kind_t; + +/* 单个操作数的只读视图。 */ +typedef struct vmkv_operand_view_t { + vmkv_operand_kind_t kind; + runtimec_string_view_t source_text; + runtimec_bytes_view_t literal_bytes; + runtimec_string_view_t langtype; + int32_t parameter_axis; +} vmkv_operand_view_t; + +/* 一条 RWIR 指令及其两个方向分区。 */ +typedef struct vmkv_rwir_instruction_view_t { + vmkv_rwir_operation_identifier_t operation_identifier; + uint32_t logical_program_counter; + const vmkv_operand_view_t *read_operands; + size_t read_operand_count; + const vmkv_operand_view_t *write_operands; + size_t write_operand_count; +} vmkv_rwir_instruction_view_t; + +/* 组件状态只表示调用成败;读取位置由本枚举表达。 */ +typedef enum vmkv_rwir_read_result_t { + VMKV_RWIR_READ_RESULT_INVALID = 0, + VMKV_RWIR_READ_RESULT_INSTRUCTION = 1, + VMKV_RWIR_READ_RESULT_END = 2 +} vmkv_rwir_read_result_t; + +typedef struct vmkv_rwir_reader_t vmkv_rwir_reader_t; + +/* 在函数源上创建顺序读取器;不拥有 function。 */ +runtimec_status_t vmkv_rwir_reader_create( + vmkv_function_source_t *function, + vmkv_rwir_reader_t **output_reader, + runtimec_error_t *error); + +/* 成功读取或到达结尾都返回 RUNTIMEC_STATUS_SUCCESS,读取结果单独表达。 */ +runtimec_status_t vmkv_rwir_reader_next( + vmkv_rwir_reader_t *reader, + vmkv_rwir_read_result_t *output_result, + vmkv_rwir_instruction_view_t *output_instruction, + runtimec_error_t *error); + +runtimec_status_t vmkv_rwir_reader_destroy(vmkv_rwir_reader_t *reader); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmkv/source.h b/runtimec/vmkv/source.h new file mode 100644 index 00000000..37ed48f5 --- /dev/null +++ b/runtimec/vmkv/source.h @@ -0,0 +1,41 @@ +#ifndef RUNTIMEC_VMKV_SOURCE_H +#define RUNTIMEC_VMKV_SOURCE_H + +/* + * 组件:vmkv/source + * 作用:通过主机服务打开一个函数的明文 RWIR 源,并返回源快照。 + * 它是 vmkv 与 kvspace 之间唯一的读取入口,vmkv 不直接包含 + * kvspace 结构。 + * 联系:vmkv/compiler 使用本接口读取 RWIR;编译结果只能进入 vmbin 的 + * 不可变 BinRWIR Program 构建器。 + * 约束:打开源不执行 RWIR、不生成机器码、不修改执行事实;失败 + * 不得留下函数源。 + */ + +#include "contract/host_services.h" +#include "contract/snapshot.h" +#include "contract/status.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* 一次函数读取的句柄;生命周期内保证视图可借用。 */ +typedef struct vmkv_function_source_t vmkv_function_source_t; + +/* 打开函数源;失败时输出保持明确无效。 */ +runtimec_status_t vmkv_source_open_function( + const runtimec_host_services_t *host_services, + runtimec_string_view_t function_path, + vmkv_function_source_t **output_function, + runtimec_snapshot_t *output_snapshot, + runtimec_error_t *error); + +/* 关闭函数源;不提交、不修改 kvspace 事实。 */ +runtimec_status_t vmkv_source_close_function(vmkv_function_source_t *function); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmkv/vmkv.c b/runtimec/vmkv/vmkv.c new file mode 100644 index 00000000..87c6640a --- /dev/null +++ b/runtimec/vmkv/vmkv.c @@ -0,0 +1,116 @@ +/* + * 组件:vmkv 未实现入口 + * 作用:先把输出置为明确无效,再验证接口形状,最后返回 + * RUNTIMEC_STATUS_NOT_IMPLEMENTED。 + * 约束:不产生空 Program 伪装成功,不执行 RWIR,不生成机器码,不走兼容路径。 + */ + +#include "vmkv/compiler.h" +#include "vmkv/rwir.h" +#include "vmkv/source.h" + +runtimec_status_t vmkv_source_open_function( + const runtimec_host_services_t *host_services, + runtimec_string_view_t function_path, + vmkv_function_source_t **output_function, + runtimec_snapshot_t *output_snapshot, + runtimec_error_t *error) { + if (output_function != NULL) { + *output_function = NULL; + } + if (output_snapshot != NULL) { + runtimec_snapshot_reset(output_snapshot); + } + if (!runtimec_host_services_is_valid(host_services) || + !runtimec_string_view_is_valid(function_path) || + output_function == NULL || output_snapshot == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + (void)error; + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmkv_source_close_function(vmkv_function_source_t *function) { + if (function == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmkv_rwir_reader_create( + vmkv_function_source_t *function, + vmkv_rwir_reader_t **output_reader, + runtimec_error_t *error) { + if (output_reader != NULL) { + *output_reader = NULL; + } + if (function == NULL || output_reader == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + (void)error; + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmkv_rwir_reader_next( + vmkv_rwir_reader_t *reader, + vmkv_rwir_read_result_t *output_result, + vmkv_rwir_instruction_view_t *output_instruction, + runtimec_error_t *error) { + if (output_result != NULL) { + *output_result = VMKV_RWIR_READ_RESULT_INVALID; + } + if (output_instruction != NULL) { + *output_instruction = (vmkv_rwir_instruction_view_t){0}; + } + if (reader == NULL || output_result == NULL || output_instruction == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + (void)error; + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmkv_rwir_reader_destroy(vmkv_rwir_reader_t *reader) { + if (reader == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmkv_compiler_create( + runtimec_allocator_t allocator, + vmkv_compiler_t **output_compiler, + runtimec_error_t *error) { + if (output_compiler != NULL) { + *output_compiler = NULL; + } + if (!runtimec_allocator_is_valid(&allocator) || output_compiler == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + (void)error; + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmkv_compiler_destroy(vmkv_compiler_t *compiler) { + if (compiler == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmkv_compile( + vmkv_compiler_t *compiler, + const vmkv_compile_request_t *request, + vmbin_program_t **output_program, + runtimec_error_t *error) { + if (output_program != NULL) { + *output_program = NULL; + } + if (compiler == NULL || request == NULL || output_program == NULL || + !runtimec_host_services_is_valid(request->host_services) || + !runtimec_string_view_is_valid(request->function_path) || + !runtimec_snapshot_is_valid(&request->expected_snapshot)) { + return RUNTIMEC_STATUS_INVALID; + } + (void)error; + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} From 7c9696d9bca595907a89ea636cfe4027d13aed38 Mon Sep 17 00:00:00 2001 From: "peng.li24" <734991033@qq.com> Date: Mon, 2 Nov 2026 15:45:44 +0800 Subject: [PATCH 2/6] refactor(runtimec): compile BinRWIR before execution selection --- runtimec/CMakeLists.txt | 50 +-- runtimec/README.md | 377 +++++++++--------- .../binding.c => binrwir/execution_binding.c} | 38 +- runtimec/binrwir/execution_binding.h | 91 +++++ runtimec/binrwir/execution_exit.h | 59 +++ .../frame.c => binrwir/execution_frame.c} | 61 +-- runtimec/binrwir/execution_frame.h | 74 ++++ runtimec/binrwir/execution_plan.c | 38 ++ runtimec/binrwir/execution_plan.h | 147 +++++++ runtimec/binrwir/execution_plan_internal.h | 21 + runtimec/{vmbin => binrwir}/instruction.c | 22 +- runtimec/binrwir/instruction.h | 85 ++++ runtimec/{vmbin => binrwir}/program.c | 103 ++--- runtimec/binrwir/program.h | 199 +++++++++ runtimec/binrwir/reference.c | 52 +++ runtimec/binrwir/reference.h | 49 +++ runtimec/{vmbin => binrwir}/signature.c | 14 +- runtimec/binrwir/signature.h | 68 ++++ runtimec/binrwir/value.h | 60 +++ runtimec/compiler/compiler.c | 100 +++++ runtimec/compiler/compiler.h | 98 +++++ runtimec/compiler/optimization.c | 25 ++ runtimec/compiler/optimization.h | 36 ++ runtimec/contract/snapshot.c | 2 +- runtimec/contract/snapshot.h | 2 +- runtimec/contract/status.c | 2 - runtimec/contract/status.h | 4 +- runtimec/documentation/architecture/README.md | 22 +- .../architecture/capability-map.md | 58 +-- .../architecture/runtimec-architecture.md | 189 +++++---- .../architecture/runtimec-dependencies.mmd | 54 +-- .../architecture/runtimec-dependencies.png | Bin 77213 -> 130991 bytes .../architecture/runtimec-dependencies.svg | 2 +- .../architecture/runtimec-execution.mmd | 66 ++- .../architecture/runtimec-execution.png | Bin 147796 -> 372167 bytes .../architecture/runtimec-execution.svg | 2 +- .../architecture/runtimec-trunk.mmd | 53 ++- .../architecture/runtimec-trunk.png | Bin 51909 -> 125585 bytes .../architecture/runtimec-trunk.svg | 2 +- .../architecture/rwir-binrwir-aliasing.mmd | 62 +-- .../architecture/rwir-binrwir-aliasing.png | Bin 79991 -> 115379 bytes .../architecture/rwir-binrwir-aliasing.svg | 2 +- runtimec/engine/compilation_repository.c | 90 +++++ runtimec/engine/compilation_repository.h | 92 +++++ runtimec/engine/engine.c | 134 ------- runtimec/engine/program_repository.h | 76 ---- runtimec/engine/route.c | 14 +- runtimec/engine/route.h | 15 +- runtimec/engine/session.c | 65 +++ runtimec/engine/session.h | 11 +- runtimec/include/kvlang/runtimec.h | 13 +- runtimec/specification/README.md | 33 +- .../five-language-behavior-matrix.md | 7 + .../myrwircap-binrwir-mapping.md | 98 +++++ runtimec/specification/rwir_catalog.def | 16 +- runtimec/specification/scalar_operations.def | 6 +- runtimec/tests/CMakeLists.txt | 16 +- runtimec/tests/compiler_contracts_test.c | 215 ++++++++++ runtimec/tests/contracts_test.c | 57 ++- .../architecture/check_behavior_matrix.py | 4 +- runtimec/tools/architecture/check_layers.py | 155 +++++-- runtimec/tools/architecture/check_names.py | 23 +- runtimec/vmbin/binding.h | 90 ----- runtimec/vmbin/builtin/registry.c | 2 +- runtimec/vmbin/builtin/registry.h | 14 +- runtimec/vmbin/call.c | 56 +-- runtimec/vmbin/call.h | 24 +- runtimec/vmbin/exit.h | 59 --- runtimec/vmbin/frame.h | 70 ---- runtimec/vmbin/instruction.h | 85 ---- runtimec/vmbin/interpreter.c | 22 +- runtimec/vmbin/interpreter.h | 17 +- runtimec/vmbin/interpreter_dispatch.c | 44 -- runtimec/vmbin/interpreter_dispatch.h | 39 -- runtimec/vmbin/profile.h | 3 +- runtimec/vmbin/program.h | 216 ---------- runtimec/vmbin/reference.c | 52 --- runtimec/vmbin/reference.h | 49 --- runtimec/vmbin/signature.h | 68 ---- runtimec/vmbin/value.h | 60 --- runtimec/vmjit/backend.h | 19 +- runtimec/vmjit/backend/aarch64.c | 7 +- runtimec/vmjit/backend/backend.c | 4 +- runtimec/vmjit/backend/x86_64.c | 6 +- runtimec/vmjit/cache.h | 58 --- runtimec/vmjit/code.c | 46 +++ runtimec/vmjit/code.h | 15 +- runtimec/vmjit/code_memory.c | 49 +++ runtimec/vmjit/code_memory.h | 4 +- runtimec/vmjit/compiler.c | 61 +++ runtimec/vmjit/compiler.h | 46 ++- runtimec/vmjit/execution_interface.c | 14 + runtimec/vmjit/execution_interface.h | 14 +- runtimec/vmjit/lower.c | 27 ++ runtimec/vmjit/lower.h | 9 +- runtimec/vmjit/lowering_plan.c | 39 ++ runtimec/vmjit/lowering_plan.h | 54 +++ runtimec/vmjit/plan.h | 50 --- runtimec/vmjit/verifier.c | 26 ++ runtimec/vmjit/verifier.h | 16 +- runtimec/vmjit/vmjit.c | 306 +------------- runtimec/vmjit/vmjit.h | 41 +- runtimec/vmkv/compiler.h | 52 --- runtimec/vmkv/encoder.h | 56 +++ runtimec/vmkv/rwir.h | 5 +- runtimec/vmkv/source.h | 4 +- runtimec/vmkv/vmkv.c | 40 +- 107 files changed, 3257 insertions(+), 2310 deletions(-) rename runtimec/{vmbin/binding.c => binrwir/execution_binding.c} (58%) create mode 100644 runtimec/binrwir/execution_binding.h create mode 100644 runtimec/binrwir/execution_exit.h rename runtimec/{vmbin/frame.c => binrwir/execution_frame.c} (52%) create mode 100644 runtimec/binrwir/execution_frame.h create mode 100644 runtimec/binrwir/execution_plan.c create mode 100644 runtimec/binrwir/execution_plan.h create mode 100644 runtimec/binrwir/execution_plan_internal.h rename runtimec/{vmbin => binrwir}/instruction.c (60%) create mode 100644 runtimec/binrwir/instruction.h rename runtimec/{vmbin => binrwir}/program.c (58%) create mode 100644 runtimec/binrwir/program.h create mode 100644 runtimec/binrwir/reference.c create mode 100644 runtimec/binrwir/reference.h rename runtimec/{vmbin => binrwir}/signature.c (70%) create mode 100644 runtimec/binrwir/signature.h create mode 100644 runtimec/binrwir/value.h create mode 100644 runtimec/compiler/compiler.c create mode 100644 runtimec/compiler/compiler.h create mode 100644 runtimec/compiler/optimization.c create mode 100644 runtimec/compiler/optimization.h create mode 100644 runtimec/engine/compilation_repository.c create mode 100644 runtimec/engine/compilation_repository.h delete mode 100644 runtimec/engine/engine.c delete mode 100644 runtimec/engine/program_repository.h create mode 100644 runtimec/engine/session.c create mode 100644 runtimec/specification/myrwircap-binrwir-mapping.md create mode 100644 runtimec/tests/compiler_contracts_test.c delete mode 100644 runtimec/vmbin/binding.h delete mode 100644 runtimec/vmbin/exit.h delete mode 100644 runtimec/vmbin/frame.h delete mode 100644 runtimec/vmbin/instruction.h delete mode 100644 runtimec/vmbin/interpreter_dispatch.c delete mode 100644 runtimec/vmbin/interpreter_dispatch.h delete mode 100644 runtimec/vmbin/program.h delete mode 100644 runtimec/vmbin/reference.c delete mode 100644 runtimec/vmbin/reference.h delete mode 100644 runtimec/vmbin/signature.h delete mode 100644 runtimec/vmbin/value.h delete mode 100644 runtimec/vmjit/cache.h create mode 100644 runtimec/vmjit/code.c create mode 100644 runtimec/vmjit/code_memory.c create mode 100644 runtimec/vmjit/compiler.c create mode 100644 runtimec/vmjit/execution_interface.c create mode 100644 runtimec/vmjit/lower.c create mode 100644 runtimec/vmjit/lowering_plan.c create mode 100644 runtimec/vmjit/lowering_plan.h delete mode 100644 runtimec/vmjit/plan.h create mode 100644 runtimec/vmjit/verifier.c delete mode 100644 runtimec/vmkv/compiler.h create mode 100644 runtimec/vmkv/encoder.h diff --git a/runtimec/CMakeLists.txt b/runtimec/CMakeLists.txt index 87ac9add..0709cf56 100644 --- a/runtimec/CMakeLists.txt +++ b/runtimec/CMakeLists.txt @@ -1,10 +1,11 @@ # 组件:runtimec 顶层构建 -# 作用:C11-only 构建(不链接 libstdc++);按 contract/host/vmbin/vmkv/ -# vmjit/engine/interface 生成独立 target,并从 interface/exports.txt +# 作用:C11-only 构建(不链接 libstdc++);按 contract、host、binrwir、 +# vmkv、vmjit、compiler、vmbin、engine、interface 生成独立 target, +# 并从 interface/exports.txt # 生成三平台导出脚本(README §9、§10)。当前产物名刻意带 _scaffold,禁止用于 # benchmark/tutorial/发布。 -# 联系:各 target 的 include 只暴露 include/ 与自身私有目录;vmkv/vmbin -# 的 build test 不链 vmjit(README §10)。 +# 联系:组件依赖只沿本文件声明的单向图连接;只有 engine route 汇合 +# compiler、vmbin 与 vmjit。 cmake_minimum_required(VERSION 3.20) project(kvlang_runtimec_scaffold VERSION 0.1.0 LANGUAGES C) @@ -79,31 +80,11 @@ endfunction() runtimec_add_component(runtimec_contract contract) runtimec_add_component(runtimec_host host) - -set(RUNTIMEC_BINRWIR_SOURCES - "${CMAKE_CURRENT_SOURCE_DIR}/vmbin/instruction.c" - "${CMAKE_CURRENT_SOURCE_DIR}/vmbin/program.c" - "${CMAKE_CURRENT_SOURCE_DIR}/vmbin/reference.c" - "${CMAKE_CURRENT_SOURCE_DIR}/vmbin/signature.c") -foreach(binrwir_source IN LISTS RUNTIMEC_BINRWIR_SOURCES) - if(NOT EXISTS "${binrwir_source}") - message(FATAL_ERROR "required BinRWIR source is missing: ${binrwir_source}") - endif() -endforeach() -add_library(runtimec_binrwir STATIC ${RUNTIMEC_BINRWIR_SOURCES}) -runtimec_configure_target(runtimec_binrwir) - -file(GLOB_RECURSE RUNTIMEC_VMBIN_SOURCES CONFIGURE_DEPENDS - "${CMAKE_CURRENT_SOURCE_DIR}/vmbin/*.c") -list(REMOVE_ITEM RUNTIMEC_VMBIN_SOURCES ${RUNTIMEC_BINRWIR_SOURCES}) -if(NOT RUNTIMEC_VMBIN_SOURCES) - message(FATAL_ERROR "runtimec component runtimec_vmbin has no execution sources") -endif() -add_library(runtimec_vmbin STATIC ${RUNTIMEC_VMBIN_SOURCES}) -runtimec_configure_target(runtimec_vmbin) - +runtimec_add_component(runtimec_binrwir binrwir) runtimec_add_component(runtimec_vmkv vmkv) runtimec_add_component(runtimec_vmjit vmjit) +runtimec_add_component(runtimec_compiler compiler) +runtimec_add_component(runtimec_vmbin vmbin) runtimec_add_component(runtimec_engine engine) target_include_directories(runtimec_contract @@ -113,19 +94,23 @@ target_link_libraries(runtimec_host PRIVATE runtimec_contract) target_link_libraries(runtimec_binrwir PRIVATE runtimec_contract) -target_link_libraries(runtimec_vmbin - PRIVATE runtimec_contract runtimec_binrwir) target_link_libraries(runtimec_vmkv PRIVATE runtimec_contract runtimec_binrwir) target_link_libraries(runtimec_vmjit PRIVATE runtimec_contract runtimec_binrwir) +target_link_libraries(runtimec_compiler + PRIVATE runtimec_contract runtimec_binrwir runtimec_vmjit) +target_link_libraries(runtimec_vmbin + PRIVATE runtimec_contract runtimec_binrwir) target_link_libraries(runtimec_engine PRIVATE runtimec_contract runtimec_host - runtimec_vmbin + runtimec_binrwir runtimec_vmkv - runtimec_vmjit) + runtimec_compiler + runtimec_vmjit + runtimec_vmbin) target_compile_definitions(runtimec_vmjit PRIVATE RUNTIMEC_VMJIT_ENABLED=$) target_compile_definitions(runtimec_engine @@ -173,9 +158,10 @@ endif() add_library(kvlang::runtimec_contract ALIAS runtimec_contract) add_library(kvlang::runtimec_host ALIAS runtimec_host) add_library(kvlang::runtimec_binrwir ALIAS runtimec_binrwir) -add_library(kvlang::runtimec_vmbin ALIAS runtimec_vmbin) add_library(kvlang::runtimec_vmkv ALIAS runtimec_vmkv) add_library(kvlang::runtimec_vmjit ALIAS runtimec_vmjit) +add_library(kvlang::runtimec_compiler ALIAS runtimec_compiler) +add_library(kvlang::runtimec_vmbin ALIAS runtimec_vmbin) add_library(kvlang::runtimec_engine ALIAS runtimec_engine) add_library(kvlang::runtimec_interface ALIAS runtimec_interface) add_library(kvlang::runtimec_scaffold ALIAS kvlang_runtimec_scaffold) diff --git a/runtimec/README.md b/runtimec/README.md index 3583b3c5..b5712128 100644 --- a/runtimec/README.md +++ b/runtimec/README.md @@ -1,57 +1,61 @@ # runtimec 架构与实现总纲 -> 当前状态:目录、数据结构、函数边界和验收闸门已经建立;语言执行语义尚未实现。 +> 当前状态:目录、数据结构、函数边界和失败封闭骨架已经建立;语言执行语义尚未实现。 > `scaffold` 产物名必须保留到真实语义通过验收,防止骨架被误当成可发布实现。 -`runtimec/` 是 kvlang 唯一目标运行时。它使用 C11 实现,在一个清晰主干中同时 -容纳可恢复执行、RWIR 编译、BinRWIR 基线执行和 vmjit 加速。未实现的能力必须 -返回 `RUNTIMEC_STATUS_NOT_IMPLEMENTED`,非法输入必须返回 -`RUNTIMEC_STATUS_INVALID`;空值、零、`false` 或默认结构都不能伪装成功。 +`runtimec/` 是 kvlang 的全新 C11 运行时底座。它只允许一条从语言规范到执行的主干: +RWIR 先被等价编码为 canonical BinRWIR,再由顶层 BinRWIR Compiler 完成全部执行计划 +生成和执行目标判定,最后由 route 调用唯一已确定的执行入口。 + +未实现的能力必须返回 `RUNTIMEC_STATUS_NOT_IMPLEMENTED`,非法输入必须返回 +`RUNTIMEC_STATUS_INVALID`。空值、零、`false` 或默认结构不能伪装成功。 ## 1. 绝对原则 -1. **只有一条正常方向。** 正常完成只返回 `RUNTIMEC_STATUS_SUCCESS`;其它状态 - 必须准确说明暂停、等待、回退、未支持、未实现、非法输入、内存不足或错误。 -2. **只有一条执行主干。** `engine/route` 是唯一策略汇合点;任何组件都不能绕过它 - 自行选择 vmjit 或 vmbin。 -3. **只有一个正确性执行器。** vmbin 必须覆盖全部合法 BinRWIR;vmjit 可以拒绝, - 但不能成为正确性依赖。 -4. **只有一个事实源。** kvspace 明文保存可恢复语义事实;BinRWIR Program、寄存器 - 缓存、机器码和分析结果都可删除并重建。 -5. **错误立即停止。** 不猜测输入、不截断、不静默修复、不转入另一套入口。 -6. **不保留旧入口。** 公共层只有 `include/kvlang/runtimec.h` 和 +1. **只有一条正常方向。** 正常完成只返回 `RUNTIMEC_STATUS_SUCCESS`;其它状态必须 + 准确说明暂停、等待、未支持、未实现、非法输入、内存不足或错误。 +2. **语义先于实现。** `myrwircaps` 与 RWIR specification 定义 runtimec 能处理的 + RWIR;五语言矩阵先裁决行为,代码只实现已裁决语义。 +3. **等价生成。** vmkv 只验证 RWIR,并等价生成 canonical BinRWIR;它不优化、不选择 + 执行器、不生成机器码。 +4. **编译期一次决定。** BinRWIR Compiler 生成 execution plan,并在编译阶段把 + compilation 的执行目标确定为 VMJIT 或 VMBIN。 +5. **执行期不改决定。** route 只读取 compilation 中已经确定的目标,并且只调用一个 + 执行入口;执行期间不得重新判定、改选或隐式降级。 +6. **只有一个策略汇合点。** `engine/route.c` 是唯一同时看见 vmkv、Compiler、vmjit + 和 vmbin 的文件,也是唯一执行调度与提交入口。 +7. **错误立即停止。** 不猜测输入、不截断、不静默修复、不把错误转换成另一条路径。 +8. **不保留旧入口。** 公共层只有 `include/kvlang/runtimec.h` 和 `interface/public_interface.c` 定义的结构化接口。 -7. **行为先决策后实现。** 任何语言行为先填写五语言矩阵,再进入 specification - manifest 或执行代码。 -8. **名字表达完整含义。** 除 runtimec、RWIR、BinRWIR、vmkv、vmbin、vmjit、 - kvspace、vthread 和 langtype 外,自造缩写必须展开。 -9. **Less code, more useful capability.** 不为错误分层增加修补代码,不建立第三执行器。 +9. **Less code, more useful capability.** 不建立第三执行器,不为错误分层增加修补代码。 ## 2. 唯一主干 ```text -public interface - -> engine route - -> vmkv reads and compiles RWIR - -> immutable BinRWIR Program - -> vmjit try - -> executed - -> fallback to vmbin - -> route commits effects and checkpoint +myrwircaps + RWIR specification + -> vmkv validates RWIR and emits equivalent canonical BinRWIR + -> BinRWIR Compiler builds execution plan + -> compile-time target decision: VMJIT or VMBIN + -> compilation repository caches the complete compilation + -> engine route reads the decided target before execution + -> vmjit_execute or vmbin_execute + -> route commits complete effects and checkpoint ``` -主干含义不能重排: - -- `engine/route.c` 选择并驱动执行路径。 -- `vmkv` 读取 kvspace 中的 RWIR,完成解析、校验、类型固化和 Program 构造。 -- `vmbin` 拥有不可变 BinRWIR Program 和全部基线语义。 -- `vmjit` 只读取已经验证的 Program;无法证明安全时返回 - `RUNTIMEC_STATUS_FALLBACK`。 -- route 将同一 Program 和可恢复状态交给 vmbin,随后提交 effect、program counter - 和 checkpoint。 - -generic、typed、fused 和 continuous execution 都是 vmbin 内部 handler 选择, -不是新组件,也没有第二个公开执行入口。 +主干顺序不能重排: + +- `specification/` 保存行为决策、RWIR 操作事实及 myrwircap 到 canonical BinRWIR 的映射。 +- `vmkv/` 从 kvspace 读取 RWIR,验证后只生成语义等价的 canonical BinRWIR Program。 +- `binrwir/` 拥有中立的 Program、instruction、reference、signature、execution frame、 + execution exit 与 execution plan 合同;它不属于 vmbin。 +- `compiler/` 是顶层 BinRWIR Compiler。它从 canonical Program 派生 execution plan, + 请求 vmjit 编译,并形成不可再改选的 compilation。 +- `engine/compilation_repository` 缓存完整 compilation,使 canonical Program、execution + plan 和可选机器码在同一租约内有效。 +- `engine/route` 在执行前读取 `binrwir_execution_target_t`。目标为 VMJIT 时只调用 + `vmjit_execute`;目标为 VMBIN 时只调用 `vmbin_execute`。 +- `vmjit_execute` 只执行已经生成的机器码;`vmbin_execute` 执行 canonical Program, + 并可消费 Compiler 生成的 execution plan。两者都不能改变 compilation 的目标。 ## 3. 目录主干 @@ -59,78 +63,130 @@ generic、typed、fused 和 continuous execution 都是 vmbin 内部 handler 选 runtimec/ ├── include/kvlang/runtimec.h # 唯一公共 C 头 ├── interface/ # 公共请求、结果与精确导出名单 -│ ├── public_interface.c -│ └── exports.txt -├── contract/ # 跨组件状态、错误、所有权和 host port +├── contract/ # 跨组件状态、错误、所有权与主机服务合同 ├── host/ # kvspace 与外部能力适配 -├── vmkv/ # RWIR -> BinRWIR Program -├── vmbin/ # BinRWIR 所有者与正确性执行器 -│ ├── value.h +├── specification/ # 行为、RWIR 与 canonical 映射事实源 +├── vmkv/ # RWIR 验证与等价 BinRWIR 生成 +├── binrwir/ # 中立 canonical Program 与执行数据合同 +│ ├── instruction.* │ ├── reference.* │ ├── signature.* -│ ├── instruction.* │ ├── program.* -│ ├── binding.* -│ ├── frame.* -│ ├── call.* -│ ├── interpreter.* -│ └── exit.h -├── vmjit/ # 可拒绝的机器码加速器 -│ ├── execution_interface.h -│ ├── verifier.h -│ ├── plan.h -│ ├── lower.h -│ ├── backend.h -│ └── backend/ -├── engine/ # session、Program repository、唯一 route -├── specification/ # 行为与 RWIR manifest 的单一事实源 -├── documentation/architecture/ # 架构说明、矩阵与 Mermaid 源 -├── tools/architecture/ # 名称、依赖、矩阵、导出闸门 -└── tests/ # 公共接口、结构合同和失败封闭测试 +│ ├── execution_binding.* +│ ├── execution_frame.* +│ ├── execution_exit.h +│ └── execution_plan.* +├── compiler/ # 顶层 BinRWIR 编译与优化唯一所有者 +│ ├── compiler.* # compilation、目标判定、vmjit 请求 +│ └── optimization.* # 六类 execution plan 优化 +├── vmbin/ # 完整 BinRWIR 基线执行器 +├── vmjit/ # 已验证 BinRWIR 的机器码编译与确定执行 +│ ├── compiler.* # 唯一 Program + plan → code 入口 +│ ├── verifier.* # 编译期 eligibility +│ ├── lowering_plan.* # execution plan 的目标绑定 +│ ├── lower.* # lowering plan → backend request +│ ├── backend/ # x86_64 与 AArch64 并列实现 +│ ├── code_memory.* # 可写到可执行的内存发布 +│ ├── code.* # 已发布机器码句柄 +│ ├── execution_interface.* # 机器码调用合同 +│ └── vmjit.* # 仅确定执行入口 +├── engine/ # owner graph、唯一 compilation cache、唯一 route +│ ├── session.* # runtimec owner graph 根 +│ ├── compilation_repository.* # 完整 compilation 的唯一缓存 +│ └── route.* # 执行前单选目标与提交 +├── documentation/architecture/ # 架构说明与 Mermaid 源 +├── tools/architecture/ # 名称、依赖、矩阵与导出闸门 +└── tests/ # 公共合同与失败封闭测试 ``` -组件没有源文件时,CMake 配置必须 `FATAL_ERROR`。禁止生成空翻译单元让缺失组件 -看似构建成功。 +组件没有源文件时,构建配置必须立即失败。禁止生成空翻译单元让缺失组件看似成功。 -## 4. BinRWIR 主干 +## 4. Specification 与 canonical 映射 -### 4.1 所有权 +`myrwircaps` 表示本 runtime 能就地兑现的 RWIR capability 集合。runtimec 不使用数组 +下标、文件顺序或声明顺序作为操作身份。每个 myrwircap 必须在 +`specification/rwir_catalog.def` 中拥有一条且只有一条映射记录,该记录必须显式给出: -BinRWIR 属于 vmbin,不属于 vmkv 或 vmjit: +- 稳定 RWIR operation identifier; +- myrwircap 的规范名称; +- 唯一 canonical BinRWIR operation identifier; +- Read 参数与 Write 参数结构; +- 五语言行为决策引用。 -- vmkv 只能通过 Program builder 构造它; -- vmbin 解释它并定义全部合法行为; -- vmjit 只消费只读 Program view; -- Program finalize 后不可变; -- profile、编译计划、机器码缓存和融合计划是可丢弃 sidecar。 +稳定 identifier 是规范数据,不是容器位置。重新排序 manifest、插入新操作或改变生成器 +都不能改变既有 identifier;已删除 identifier 不得复用。以下情况都是编译错误: + +- myrwircap 没有 canonical 映射; +- 同一个 myrwircap 出现多条映射; +- 两条记录复用同一个稳定 identifier; +- 名称、identifier、参数方向或行为决策无法得到唯一结果。 + +vmkv 必须逐条执行这个映射并保持语义等价。它不能用近似操作、默认操作、未知操作或 +数组位置补洞。完整规则见 `specification/myrwircap-binrwir-mapping.md`。 -### 4.2 参数数量 +## 5. BinRWIR 中立合同 -BinRWIR 必须保留 RWIR 的不固定参数数量语义,但编译完成后每条指令的读取数量和 -写入数量固定。常用形式使用紧凑 instruction header;超出紧凑范围时引用冷侧表。 -无论底层表示如何,消费者只看到一个规范化 view: +BinRWIR 属于顶层 `binrwir/`,不属于 vmkv、vmbin 或 vmjit: + +- vmkv 通过 builder 构造 canonical Program; +- Compiler 只读 canonical Program 并派生 execution plan; +- vmbin 与 vmjit 消费相同的中立合同; +- Program finalize 后不可变; +- execution plan、机器码、profile 与缓存都是可删除并重建的派生状态。 + +BinRWIR 保留 RWIR 的不固定参数数量语义,但编译完成后每条 instruction 的 Read 数量 +与 Write 数量固定。消费者只看到规范化顺序: ```text [ReadReference ...][WriteReference ...] ``` -不得截断参数,也不得为了编码方便把一个具有原子语义的 RWIR 操作拆成多个可观察 -操作。 +紧凑 instruction header 覆盖常见参数数量,宽形式可引用冷侧表。编码限制不能成为截断 +参数或拆分一个原子 RWIR 操作的理由。 + +## 6. BinRWIR Compiler + +`compiler/` 负责 canonical BinRWIR 之后、执行之前的全部派生工作: + +1. 验证 canonical Program 与 specification identity。 +2. 生成 execution plan,包括指令编码、类型固化、KV 寻址、指令融合、虚拟寄存器和 + 控制流派生信息。 +3. 在启用 vmjit 时请求 vmjit verifier、lowering 与 backend 生成机器码。 +4. 把 Program、execution plan、已决定目标与可选机器码封装为 compilation。 + +vmjit 编译判定只有以下三种有意义的方向;顶层 compilation 对象只在前两种成功 +方向产生,因此不存在可观察的“正在编译”或“错误 compilation”对象: -### 4.3 五条优化主线 +| Compiler 判定 | 调用状态 | compilation 内容 | 后续方向 | +|---|---|---|---| +| `COMPILED` | `RUNTIMEC_STATUS_SUCCESS` | VMJIT 目标、Program、plan、机器码 | route 只调用 `vmjit_execute` | +| `NOT_COMPILABLE` | `RUNTIMEC_STATUS_SUCCESS` | VMBIN 目标、Program、plan、无机器码 | route 只调用 `vmbin_execute` | +| `ERROR` | 明确错误状态 | 不产生可执行 compilation | 立即停止 | -1. 指令编码:减少解析与分发。 -2. 类型固化:把已经确定的具体类型写入特化指令。 -3. 指令融合:以 sidecar 计划选择更少的内部 handler,不改变 Program 语义。 -4. 寄存器优化:中间结果留在寄存器或派生 Cell 中,提交边界再物化。 -5. 控制流优化:减少分支和调度,同时保留逐 source instruction 的观察点。 +`NOT_COMPILABLE` 是成功完成的可编译性判定,不是执行错误。未知目标架构、明确不支持的 +操作或无法满足机器码执行合同可以得到该判定。非法 BinRWIR、映射不完整、内存不足与 +内部错误必须进入 `ERROR` 并立即返回,不能生成 VMBIN compilation。 -这些都是 vmbin 或 vmjit 的优化方法,不产生第三执行器。 +## 7. Repository 与 route -## 5. Read/Write 与别名 +repository 的缓存单位是 compilation,不是裸 Program、裸 execution plan 或裸机器码。 +缓存键至少绑定 authoritative snapshot、RWIR manifest version、canonical encoding +revision、BinRWIR binary interface generation 与 compiler revision。租约保证 execution +期间 compilation 的全部对象同时有效。 +vmjit 不建立第二套 code cache,也不存在绕过顶层 Compiler 的 `get_or_compile` 入口。 -RWIR 和 BinRWIR 都只有读取参数与写入参数。原地算法通过显式别名绑定同一 canonical -Cell,不引入第三种参数方向: +route 的“选择”只表示读取已经编译好的 `execution_target` 并调用对应入口。route 不再次 +询问 vmjit 是否可用,不重新验证 eligibility,也不在一个入口返回后调用另一个入口。执行 +错误、机器码错误和内部错误都沿原路径报告并停止。 + +只有完整 instruction effect 成功后,route 才按 values → logical program counter → +status/error 的顺序提交 checkpoint。kvspace 明文状态始终是可恢复语义事实;compilation +及其缓存可以删除并从同一事实重建。 + +## 8. Read/Write 与别名 + +RWIR 和 BinRWIR 只有 Read 参数与 Write 参数。原地算法通过显式别名把两个不同 register +绑定到同一个 canonical Cell,不引入第三种参数方向: ```text Read register ──> Binding ──┐ @@ -138,114 +194,88 @@ Read register ──> Binding ──┐ Write register ──> Binding ──┘ ``` -- 读取 register 只能读,写入 register 只能写。 +- Read register 只能读,Write register 只能写。 - 两个 register identifier 始终不同,即使 Binding 指向同一 Cell。 - callee Signature 是 alias policy 的唯一拥有者。 -- 写入后,后续通过读取别名看到新值,并遵循程序顺序。 +- 写入后,后续通过 Read 别名看到新值,并遵循程序顺序。 - 未声明允许的别名立即返回 `RUNTIMEC_STATUS_INVALID`。 -- 跨 frame 别名依靠 canonical Cell identity,不建立 pointer chain。 +- Compiler 的优化必须保留别名依赖与每个 source logical program counter 的观察边界。 + +## 9. 组件边界 -## 6. vmjit 边界 +### vmkv -vmjit 只做加速:verify、plan、lower、backend、code memory 和 execute。它不能: +vmkv 只做 RWIR source 读取、结构验证、稳定 identifier 解析和 canonical BinRWIR 生成。 +类型固化、融合、执行计划、机器码、缓存与执行目标都不属于 vmkv。 -- 读取或解析 RWIR; -- 访问具体 kvspace 类型; -- 定义 opcode 或 builtin 语义; -- 修改不可变 Program; -- 吞掉 guard、机器码生成或平台不支持错误; -- 绕过 route 提交 effect。 +### vmbin -x86_64 与 AArch64 是同一 backend contract 的并列实现。任一实现缺失时,该平台明确 -回退 vmbin,不能报告 vmjit 可用。 +vmbin 实现全部合法 canonical BinRWIR 的基线语义。generic、typed、fused 与 continuous +handler 只能是 `vmbin_execute` 背后的内部策略,不能成为额外执行入口。 -## 7. 状态与提交 +### vmjit -`runtimec_status_t` 的唯一成功值是 `RUNTIMEC_STATUS_SUCCESS`。控制状态与错误状态 -不可混用: +vmjit 只做已验证 BinRWIR 的机器码 eligibility、lowering、backend 生成和已生成机器码 +执行。可编译性必须在 compilation 建立期间确定;`vmjit_execute` 不接收 RWIR,不访问 +kvspace,不依赖 vmbin,也不拥有执行目标选择能力。 + +## 10. 状态与错误 + +`runtimec_status_t` 的唯一成功值是 `RUNTIMEC_STATUS_SUCCESS`: - `YIELD`、`WAIT`:执行尚未正常完成; -- `FALLBACK`:vmjit 没有执行,route 必须转入 vmbin; -- `UNSUPPORTED`:当前能力不接受该操作; -- `NOT_IMPLEMENTED`:骨架没有该能力; +- `UNSUPPORTED`:当前合同明确不接受该能力; +- `NOT_IMPLEMENTED`:骨架尚无该能力; - `INVALID`:输入违反合同; - `OUT_OF_MEMORY`、`ERROR`:明确失败。 -所有输出参数先进入无效或空状态,再开始可能失败的工作。只有完整 instruction effect -成功后,route 才按 values → program counter → status/error 的顺序提交 checkpoint。 +`COMPILED` 与 `NOT_COMPILABLE` 是 vmjit 编译判定,不是替代 `runtimec_status_t` 的 +第二套调用状态。`ERROR` 只通过明确错误状态返回,并且不产生 compilation。所有输出 +参数必须先进入明确无效状态,再开始可能失败的工作。 -## 8. 五语言决策矩阵 +## 11. 五语言决策矩阵 `specification/five-language-behavior-matrix.md` 是语言行为决策的唯一事实源。 - C、Python、Rust、Go、V8/TypeScript 一致:kvlang 必须遵从。 - 五家分裂:记录选择阵营、原因、边界 fixture 和非法输入结果。 -- 每个 specification manifest 条目都必须带 - `behavior-decision: ` 并引用已有行。 -- 没有矩阵记录,不能添加 specification 条目或执行语义。 - -`tools/architecture/check_behavior_matrix.py` 强制检查以上规则。矩阵变化是语言变化, -必须与对应 fixture 和设计记录同时评审。 +- 每个 specification manifest 条目必须引用已有 `behavior-decision`。 +- 没有矩阵记录,不能添加 myrwircap 映射、canonical operation 或执行语义。 -## 9. 公共接口 - -公共层只安装 `include/kvlang/runtimec.h`,只导出 `interface/exports.txt` 中的符号。 -当前结构化入口是 create、execute、destroy;请求、结果、错误和调用方 buffer 都有明确 -类型。公共头不暴露 RWIR、BinRWIR、vmkv、vmbin、vmjit 或 kvspace 内部结构。 - -CMake 从导出清单生成 Linux、macOS 和 Windows 的平台导出文件, -`check_exports.py` 对最终动态库逐名复核。多一个或少一个符号都失败。 - -## 10. 依赖方向 +## 12. 依赖方向 允许方向: ```text -public header -> public header interface -> public header + contract + engine -engine/route -> host + vmkv + BinRWIR + vmjit + vmbin -vmkv -> contract + BinRWIR build contract -vmbin -> contract + BinRWIR -vmjit -> contract + read-only BinRWIR execution contract +engine/route -> host + vmkv + compiler + binrwir + vmjit + vmbin +engine/compilation_repository -> compiler + contract +compiler -> contract + binrwir + vmjit compile contracts +vmkv -> contract + binrwir build contracts + specification generated facts +vmbin -> contract + binrwir execution contracts +vmjit -> contract + binrwir execution contracts host -> contract + external kvspace interface ``` 禁止方向: ```text -vmkv -> vmjit -vmbin -> vmjit -vmjit -> vmkv -vmjit -> concrete host implementation -any VM component -> concrete kvspace type +binrwir -> vmkv/vmbin/vmjit/engine +vmkv -> compiler/vmbin/vmjit +vmbin -> vmkv/vmjit/compiler +vmjit -> vmkv/vmbin/concrete host +repository -> vmkv/vmbin/vmjit engine files other than route -> vmkv/vmbin/vmjit public header -> internal runtimec header ``` -`tools/architecture/check_layers.py` 检查 include graph 和 route 唯一性;新增依赖失败时, -先修正文件所有权,不扩大允许表。 - -## 11. 名称规则 - -允许保留的 kvlang 原子术语: - -```text -kvlang kvspace runtimec RWIR BinRWIR vmkv vmbin vmjit vthread langtype -``` - -其它名称按 C、Python、Rust、Go 和 V8/TypeScript 的主流直觉写完整单词。例如使用 -`argument`、`buffer`、`context`、`descriptor`、`identifier`、`program_counter`、 -`reference`、`request`、`source`,不用其缩写。 - -`tools/architecture/check_names.py` 还会拒绝: +## 13. 公共接口、名称与验收 -- 旧目录名和非唯一公共头; -- 非唯一的成功状态名; -- 任何其它中间表示名称; -- 独立快速内核、执行窗口和其它第三执行器名称; -- 旧类型、宏和测试前缀。 +公共层只安装 `include/kvlang/runtimec.h`,只导出 `interface/exports.txt` 中的符号。 +公共头不暴露 RWIR、BinRWIR、vmkv、Compiler、vmbin、vmjit 或 kvspace 内部结构。 -## 12. 验收 +除 kvlang、kvspace、runtimec、RWIR、BinRWIR、vmkv、vmbin、vmjit、vthread、langtype +及 C 标准类型外,自造名称使用完整单词,不保留旧名称别名或转发头。 最小 fresh 验收: @@ -256,29 +286,20 @@ cmake --build /tmp/kvlang-runtimec-build --parallel ctest --test-dir /tmp/kvlang-runtimec-build --output-on-failure ``` -验收必须覆盖: - -- 唯一公共头在 C11 与 C++17 中可直接包含; -- 公共函数声明和精确导出清单一致; -- 未实现入口失败封闭并清空输出; -- BinRWIR 跨组件紧凑结构尺寸; -- 唯一状态名、完整名称和零第三执行器; -- route 唯一性与依赖方向; -- 五语言矩阵完整且所有语义引用存在。 - 语义实现后按 shared memory → benchmark quick → benchmark full → tutorial 的顺序验证。 当前 scaffold 没有执行语义,不运行 benchmark 或 tutorial。 -## 13. DeepSeek 实现合同 +## 14. 后续实现合同 实现前按此顺序读取: 1. `README.md` 2. `documentation/architecture/runtimec-architecture.md` -3. `specification/five-language-behavior-matrix.md` -4. `specification/README.md` -5. 目标组件头文件 - -每次实现只沿主干增加真实能力:先矩阵和合同,再 vmkv 编译,再 vmbin 正确性,最后 -vmjit 加速。遇到不清楚的输入或状态必须失败,不能添加第二入口、旧名字别名、空组件 -兜底或隐藏执行路径。 +3. `specification/README.md` +4. `specification/myrwircap-binrwir-mapping.md` +5. `specification/five-language-behavior-matrix.md` +6. 目标组件头文件 + +每次实现只沿唯一主干增加真实能力:先 specification 与映射,再 vmkv 等价生成,再 +Compiler 形成 compilation,最后实现两个确定执行入口。遇到不清楚的输入、映射或状态 +必须失败,不能添加旧名字别名、隐藏执行路径或空组件兜底。 diff --git a/runtimec/vmbin/binding.c b/runtimec/binrwir/execution_binding.c similarity index 58% rename from runtimec/vmbin/binding.c rename to runtimec/binrwir/execution_binding.c index 68444157..b95af4bb 100644 --- a/runtimec/vmbin/binding.c +++ b/runtimec/binrwir/execution_binding.c @@ -1,14 +1,14 @@ /* - * 组件:vmbin/binding 的实现 + * 组件:binrwir/execution_binding 的实现 * 作用:Cell 与 Binding 的安全重置和失败桩。 * 约束:未实现操作不得伪造值或版本。 */ -#include "vmbin/binding.h" +#include "binrwir/execution_binding.h" #include -runtimec_status_t vmbin_cell_reset(vmbin_cell_t *cell) { +runtimec_status_t binrwir_cell_reset(binrwir_cell_t *cell) { if (cell == NULL) { return RUNTIMEC_STATUS_INVALID; } @@ -16,15 +16,15 @@ runtimec_status_t vmbin_cell_reset(vmbin_cell_t *cell) { return RUNTIMEC_STATUS_SUCCESS; } -runtimec_status_t vmbin_cell_invalidate(vmbin_cell_t *cell) { +runtimec_status_t binrwir_cell_invalidate(binrwir_cell_t *cell) { if (cell == NULL) { return RUNTIMEC_STATUS_INVALID; } return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_cell_query(const vmbin_cell_t *cell, - vmbin_value_slot_t *output_value, +runtimec_status_t binrwir_cell_query(const binrwir_cell_t *cell, + binrwir_value_slot_t *output_value, uint64_t *output_mutation_version) { if (output_value != NULL) { memset(output_value, 0, sizeof(*output_value)); @@ -39,31 +39,31 @@ runtimec_status_t vmbin_cell_query(const vmbin_cell_t *cell, return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_binding_reset(vmbin_binding_t *binding) { +runtimec_status_t binrwir_binding_reset(binrwir_binding_t *binding) { if (binding == NULL) { return RUNTIMEC_STATUS_INVALID; } memset(binding, 0, sizeof(*binding)); - binding->register_identifier = VMBIN_REGISTER_IDENTIFIER_NONE; + binding->register_identifier = BINRWIR_REGISTER_IDENTIFIER_NONE; return RUNTIMEC_STATUS_SUCCESS; } -runtimec_status_t vmbin_binding_bind(vmbin_binding_t *binding, +runtimec_status_t binrwir_binding_bind(binrwir_binding_t *binding, uint32_t register_identifier, - vmbin_binding_access_t access, - vmbin_cell_t *cell) { + binrwir_binding_access_t access, + binrwir_cell_t *cell) { if (binding == NULL || - register_identifier == VMBIN_REGISTER_IDENTIFIER_NONE || - (access != VMBIN_BINDING_ACCESS_READ && - access != VMBIN_BINDING_ACCESS_WRITE) || + register_identifier == BINRWIR_REGISTER_IDENTIFIER_NONE || + (access != BINRWIR_BINDING_ACCESS_READ && + access != BINRWIR_BINDING_ACCESS_WRITE) || cell == NULL) { return RUNTIMEC_STATUS_INVALID; } return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_binding_read(vmbin_binding_t *binding, - vmbin_value_slot_t *output_value) { +runtimec_status_t binrwir_binding_read(binrwir_binding_t *binding, + binrwir_value_slot_t *output_value) { if (output_value != NULL) { memset(output_value, 0, sizeof(*output_value)); } @@ -73,15 +73,15 @@ runtimec_status_t vmbin_binding_read(vmbin_binding_t *binding, return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_binding_write(vmbin_binding_t *binding, - const vmbin_value_slot_t *value) { +runtimec_status_t binrwir_binding_write(binrwir_binding_t *binding, + const binrwir_value_slot_t *value) { if (binding == NULL || value == NULL) { return RUNTIMEC_STATUS_INVALID; } return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_binding_invalidate(vmbin_binding_t *binding) { +runtimec_status_t binrwir_binding_invalidate(binrwir_binding_t *binding) { if (binding == NULL) { return RUNTIMEC_STATUS_INVALID; } diff --git a/runtimec/binrwir/execution_binding.h b/runtimec/binrwir/execution_binding.h new file mode 100644 index 00000000..cecca074 --- /dev/null +++ b/runtimec/binrwir/execution_binding.h @@ -0,0 +1,91 @@ +#ifndef BINRWIR_EXECUTION_BINDING_H +#define BINRWIR_EXECUTION_BINDING_H + +/* + * 组件:binrwir/execution_binding + * 作用:Binding 将一个有方向的寄存器映射到 canonical Cell。 + * 联系:execution frame 持有 Cell 与 Binding;vmbin 与 vmjit 按同一 + * 签名检查显式别名。 + * 约束:不同读写寄存器可以指向同一 Cell;Cell 可从 kvspace 重建。 + */ + +#include + +#include "contract/status.h" +#include "binrwir/value.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define BINRWIR_CELL_IDENTIFIER_NONE UINT32_MAX +#define BINRWIR_REGISTER_IDENTIFIER_NONE UINT32_MAX + +typedef enum binrwir_cell_state { + BINRWIR_CELL_UNKNOWN = 0, + BINRWIR_CELL_ABSENT = 1, + BINRWIR_CELL_PRESENT = 2, + BINRWIR_CELL_INVALID = 3 +} binrwir_cell_state_t; + +typedef enum binrwir_cell_flags { + BINRWIR_CELL_FLAG_NONE = 0, + BINRWIR_CELL_FLAG_DIRTY = 1U << 0, + BINRWIR_CELL_FLAG_MATERIALIZED = 1U << 1, + BINRWIR_CELL_FLAG_PINNED = 1U << 2, + BINRWIR_CELL_FLAG_BORROWED = 1U << 3 +} binrwir_cell_flags_t; + +typedef enum binrwir_binding_access { + BINRWIR_BINDING_ACCESS_NONE = 0, + BINRWIR_BINDING_ACCESS_READ = 1U << 0, + BINRWIR_BINDING_ACCESS_WRITE = 1U << 1 +} binrwir_binding_access_t; + +typedef enum binrwir_binding_flags { + BINRWIR_BINDING_FLAG_NONE = 0, + BINRWIR_BINDING_FLAG_PARAMETER = 1U << 0, + BINRWIR_BINDING_FLAG_LOCAL = 1U << 1 +} binrwir_binding_flags_t; + +typedef struct binrwir_cell { + binrwir_value_slot_t value; /* staged 值(32 字节目标中立槽) */ + uint64_t storage_identifier; /* canonical logical storage 身份 */ + uint64_t storage_generation; /* 外部写/relocation 后变化 */ + uint64_t mutation_version; /* 写后递增,读缓存据此失效 */ + uint16_t state; /* binrwir_cell_state_t */ + uint16_t flags; /* binrwir_cell_flags_t(dirty/pinned 等) */ + uint32_t reserved_32_bits; +} binrwir_cell_t; + +typedef struct binrwir_binding { + binrwir_cell_t *cell; /* canonical Cell;可被多个 Binding 共享 */ + uint64_t observed_version; /* 上次读到的 mutation_version */ + uint32_t register_identifier; /* 程序中有方向的寄存器标识符 */ + uint16_t access; /* binrwir_binding_access_t */ + uint16_t flags; /* binrwir_binding_flags_t */ +} binrwir_binding_t; + +runtimec_status_t binrwir_cell_reset(binrwir_cell_t *cell); +runtimec_status_t binrwir_cell_invalidate(binrwir_cell_t *cell); +runtimec_status_t binrwir_cell_query(const binrwir_cell_t *cell, + binrwir_value_slot_t *output_value, + uint64_t *output_mutation_version); +runtimec_status_t binrwir_binding_reset(binrwir_binding_t *binding); +runtimec_status_t binrwir_binding_bind(binrwir_binding_t *binding, + uint32_t register_identifier, + binrwir_binding_access_t access, + binrwir_cell_t *cell); +runtimec_status_t binrwir_binding_read(binrwir_binding_t *binding, + binrwir_value_slot_t *output_value); +runtimec_status_t binrwir_binding_write(binrwir_binding_t *binding, + const binrwir_value_slot_t *value); +runtimec_status_t binrwir_binding_invalidate(binrwir_binding_t *binding); +_Static_assert(sizeof(binrwir_cell_t) == 64U, + "binrwir cells must remain 64 bytes"); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/binrwir/execution_exit.h b/runtimec/binrwir/execution_exit.h new file mode 100644 index 00000000..67d0f157 --- /dev/null +++ b/runtimec/binrwir/execution_exit.h @@ -0,0 +1,59 @@ +#ifndef BINRWIR_EXECUTION_EXIT_H +#define BINRWIR_EXECUTION_EXIT_H + +/* + * 组件:binrwir/execution_exit + * 作用:表达 vmbin 或 vmjit 离开执行窗口的唯一结构化结果。 + * 联系:engine route 消费退出并决定调用、交接、恢复或报错。 + * 约束:不得携带需要持久化的机器地址或伪造成功状态。 + */ + +#include + +#include "contract/status.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define BINRWIR_EXECUTION_PROGRAM_COUNTER_NONE UINT32_MAX + +typedef enum binrwir_execution_exit_kind { + BINRWIR_EXECUTION_EXIT_NONE = 0, + BINRWIR_EXECUTION_EXIT_DONE, + BINRWIR_EXECUTION_EXIT_CALL, + BINRWIR_EXECUTION_EXIT_BUILTIN, + BINRWIR_EXECUTION_EXIT_HANDOFF, + BINRWIR_EXECUTION_EXIT_YIELD, + BINRWIR_EXECUTION_EXIT_DEOPTIMIZATION, + BINRWIR_EXECUTION_EXIT_ERROR +} binrwir_execution_exit_kind_t; + +typedef enum binrwir_execution_exit_flags { + BINRWIR_EXECUTION_EXIT_FLAG_NONE = 0, + BINRWIR_EXECUTION_EXIT_FLAG_FRAME_MATERIALIZED = 1U << 0, + BINRWIR_EXECUTION_EXIT_FLAG_RETRY_LOGICAL_PROGRAM_COUNTER = 1U << 1 +} binrwir_execution_exit_flags_t; + +typedef struct binrwir_execution_exit { + uint16_t kind; /* binrwir_execution_exit_kind_t */ + uint16_t flags; /* binrwir_execution_exit_flags_t */ + runtimec_status_t status; /* 组件状态,与结构化退出原因正交 */ + uint32_t logical_program_counter; + uint32_t resume_logical_program_counter; + uint32_t detail_code; /* 结构化细节码(拒绝原因/错误分类) */ + uint32_t target_identifier; + uint32_t value_base; /* 退出携带值的起始槽(如需要) */ + uint32_t value_count; /* 退出携带值的数量 */ + uint64_t payload_low; /* 有限普通数据负载,低 64 位 */ + uint64_t payload_high; /* 有限普通数据负载,高 64 位 */ +} binrwir_execution_exit_t; + +_Static_assert(sizeof(binrwir_execution_exit_t) == 48U, + "binrwir structured exit must remain 48 bytes"); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmbin/frame.c b/runtimec/binrwir/execution_frame.c similarity index 52% rename from runtimec/vmbin/frame.c rename to runtimec/binrwir/execution_frame.c index 181fdea8..97262aee 100644 --- a/runtimec/vmbin/frame.c +++ b/runtimec/binrwir/execution_frame.c @@ -1,17 +1,18 @@ /* - * 组件:vmbin/frame 的实现 + * 组件:binrwir/execution_frame 的实现 * 作用:安全初始化和重置 Frame,其余入口保持失败关闭。 * 约束:Frame 不拥有 Program、Cell 或 Binding 存储。 */ -#include "vmbin/frame.h" +#include "binrwir/execution_frame.h" #include -runtimec_status_t vmbin_frame_initialize( - vmbin_frame_t *frame, const vmbin_program_t *program, - vmbin_frame_t *parent, vmbin_cell_t *cells, size_t cell_count, - vmbin_binding_t *bindings, size_t binding_count, +runtimec_status_t binrwir_execution_frame_initialize( + binrwir_execution_frame_t *frame, const binrwir_program_t *program, + binrwir_execution_frame_t *parent, binrwir_cell_t *cells, + size_t cell_count, + binrwir_binding_t *bindings, size_t binding_count, uint64_t snapshot_generation, uint64_t program_generation, uint32_t logical_program_counter) { if (frame == NULL) { @@ -33,11 +34,12 @@ runtimec_status_t vmbin_frame_initialize( frame->snapshot_generation = snapshot_generation; frame->program_generation = program_generation; frame->logical_program_counter = logical_program_counter; - frame->flags = VMBIN_FRAME_FLAG_INITIALIZED; + frame->flags = BINRWIR_EXECUTION_FRAME_FLAG_INITIALIZED; return RUNTIMEC_STATUS_SUCCESS; } -runtimec_status_t vmbin_frame_reset(vmbin_frame_t *frame) { +runtimec_status_t binrwir_execution_frame_reset( + binrwir_execution_frame_t *frame) { if (frame == NULL) { return RUNTIMEC_STATUS_INVALID; } @@ -45,59 +47,60 @@ runtimec_status_t vmbin_frame_reset(vmbin_frame_t *frame) { return RUNTIMEC_STATUS_SUCCESS; } -runtimec_status_t vmbin_frame_destroy(vmbin_frame_t *frame) { - return vmbin_frame_reset(frame); +runtimec_status_t binrwir_execution_frame_destroy( + binrwir_execution_frame_t *frame) { + return binrwir_execution_frame_reset(frame); } -runtimec_status_t vmbin_frame_lookup_cell(vmbin_frame_t *frame, - uint32_t cell_identifier, - vmbin_cell_t **output_cell) { +runtimec_status_t binrwir_execution_frame_lookup_cell( + binrwir_execution_frame_t *frame, uint32_t cell_identifier, + binrwir_cell_t **output_cell) { if (output_cell != NULL) { *output_cell = NULL; } - if (frame == NULL || cell_identifier == VMBIN_CELL_IDENTIFIER_NONE || + if (frame == NULL || cell_identifier == BINRWIR_CELL_IDENTIFIER_NONE || output_cell == NULL) { return RUNTIMEC_STATUS_INVALID; } return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_frame_lookup_binding( - vmbin_frame_t *frame, uint32_t register_identifier, - vmbin_binding_t **output_binding) { +runtimec_status_t binrwir_execution_frame_lookup_binding( + binrwir_execution_frame_t *frame, uint32_t register_identifier, + binrwir_binding_t **output_binding) { if (output_binding != NULL) { *output_binding = NULL; } if (frame == NULL || - register_identifier == VMBIN_REGISTER_IDENTIFIER_NONE || + register_identifier == BINRWIR_REGISTER_IDENTIFIER_NONE || output_binding == NULL) { return RUNTIMEC_STATUS_INVALID; } return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_frame_bind_register( - vmbin_frame_t *frame, uint32_t register_identifier, +runtimec_status_t binrwir_execution_frame_bind_register( + binrwir_execution_frame_t *frame, uint32_t register_identifier, uint32_t cell_identifier, - vmbin_binding_access_t access) { + binrwir_binding_access_t access) { if (frame == NULL || - register_identifier == VMBIN_REGISTER_IDENTIFIER_NONE || - cell_identifier == VMBIN_CELL_IDENTIFIER_NONE || - (access != VMBIN_BINDING_ACCESS_READ && - access != VMBIN_BINDING_ACCESS_WRITE)) { + register_identifier == BINRWIR_REGISTER_IDENTIFIER_NONE || + cell_identifier == BINRWIR_CELL_IDENTIFIER_NONE || + (access != BINRWIR_BINDING_ACCESS_READ && + access != BINRWIR_BINDING_ACCESS_WRITE)) { return RUNTIMEC_STATUS_INVALID; } return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_frame_materialize_register( - vmbin_frame_t *frame, uint32_t register_identifier, - vmbin_value_slot_t *output_value) { +runtimec_status_t binrwir_execution_frame_materialize_register( + binrwir_execution_frame_t *frame, uint32_t register_identifier, + binrwir_value_slot_t *output_value) { if (output_value != NULL) { memset(output_value, 0, sizeof(*output_value)); } if (frame == NULL || - register_identifier == VMBIN_REGISTER_IDENTIFIER_NONE || + register_identifier == BINRWIR_REGISTER_IDENTIFIER_NONE || output_value == NULL) { return RUNTIMEC_STATUS_INVALID; } diff --git a/runtimec/binrwir/execution_frame.h b/runtimec/binrwir/execution_frame.h new file mode 100644 index 00000000..f182ffe9 --- /dev/null +++ b/runtimec/binrwir/execution_frame.h @@ -0,0 +1,74 @@ +#ifndef BINRWIR_EXECUTION_FRAME_H +#define BINRWIR_EXECUTION_FRAME_H + +/* + * 组件:binrwir/execution_frame + * 作用:保存可从 kvspace 重建的执行帧镜像。 + * 联系:engine route 创建 Frame;vmbin 与 vmjit 消费。 + * 约束:Frame 不是持久事实源,每条源指令边界必须可观察。 + */ + +#include +#include + +#include "contract/status.h" +#include "binrwir/execution_binding.h" +#include "binrwir/program.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum binrwir_execution_frame_flags { + BINRWIR_EXECUTION_FRAME_FLAG_NONE = 0, + BINRWIR_EXECUTION_FRAME_FLAG_INITIALIZED = 1U << 0, + BINRWIR_EXECUTION_FRAME_FLAG_OBSERVABLE = 1U << 1, + BINRWIR_EXECUTION_FRAME_FLAG_RESUMED = 1U << 2 +} binrwir_execution_frame_flags_t; + +typedef struct binrwir_execution_frame { + const binrwir_program_t *program; + struct binrwir_execution_frame *parent; + binrwir_cell_t *cells; + size_t cell_count; + binrwir_binding_t *bindings; + size_t binding_count; + uint64_t snapshot_generation; + uint64_t program_generation; + uint32_t logical_program_counter; + uint32_t flags; +} binrwir_execution_frame_t; + +#define BINRWIR_EXECUTION_FRAME_ALIGNMENT \ + ((uint32_t)_Alignof(binrwir_execution_frame_t)) + +runtimec_status_t binrwir_execution_frame_initialize( + binrwir_execution_frame_t *frame, const binrwir_program_t *program, + binrwir_execution_frame_t *parent, binrwir_cell_t *cells, + size_t cell_count, + binrwir_binding_t *bindings, size_t binding_count, + uint64_t snapshot_generation, uint64_t program_generation, + uint32_t logical_program_counter); +runtimec_status_t binrwir_execution_frame_reset( + binrwir_execution_frame_t *frame); +runtimec_status_t binrwir_execution_frame_destroy( + binrwir_execution_frame_t *frame); +runtimec_status_t binrwir_execution_frame_lookup_cell( + binrwir_execution_frame_t *frame, uint32_t cell_identifier, + binrwir_cell_t **output_cell); +runtimec_status_t binrwir_execution_frame_lookup_binding( + binrwir_execution_frame_t *frame, uint32_t register_identifier, + binrwir_binding_t **output_binding); +runtimec_status_t binrwir_execution_frame_bind_register( + binrwir_execution_frame_t *frame, uint32_t register_identifier, + uint32_t cell_identifier, + binrwir_binding_access_t access); +runtimec_status_t binrwir_execution_frame_materialize_register( + binrwir_execution_frame_t *frame, uint32_t register_identifier, + binrwir_value_slot_t *output_value); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/binrwir/execution_plan.c b/runtimec/binrwir/execution_plan.c new file mode 100644 index 00000000..02b907ee --- /dev/null +++ b/runtimec/binrwir/execution_plan.c @@ -0,0 +1,38 @@ +/* execution plan 生命周期与查询的失败封闭骨架。 */ + +#include "binrwir/execution_plan.h" +#include "binrwir/execution_plan_internal.h" + +#include + +runtimec_status_t binrwir_execution_plan_validate( + const binrwir_execution_plan_t *plan) { + if (plan == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t binrwir_execution_plan_get_view( + const binrwir_execution_plan_t *plan, + binrwir_execution_plan_view_t *output_view) { + if (output_view != NULL) { + memset(output_view, 0, sizeof(*output_view)); + output_view->identity.program_generation = UINT64_MAX; + output_view->identity.plan_generation = UINT64_MAX; + output_view->identity.binrwir_binary_interface_generation = UINT32_MAX; + output_view->identity.compiler_revision = UINT32_MAX; + } + if (plan == NULL || output_view == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t binrwir_execution_plan_destroy( + binrwir_execution_plan_t *plan) { + if (plan == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/binrwir/execution_plan.h b/runtimec/binrwir/execution_plan.h new file mode 100644 index 00000000..c3e1be7b --- /dev/null +++ b/runtimec/binrwir/execution_plan.h @@ -0,0 +1,147 @@ +#ifndef BINRWIR_EXECUTION_PLAN_H +#define BINRWIR_EXECUTION_PLAN_H + +/* + * execution plan 是 canonical BinRWIR Program 的只读派生物。它可以随时 + * 删除并从同一 Program 重建;它不是 RWIR 或 BinRWIR 的语义事实源。 + * execution plan 只承载执行加速决策,不持有机器码、缓存、统计、可变 + * execution frame 或 kvspace 值。BinRWIR Compiler 在编译阶段确定执行 + * 目标;vmbin 与 vmjit 只执行已选择的目标,不拒绝计划、不重新选路。 + */ + +#include +#include + +#include "contract/status.h" +#include "binrwir/program.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define BINRWIR_EXECUTION_PLAN_IDENTIFIER_NONE UINT32_MAX + +typedef enum binrwir_execution_plan_flags { + BINRWIR_EXECUTION_PLAN_FLAG_NONE = 0, + BINRWIR_EXECUTION_PLAN_FLAG_HAS_INSTRUCTION_ENCODING = 1U << 0, + BINRWIR_EXECUTION_PLAN_FLAG_HAS_TYPE_SPECIALIZATION = 1U << 1, + BINRWIR_EXECUTION_PLAN_FLAG_HAS_KVSPACE_ADDRESSING = 1U << 2, + BINRWIR_EXECUTION_PLAN_FLAG_HAS_INSTRUCTION_FUSION = 1U << 3, + BINRWIR_EXECUTION_PLAN_FLAG_HAS_VIRTUAL_REGISTERS = 1U << 4, + BINRWIR_EXECUTION_PLAN_FLAG_HAS_CONTROL_FLOW = 1U << 5 +} binrwir_execution_plan_flags_t; + +typedef enum binrwir_virtual_register_location { + BINRWIR_VIRTUAL_REGISTER_LOCATION_NONE = 0, + BINRWIR_VIRTUAL_REGISTER_LOCATION_FRAME = 1, + BINRWIR_VIRTUAL_REGISTER_LOCATION_EXECUTION_REGISTER = 2, + BINRWIR_VIRTUAL_REGISTER_LOCATION_SPILL = 3 +} binrwir_virtual_register_location_t; + +typedef struct binrwir_execution_plan_identity { + uint64_t program_generation; + uint64_t plan_generation; + uint32_t binrwir_binary_interface_generation; + uint32_t compiler_revision; +} binrwir_execution_plan_identity_t; + +typedef struct binrwir_instruction_encoding { + uint32_t instruction_identifier; + uint32_t byte_offset; + uint16_t byte_size; + uint16_t dispatch_identifier; + uint32_t flags; +} binrwir_instruction_encoding_t; + +typedef struct binrwir_type_specialization { + uint32_t instruction_identifier; + uint32_t type_identifier; + uint32_t guard_identifier; + uint16_t specialized_operation_code; + uint16_t flags; +} binrwir_type_specialization_t; + +typedef struct binrwir_kvspace_address { + uint32_t instruction_identifier; + uint32_t key_symbol_identifier; + uint32_t address_identifier; + uint32_t generation_guard_identifier; + uint64_t byte_offset; +} binrwir_kvspace_address_t; + +typedef struct binrwir_instruction_fusion { + uint32_t first_instruction_identifier; + uint32_t instruction_count; + uint32_t fused_operation_identifier; + uint32_t first_source_mapping; + uint32_t source_mapping_count; + uint32_t flags; +} binrwir_instruction_fusion_t; + +typedef struct binrwir_virtual_register { + uint32_t register_identifier; + uint32_t live_range_begin; + uint32_t live_range_end; + uint32_t location_identifier; + uint16_t location; + uint16_t flags; +} binrwir_virtual_register_t; + +typedef struct binrwir_control_flow_block { + uint32_t first_instruction_identifier; + uint32_t instruction_count; + uint32_t successor_offset; + uint16_t successor_count; + uint16_t flags; +} binrwir_control_flow_block_t; + +typedef struct binrwir_source_program_counter_mapping { + uint32_t execution_operation_identifier; + uint32_t source_logical_program_counter; + uint32_t first_instruction_identifier; + uint32_t instruction_count; +} binrwir_source_program_counter_mapping_t; + +typedef struct binrwir_execution_plan binrwir_execution_plan_t; + +typedef struct binrwir_execution_plan_view { + binrwir_execution_plan_identity_t identity; + const binrwir_program_t *program; + const binrwir_instruction_encoding_t *instruction_encodings; + size_t instruction_encoding_count; + const uint8_t *encoded_instruction_bytes; + size_t encoded_instruction_byte_count; + const binrwir_type_specialization_t *type_specializations; + size_t type_specialization_count; + const binrwir_kvspace_address_t *kvspace_addresses; + size_t kvspace_address_count; + const binrwir_instruction_fusion_t *instruction_fusions; + size_t instruction_fusion_count; + const binrwir_virtual_register_t *virtual_registers; + size_t virtual_register_count; + const binrwir_control_flow_block_t *control_flow_blocks; + size_t control_flow_block_count; + const uint32_t *control_flow_successors; + size_t control_flow_successor_count; + const binrwir_source_program_counter_mapping_t *source_mappings; + size_t source_mapping_count; + uint32_t flags; + uint32_t reserved_32_bits; +} binrwir_execution_plan_view_t; + +_Static_assert(sizeof(binrwir_instruction_encoding_t) == 16U, + "binrwir instruction encodings must remain 16 bytes"); + +runtimec_status_t binrwir_execution_plan_validate( + const binrwir_execution_plan_t *plan); +runtimec_status_t binrwir_execution_plan_get_view( + const binrwir_execution_plan_t *plan, + binrwir_execution_plan_view_t *output_view); +runtimec_status_t binrwir_execution_plan_destroy( + binrwir_execution_plan_t *plan); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/binrwir/execution_plan_internal.h b/runtimec/binrwir/execution_plan_internal.h new file mode 100644 index 00000000..e4fd4bfd --- /dev/null +++ b/runtimec/binrwir/execution_plan_internal.h @@ -0,0 +1,21 @@ +#ifndef BINRWIR_EXECUTION_PLAN_INTERNAL_H +#define BINRWIR_EXECUTION_PLAN_INTERNAL_H + +/* + * 中立 execution plan 的共享私有布局。compiler/optimization 负责构造, + * binrwir/execution_plan 只负责验证、查询与销毁。全部派生数组放入一个 + * owned_storage 块,避免两个组件重复定义对象布局。 + */ + +#include "binrwir/execution_plan.h" +#include "contract/allocator.h" + +struct binrwir_execution_plan { + runtimec_allocator_t allocator; + binrwir_execution_plan_view_t view; + void *owned_storage; + size_t owned_storage_size; + size_t owned_storage_alignment; +}; + +#endif diff --git a/runtimec/vmbin/instruction.c b/runtimec/binrwir/instruction.c similarity index 60% rename from runtimec/vmbin/instruction.c rename to runtimec/binrwir/instruction.c index 9e8eb096..58f9a132 100644 --- a/runtimec/vmbin/instruction.c +++ b/runtimec/binrwir/instruction.c @@ -1,20 +1,20 @@ /* - * 组件:vmbin/instruction 的实现 + * 组件:binrwir/instruction 的实现 * 作用:构建请求校验与只读视图生成;当前明确返回未实现。 */ -#include "vmbin/instruction.h" +#include "binrwir/instruction.h" #include -runtimec_status_t vmbin_instruction_validate_build_request( - const vmbin_instruction_build_request_t *request) { +runtimec_status_t binrwir_instruction_validate_build_request( + const binrwir_instruction_build_request_t *request) { if (request == NULL) { return RUNTIMEC_STATUS_INVALID; } - if (request->operation_code == VMBIN_OPERATION_CODE_NONE || - request->form < VMBIN_INSTRUCTION_FORM_NARROW || - request->form > VMBIN_INSTRUCTION_FORM_WIDE || + if (request->operation_code == BINRWIR_OPERATION_CODE_NONE || + request->form < BINRWIR_INSTRUCTION_FORM_NARROW || + request->form > BINRWIR_INSTRUCTION_FORM_WIDE || (request->reads.count != 0U && request->reads.data == NULL) || (request->writes.count != 0U && request->writes.data == NULL)) { return RUNTIMEC_STATUS_INVALID; @@ -22,11 +22,11 @@ runtimec_status_t vmbin_instruction_validate_build_request( return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_instruction_get_view( - const vmbin_instruction_t *instruction, +runtimec_status_t binrwir_instruction_get_view( + const binrwir_instruction_t *instruction, uint32_t source_logical_program_counter, - const vmbin_reference_t *references, size_t reference_count, - vmbin_instruction_view_t *output_view) { + const binrwir_reference_t *references, size_t reference_count, + binrwir_instruction_view_t *output_view) { (void)instruction; (void)source_logical_program_counter; (void)references; diff --git a/runtimec/binrwir/instruction.h b/runtimec/binrwir/instruction.h new file mode 100644 index 00000000..918e29b8 --- /dev/null +++ b/runtimec/binrwir/instruction.h @@ -0,0 +1,85 @@ +#ifndef BINRWIR_INSTRUCTION_H +#define BINRWIR_INSTRUCTION_H + +/* + * 组件:binrwir/instruction + * 作用:热指令的固定宽度表示,以及读取和写入引用的分区视图。 + * 联系:Program 拥有指令和引用池;vmbin 与 vmjit 只读消费。 + * 约束:当前窄式和宽式布局不是冻结的持久格式。 + */ + +#include +#include + +#include "contract/status.h" +#include "binrwir/reference.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define BINRWIR_OPERATION_CODE_NONE UINT16_MAX + +typedef enum binrwir_instruction_flags { + BINRWIR_INSTRUCTION_FLAG_NONE = 0, + BINRWIR_INSTRUCTION_FLAG_CONTROL = 1U << 0, + BINRWIR_INSTRUCTION_FLAG_EFFECT = 1U << 1 +} binrwir_instruction_flags_t; + +typedef enum binrwir_instruction_form { + BINRWIR_INSTRUCTION_FORM_INVALID = 0, + BINRWIR_INSTRUCTION_FORM_NARROW = 1, + BINRWIR_INSTRUCTION_FORM_WIDE = 2 +} binrwir_instruction_form_t; + +typedef struct binrwir_instruction { + uint32_t operand_offset; + uint32_t auxiliary; + uint16_t operation_code; + uint16_t flags; + uint8_t read_count; + uint8_t write_count; + uint8_t form; + uint8_t reserved_byte; +} binrwir_instruction_t; + +typedef struct binrwir_reference_span { + const binrwir_reference_t *data; + size_t count; +} binrwir_reference_span_t; + +typedef struct binrwir_instruction_build_request { + uint32_t source_logical_program_counter; + uint32_t auxiliary; + uint16_t operation_code; + uint16_t flags; + uint8_t form; + uint8_t reserved_bytes[3]; + binrwir_reference_span_t reads; + binrwir_reference_span_t writes; +} binrwir_instruction_build_request_t; + +typedef struct binrwir_instruction_view { + const binrwir_instruction_t *instruction; + uint32_t source_logical_program_counter; + uint32_t reserved_32_bits; + binrwir_reference_span_t reads; + binrwir_reference_span_t writes; +} binrwir_instruction_view_t; + +runtimec_status_t binrwir_instruction_validate_build_request( + const binrwir_instruction_build_request_t *request); +runtimec_status_t binrwir_instruction_get_view( + const binrwir_instruction_t *instruction, + uint32_t source_logical_program_counter, + const binrwir_reference_t *references, size_t reference_count, + binrwir_instruction_view_t *output_view); + +_Static_assert(sizeof(binrwir_instruction_t) == 16U, + "binrwir instructions must remain 16 bytes"); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmbin/program.c b/runtimec/binrwir/program.c similarity index 58% rename from runtimec/vmbin/program.c rename to runtimec/binrwir/program.c index 98c5cc1e..0ba44373 100644 --- a/runtimec/vmbin/program.c +++ b/runtimec/binrwir/program.c @@ -1,45 +1,46 @@ /* - * 组件:vmbin/program 的实现 + * 组件:binrwir/program 的实现 * 作用:Program 查询和构造入口;当前均明确返回未实现。 * 约束:每个输出在失败前进入无效状态。 */ -#include "vmbin/program.h" +#include "binrwir/program.h" #include -static void vmbin_program_identity_invalidate( - vmbin_program_identity_t *identity) { +static void binrwir_program_identity_invalidate( + binrwir_program_identity_t *identity) { if (identity != NULL) { memset(identity, 0, sizeof(*identity)); identity->schema_version = UINT32_MAX; identity->rwir_manifest_version = UINT32_MAX; identity->binrwir_binary_interface_generation = UINT32_MAX; + identity->canonical_encoding_revision = UINT32_MAX; } } -runtimec_status_t vmbin_program_get_identity( - const vmbin_program_t *program, - vmbin_program_identity_t *output_identity) { - vmbin_program_identity_invalidate(output_identity); +runtimec_status_t binrwir_program_get_identity( + const binrwir_program_t *program, + binrwir_program_identity_t *output_identity) { + binrwir_program_identity_invalidate(output_identity); if (program == NULL || output_identity == NULL) { return RUNTIMEC_STATUS_INVALID; } return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_program_validate(const vmbin_program_t *program) { +runtimec_status_t binrwir_program_validate(const binrwir_program_t *program) { if (program == NULL) { return RUNTIMEC_STATUS_INVALID; } return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_program_get_view( - const vmbin_program_t *program, vmbin_program_view_t *output_view) { +runtimec_status_t binrwir_program_get_view( + const binrwir_program_t *program, binrwir_program_view_t *output_view) { if (output_view != NULL) { memset(output_view, 0, sizeof(*output_view)); - vmbin_program_identity_invalidate(&output_view->identity); + binrwir_program_identity_invalidate(&output_view->identity); } if (program == NULL || output_view == NULL) { return RUNTIMEC_STATUS_INVALID; @@ -47,30 +48,30 @@ runtimec_status_t vmbin_program_get_view( return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_program_get_instruction( - const vmbin_program_t *program, uint32_t instruction_identifier, - vmbin_instruction_view_t *output_instruction) { +runtimec_status_t binrwir_program_get_instruction( + const binrwir_program_t *program, uint32_t instruction_identifier, + binrwir_instruction_view_t *output_instruction) { if (output_instruction != NULL) { memset(output_instruction, 0, sizeof(*output_instruction)); } - if (program == NULL || instruction_identifier == VMBIN_IDENTIFIER_NONE || + if (program == NULL || instruction_identifier == BINRWIR_IDENTIFIER_NONE || output_instruction == NULL) { return RUNTIMEC_STATUS_INVALID; } return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_program_destroy(vmbin_program_t *program) { +runtimec_status_t binrwir_program_destroy(binrwir_program_t *program) { if (program == NULL) { return RUNTIMEC_STATUS_INVALID; } return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_program_builder_create( +runtimec_status_t binrwir_program_builder_create( const runtimec_allocator_t *allocator, - const vmbin_program_identity_t *identity, - vmbin_program_builder_t **output_builder) { + const binrwir_program_identity_t *identity, + binrwir_program_builder_t **output_builder) { if (output_builder != NULL) { *output_builder = NULL; } @@ -80,40 +81,40 @@ runtimec_status_t vmbin_program_builder_create( return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_program_builder_reset(vmbin_program_builder_t *builder) { +runtimec_status_t binrwir_program_builder_reset(binrwir_program_builder_t *builder) { if (builder == NULL) { return RUNTIMEC_STATUS_INVALID; } return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_program_builder_destroy( - vmbin_program_builder_t *builder) { +runtimec_status_t binrwir_program_builder_destroy( + binrwir_program_builder_t *builder) { if (builder == NULL) { return RUNTIMEC_STATUS_INVALID; } return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_program_builder_add_parameter( - vmbin_program_builder_t *builder, vmbin_parameter_direction_t direction, +runtimec_status_t binrwir_program_builder_add_parameter( + binrwir_program_builder_t *builder, binrwir_parameter_direction_t direction, uint32_t register_identifier, uint16_t *output_parameter_ordinal) { if (output_parameter_ordinal != NULL) { *output_parameter_ordinal = UINT16_MAX; } - if (builder == NULL || direction == VMBIN_PARAMETER_DIRECTION_INVALID || - register_identifier == VMBIN_IDENTIFIER_NONE || + if (builder == NULL || direction == BINRWIR_PARAMETER_DIRECTION_INVALID || + register_identifier == BINRWIR_IDENTIFIER_NONE || output_parameter_ordinal == NULL) { return RUNTIMEC_STATUS_INVALID; } return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_program_builder_add_alias_rule( - vmbin_program_builder_t *builder, const vmbin_alias_rule_t *rule, +runtimec_status_t binrwir_program_builder_add_alias_rule( + binrwir_program_builder_t *builder, const binrwir_alias_rule_t *rule, uint32_t *output_alias_rule_identifier) { if (output_alias_rule_identifier != NULL) { - *output_alias_rule_identifier = VMBIN_IDENTIFIER_NONE; + *output_alias_rule_identifier = BINRWIR_IDENTIFIER_NONE; } if (builder == NULL || rule == NULL || output_alias_rule_identifier == NULL) { @@ -122,12 +123,12 @@ runtimec_status_t vmbin_program_builder_add_alias_rule( return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_program_builder_add_register( - vmbin_program_builder_t *builder, - const vmbin_register_descriptor_t *register_descriptor, +runtimec_status_t binrwir_program_builder_add_register( + binrwir_program_builder_t *builder, + const binrwir_register_descriptor_t *register_descriptor, uint32_t *output_register_identifier) { if (output_register_identifier != NULL) { - *output_register_identifier = VMBIN_IDENTIFIER_NONE; + *output_register_identifier = BINRWIR_IDENTIFIER_NONE; } if (builder == NULL || register_descriptor == NULL || output_register_identifier == NULL) { @@ -136,11 +137,11 @@ runtimec_status_t vmbin_program_builder_add_register( return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_program_builder_add_symbol( - vmbin_program_builder_t *builder, const uint8_t *bytes, size_t byte_count, +runtimec_status_t binrwir_program_builder_add_symbol( + binrwir_program_builder_t *builder, const uint8_t *bytes, size_t byte_count, uint32_t *output_symbol_identifier) { if (output_symbol_identifier != NULL) { - *output_symbol_identifier = VMBIN_IDENTIFIER_NONE; + *output_symbol_identifier = BINRWIR_IDENTIFIER_NONE; } if (builder == NULL || (byte_count != 0U && bytes == NULL) || output_symbol_identifier == NULL) { @@ -149,13 +150,13 @@ runtimec_status_t vmbin_program_builder_add_symbol( return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_program_builder_add_literal( - vmbin_program_builder_t *builder, - const vmbin_literal_descriptor_t *literal_descriptor, +runtimec_status_t binrwir_program_builder_add_literal( + binrwir_program_builder_t *builder, + const binrwir_literal_descriptor_t *literal_descriptor, const uint8_t *bytes, size_t byte_count, uint32_t *output_literal_identifier) { if (output_literal_identifier != NULL) { - *output_literal_identifier = VMBIN_IDENTIFIER_NONE; + *output_literal_identifier = BINRWIR_IDENTIFIER_NONE; } if (builder == NULL || literal_descriptor == NULL || (byte_count != 0U && bytes == NULL) || @@ -165,12 +166,12 @@ runtimec_status_t vmbin_program_builder_add_literal( return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_program_builder_add_callsite( - vmbin_program_builder_t *builder, - const vmbin_callsite_build_request_t *request, +runtimec_status_t binrwir_program_builder_add_callsite( + binrwir_program_builder_t *builder, + const binrwir_callsite_build_request_t *request, uint32_t *output_callsite_identifier) { if (output_callsite_identifier != NULL) { - *output_callsite_identifier = VMBIN_IDENTIFIER_NONE; + *output_callsite_identifier = BINRWIR_IDENTIFIER_NONE; } if (builder == NULL || request == NULL || output_callsite_identifier == NULL) { @@ -179,12 +180,12 @@ runtimec_status_t vmbin_program_builder_add_callsite( return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_program_builder_add_instruction( - vmbin_program_builder_t *builder, - const vmbin_instruction_build_request_t *request, +runtimec_status_t binrwir_program_builder_add_instruction( + binrwir_program_builder_t *builder, + const binrwir_instruction_build_request_t *request, uint32_t *output_instruction_identifier) { if (output_instruction_identifier != NULL) { - *output_instruction_identifier = VMBIN_IDENTIFIER_NONE; + *output_instruction_identifier = BINRWIR_IDENTIFIER_NONE; } if (builder == NULL || request == NULL || output_instruction_identifier == NULL) { @@ -194,8 +195,8 @@ runtimec_status_t vmbin_program_builder_add_instruction( } runtimec_status_t -vmbin_program_builder_finalize(vmbin_program_builder_t *builder, - vmbin_program_t **output_program) { +binrwir_program_builder_finalize(binrwir_program_builder_t *builder, + binrwir_program_t **output_program) { if (output_program != NULL) { *output_program = NULL; } diff --git a/runtimec/binrwir/program.h b/runtimec/binrwir/program.h new file mode 100644 index 00000000..aa08efc3 --- /dev/null +++ b/runtimec/binrwir/program.h @@ -0,0 +1,199 @@ +#ifndef BINRWIR_PROGRAM_H +#define BINRWIR_PROGRAM_H + +/* + * 组件:binrwir/program + * 作用:定义与 RWIR 语义等价的 canonical、不可变 BinRWIR Program。 + * 联系:vmkv 构造 Program;Compiler、vmbin 与 vmjit 只读消费同一 Program。 + * 约束:类型特化、kvspace 寻址、融合、虚拟寄存器、控制流派生计划、 + * 可变绑定、机器码、缓存和统计均不得进入 Program。 + */ + +#include +#include + +#include "contract/allocator.h" +#include "contract/status.h" +#include "binrwir/instruction.h" +#include "binrwir/reference.h" +#include "binrwir/signature.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define BINRWIR_IDENTIFIER_NONE UINT32_MAX + +typedef enum binrwir_register_flags { + BINRWIR_REGISTER_FLAG_NONE = 0, + BINRWIR_REGISTER_FLAG_PARAMETER = 1U << 0, + BINRWIR_REGISTER_FLAG_POINTER = 1U << 1, + BINRWIR_REGISTER_FLAG_MEMBER = 1U << 2 +} binrwir_register_flags_t; + +typedef enum binrwir_literal_flags { + BINRWIR_LITERAL_FLAG_NONE = 0, + BINRWIR_LITERAL_FLAG_NULL = 1U << 0, + BINRWIR_LITERAL_FLAG_RELOCATABLE = 1U << 1 +} binrwir_literal_flags_t; + +typedef enum binrwir_callsite_flags { + BINRWIR_CALLSITE_FLAG_NONE = 0, + BINRWIR_CALLSITE_FLAG_TAIL = 1U << 0, + BINRWIR_CALLSITE_FLAG_MAY_YIELD = 1U << 1 +} binrwir_callsite_flags_t; + +typedef enum binrwir_call_alias_mapping_flags { + BINRWIR_CALL_ALIAS_MAPPING_FLAG_NONE = 0, + BINRWIR_CALL_ALIAS_MAPPING_FLAG_PROJECTED = 1U << 0, + BINRWIR_CALL_ALIAS_MAPPING_FLAG_INDIRECT = 1U << 1 +} binrwir_call_alias_mapping_flags_t; + +typedef struct binrwir_program_identity { + uint64_t snapshot_generation; + uint64_t program_generation; + uint32_t schema_version; + uint32_t rwir_manifest_version; + uint32_t binrwir_binary_interface_generation; + uint32_t canonical_encoding_revision; +} binrwir_program_identity_t; + +typedef struct binrwir_register_descriptor { + uint32_t symbol_identifier; + uint32_t type_identifier; + uint32_t auxiliary; + uint16_t flags; + uint16_t reserved_16_bits; +} binrwir_register_descriptor_t; + +typedef struct binrwir_literal_descriptor { + uint32_t byte_offset; + uint32_t byte_size; + uint32_t type_identifier; + uint16_t flags; + uint16_t alignment; +} binrwir_literal_descriptor_t; + +typedef struct binrwir_symbol_descriptor { + uint32_t byte_offset; + uint32_t byte_size; +} binrwir_symbol_descriptor_t; + +typedef struct binrwir_callsite { + uint32_t callee_symbol_identifier; + uint32_t binding_offset; + uint32_t alias_mapping_offset; + uint8_t read_count; + uint8_t write_count; + uint8_t alias_mapping_count; + uint8_t flags; +} binrwir_callsite_t; + +typedef struct binrwir_call_alias_mapping { + uint16_t read_argument; + uint16_t write_argument; + uint16_t alias_rule_ordinal; + uint16_t flags; +} binrwir_call_alias_mapping_t; + +typedef struct binrwir_callsite_build_request { + uint32_t callee_symbol_identifier; + uint8_t flags; + uint8_t reserved_bytes[3]; + binrwir_reference_span_t read_bindings; + binrwir_reference_span_t write_bindings; + const binrwir_call_alias_mapping_t *alias_mappings; + size_t alias_mapping_count; +} binrwir_callsite_build_request_t; + +typedef struct binrwir_program binrwir_program_t; +typedef struct binrwir_program_builder binrwir_program_builder_t; + +typedef struct binrwir_program_view { + binrwir_program_identity_t identity; + binrwir_signature_view_t signature; + const binrwir_instruction_t *instructions; + size_t instruction_count; + const uint32_t *source_logical_program_counters; + const binrwir_reference_t *references; + size_t reference_count; + const binrwir_register_descriptor_t *registers; + size_t register_count; + const binrwir_literal_descriptor_t *literals; + size_t literal_count; + const binrwir_symbol_descriptor_t *symbols; + size_t symbol_count; + const binrwir_callsite_t *callsites; + size_t callsite_count; + const binrwir_call_alias_mapping_t *alias_mappings; + size_t alias_mapping_count; + const uint8_t *literal_bytes; + size_t literal_byte_count; + const uint8_t *symbol_bytes; + size_t symbol_byte_count; +} binrwir_program_view_t; + +runtimec_status_t binrwir_program_get_identity( + const binrwir_program_t *program, binrwir_program_identity_t *output_identity); +runtimec_status_t binrwir_program_validate(const binrwir_program_t *program); +runtimec_status_t binrwir_program_get_view(const binrwir_program_t *program, + binrwir_program_view_t *output_view); +runtimec_status_t binrwir_program_get_instruction( + const binrwir_program_t *program, uint32_t instruction_identifier, + binrwir_instruction_view_t *output_instruction); +runtimec_status_t binrwir_program_destroy(binrwir_program_t *program); + +runtimec_status_t binrwir_program_builder_create( + const runtimec_allocator_t *allocator, + const binrwir_program_identity_t *identity, + binrwir_program_builder_t **output_builder); +runtimec_status_t binrwir_program_builder_reset(binrwir_program_builder_t *builder); +runtimec_status_t binrwir_program_builder_destroy( + binrwir_program_builder_t *builder); + +runtimec_status_t binrwir_program_builder_add_parameter( + binrwir_program_builder_t *builder, binrwir_parameter_direction_t direction, + uint32_t register_identifier, uint16_t *output_parameter_ordinal); +runtimec_status_t binrwir_program_builder_add_alias_rule( + binrwir_program_builder_t *builder, const binrwir_alias_rule_t *rule, + uint32_t *output_alias_rule_identifier); +runtimec_status_t binrwir_program_builder_add_register( + binrwir_program_builder_t *builder, + const binrwir_register_descriptor_t *register_descriptor, + uint32_t *output_register_identifier); +runtimec_status_t binrwir_program_builder_add_symbol( + binrwir_program_builder_t *builder, const uint8_t *bytes, size_t byte_count, + uint32_t *output_symbol_identifier); +runtimec_status_t binrwir_program_builder_add_literal( + binrwir_program_builder_t *builder, + const binrwir_literal_descriptor_t *literal_descriptor, + const uint8_t *bytes, size_t byte_count, + uint32_t *output_literal_identifier); +runtimec_status_t binrwir_program_builder_add_callsite( + binrwir_program_builder_t *builder, + const binrwir_callsite_build_request_t *request, + uint32_t *output_callsite_identifier); +runtimec_status_t binrwir_program_builder_add_instruction( + binrwir_program_builder_t *builder, + const binrwir_instruction_build_request_t *request, + uint32_t *output_instruction_identifier); +runtimec_status_t +binrwir_program_builder_finalize(binrwir_program_builder_t *builder, + binrwir_program_t **output_program); + +_Static_assert(sizeof(binrwir_register_descriptor_t) == 16U, + "binrwir register descriptions must remain 16 bytes"); +_Static_assert(sizeof(binrwir_program_identity_t) == 32U, + "binrwir program identity must remain 32 bytes"); +_Static_assert(sizeof(binrwir_literal_descriptor_t) == 16U, + "binrwir literal descriptions must remain 16 bytes"); +_Static_assert(sizeof(binrwir_callsite_t) == 16U, + "binrwir callsites must remain 16 bytes"); +_Static_assert(sizeof(binrwir_call_alias_mapping_t) == 8U, + "binrwir call alias mappings must remain 8 bytes"); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/binrwir/reference.c b/runtimec/binrwir/reference.c new file mode 100644 index 00000000..5508c8ba --- /dev/null +++ b/runtimec/binrwir/reference.c @@ -0,0 +1,52 @@ +/* + * 组件:binrwir/reference 的实现 + * 作用:引用创建、校验与读取入口;业务语义尚未实现。 + * 约束:所有输出先进入明确无效状态,再返回未实现。 + */ + +#include "binrwir/reference.h" + +#include + +runtimec_status_t binrwir_reference_create( + binrwir_reference_kind_t kind, uint32_t identifier, + binrwir_reference_t *output_reference) { + if (output_reference != NULL) { + *output_reference = BINRWIR_REFERENCE_INVALID; + } + if (output_reference == NULL || kind <= BINRWIR_REFERENCE_KIND_INVALID || + kind > BINRWIR_REFERENCE_KIND_SYMBOL || + identifier > BINRWIR_REFERENCE_IDENTIFIER_MASK) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t binrwir_reference_validate(binrwir_reference_t reference) { + if (reference == BINRWIR_REFERENCE_INVALID) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t binrwir_reference_get_kind( + binrwir_reference_t reference, binrwir_reference_kind_t *output_kind) { + if (output_kind != NULL) { + *output_kind = BINRWIR_REFERENCE_KIND_INVALID; + } + if (output_kind == NULL || reference == BINRWIR_REFERENCE_INVALID) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t binrwir_reference_get_identifier( + binrwir_reference_t reference, uint32_t *output_identifier) { + if (output_identifier != NULL) { + *output_identifier = UINT32_MAX; + } + if (output_identifier == NULL || reference == BINRWIR_REFERENCE_INVALID) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/binrwir/reference.h b/runtimec/binrwir/reference.h new file mode 100644 index 00000000..fe4c5815 --- /dev/null +++ b/runtimec/binrwir/reference.h @@ -0,0 +1,49 @@ +#ifndef BINRWIR_REFERENCE_H +#define BINRWIR_REFERENCE_H + +/* + * 组件:binrwir/reference + * 作用:以 32 位紧凑值表示寄存器、字面量或符号引用。 + * 联系:instruction 按读取区和写入区保存引用,Program 提供只读视图。 + * 约束:引用不重复保存方向;非法引用使用全一位模式。 + */ + +#include + +#include "contract/status.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef uint32_t binrwir_reference_t; + +typedef enum binrwir_reference_kind { + BINRWIR_REFERENCE_KIND_INVALID = 0, + BINRWIR_REFERENCE_KIND_REGISTER = 1, + BINRWIR_REFERENCE_KIND_LITERAL = 2, + BINRWIR_REFERENCE_KIND_SYMBOL = 3 +} binrwir_reference_kind_t; + +#define BINRWIR_REFERENCE_KIND_SHIFT 30U +#define BINRWIR_REFERENCE_KIND_MASK UINT32_C(0xC0000000) +#define BINRWIR_REFERENCE_IDENTIFIER_MASK UINT32_C(0x3FFFFFFF) +#define BINRWIR_REFERENCE_INVALID UINT32_MAX + +runtimec_status_t binrwir_reference_create( + binrwir_reference_kind_t kind, uint32_t identifier, + binrwir_reference_t *output_reference); +runtimec_status_t binrwir_reference_validate(binrwir_reference_t reference); +runtimec_status_t binrwir_reference_get_kind( + binrwir_reference_t reference, binrwir_reference_kind_t *output_kind); +runtimec_status_t binrwir_reference_get_identifier( + binrwir_reference_t reference, uint32_t *output_identifier); + +_Static_assert(sizeof(binrwir_reference_t) == 4U, + "binrwir references must remain 4 bytes"); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmbin/signature.c b/runtimec/binrwir/signature.c similarity index 70% rename from runtimec/vmbin/signature.c rename to runtimec/binrwir/signature.c index 9de17863..6014ec65 100644 --- a/runtimec/vmbin/signature.c +++ b/runtimec/binrwir/signature.c @@ -1,13 +1,13 @@ /* - * 组件:vmbin/signature 的实现 + * 组件:binrwir/signature 的实现 * 作用:签名校验与别名策略查询;当前明确返回未实现。 * 约束:默认输出仅是无效前置状态,不表示已经证明不重叠。 */ -#include "vmbin/signature.h" +#include "binrwir/signature.h" runtimec_status_t -vmbin_signature_validate(const vmbin_signature_view_t *signature) { +binrwir_signature_validate(const binrwir_signature_view_t *signature) { if (signature == NULL) { return RUNTIMEC_STATUS_INVALID; } @@ -22,11 +22,11 @@ vmbin_signature_validate(const vmbin_signature_view_t *signature) { return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmbin_signature_get_alias_policy( - const vmbin_signature_view_t *signature, uint16_t read_parameter, - uint16_t write_parameter, vmbin_alias_policy_t *output_policy) { +runtimec_status_t binrwir_signature_get_alias_policy( + const binrwir_signature_view_t *signature, uint16_t read_parameter, + uint16_t write_parameter, binrwir_alias_policy_t *output_policy) { if (output_policy != NULL) { - *output_policy = VMBIN_ALIAS_POLICY_INVALID; + *output_policy = BINRWIR_ALIAS_POLICY_INVALID; } if (signature == NULL || output_policy == NULL || read_parameter >= signature->read_parameter_count || diff --git a/runtimec/binrwir/signature.h b/runtimec/binrwir/signature.h new file mode 100644 index 00000000..8cc59e9f --- /dev/null +++ b/runtimec/binrwir/signature.h @@ -0,0 +1,68 @@ +#ifndef BINRWIR_SIGNATURE_H +#define BINRWIR_SIGNATURE_H + +/* + * 组件:binrwir/signature + * 作用:定义读参数、写参数和跨方向显式别名规则。 + * 联系:vmkv 生成签名;call 与 vmjit 按同一签名校验绑定。 + * 约束:签名是别名策略的唯一所有者;未知关系不得猜测为不重叠。 + */ + +#include +#include + +#include "contract/status.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum binrwir_parameter_direction { + BINRWIR_PARAMETER_DIRECTION_INVALID = 0, + BINRWIR_PARAMETER_DIRECTION_READ = 1, + BINRWIR_PARAMETER_DIRECTION_WRITE = 2 +} binrwir_parameter_direction_t; + +typedef enum binrwir_alias_policy { + BINRWIR_ALIAS_POLICY_INVALID = 0, + BINRWIR_ALIAS_NO_ALIAS = 1, + BINRWIR_ALIAS_MAY_ALIAS = 2, + BINRWIR_ALIAS_MUST_ALIAS = 3 +} binrwir_alias_policy_t; + +typedef enum binrwir_alias_rule_flags { + BINRWIR_ALIAS_RULE_FLAG_NONE = 0, + BINRWIR_ALIAS_RULE_FLAG_PROJECTION = 1U << 0 +} binrwir_alias_rule_flags_t; + +typedef struct binrwir_alias_rule { + uint16_t read_parameter; + uint16_t write_parameter; + uint8_t policy; + uint8_t flags; + uint16_t reserved_16_bits; +} binrwir_alias_rule_t; + +typedef struct binrwir_signature_view { + const uint32_t *read_parameters; + size_t read_parameter_count; + const uint32_t *write_parameters; + size_t write_parameter_count; + const binrwir_alias_rule_t *alias_rules; + size_t alias_rule_count; +} binrwir_signature_view_t; + +runtimec_status_t +binrwir_signature_validate(const binrwir_signature_view_t *signature); +runtimec_status_t binrwir_signature_get_alias_policy( + const binrwir_signature_view_t *signature, uint16_t read_parameter, + uint16_t write_parameter, binrwir_alias_policy_t *output_policy); + +_Static_assert(sizeof(binrwir_alias_rule_t) == 8U, + "binrwir alias rules must remain 8 bytes"); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/binrwir/value.h b/runtimec/binrwir/value.h new file mode 100644 index 00000000..adadbe63 --- /dev/null +++ b/runtimec/binrwir/value.h @@ -0,0 +1,60 @@ +#ifndef BINRWIR_VALUE_H +#define BINRWIR_VALUE_H + +/* + * 组件:binrwir/value + * 作用:vmbin 与 vmjit 共享的 32 字节目标中立值槽。 + * 联系:execution binding、execution frame、vmbin 与 vmjit 共同使用。 + * 约束:布局是内部二进制接口,不是持久格式。 + */ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum binrwir_value_tag { + BINRWIR_VALUE_INVALID = 0, + BINRWIR_VALUE_EMPTY, + BINRWIR_VALUE_BOOL, + BINRWIR_VALUE_SIGNED, + BINRWIR_VALUE_UNSIGNED, + BINRWIR_VALUE_FLOAT, + BINRWIR_VALUE_REFERENCE, + BINRWIR_VALUE_ARRAY, + BINRWIR_VALUE_DYNAMIC +} binrwir_value_tag_t; + +typedef enum binrwir_value_flags { + BINRWIR_VALUE_FLAG_NONE = 0, + BINRWIR_VALUE_FLAG_OWNED = 1U << 0, + BINRWIR_VALUE_FLAG_BORROWED = 1U << 1, + BINRWIR_VALUE_FLAG_NULLABLE = 1U << 2, + BINRWIR_VALUE_FLAG_DIRTY = 1U << 3, + BINRWIR_VALUE_FLAG_PINNED = 1U << 4 +} binrwir_value_flags_t; + +typedef struct binrwir_value_slot { + uint64_t payload_low; /* 标量位或句柄标识符,低 64 位 */ + uint64_t payload_high; /* 保留/高 64 位 */ + uint32_t type_identifier; /* canonical 类型或形状标识符 */ + uint16_t tag; /* binrwir_value_tag_t */ + uint16_t flags; /* owned/borrowed/nullable/dirty/pinned */ + uint32_t generation; /* 句柄/借用的世代守卫 */ + uint32_t reserved_32_bits; +} binrwir_value_slot_t; + +_Static_assert(sizeof(binrwir_value_slot_t) == 32U, + "binrwir value slot must remain 32 bytes"); +_Static_assert(offsetof(binrwir_value_slot_t, payload_low) == 0U, + "binrwir value payload must start at offset zero"); +_Static_assert(offsetof(binrwir_value_slot_t, generation) == 24U, + "binrwir value generation offset is contractual"); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/compiler/compiler.c b/runtimec/compiler/compiler.c new file mode 100644 index 00000000..a4f6af14 --- /dev/null +++ b/runtimec/compiler/compiler.c @@ -0,0 +1,100 @@ +/* + * BinRWIR Compiler 当前只提供失败封闭桩。 + * 输出先进入无效状态;合法但尚未实现的请求返回 NOT_IMPLEMENTED。 + */ + +#include "compiler/compiler.h" + +static void binrwir_compilation_reset_view( + binrwir_compilation_view_t *view) { + if (view != NULL) { + *view = (binrwir_compilation_view_t){ + .execution_target = BINRWIR_EXECUTION_TARGET_INVALID, + .canonical_program = NULL, + .execution_plan = NULL, + .vmjit_code = NULL, + }; + } +} + +runtimec_status_t binrwir_compiler_create( + const runtimec_allocator_t *allocator, + const binrwir_compiler_configuration_t *configuration, + binrwir_compiler_t **output_compiler, + runtimec_error_t *error) { + if (output_compiler != NULL) { + *output_compiler = NULL; + } + if (!runtimec_allocator_is_valid(allocator) || configuration == NULL || + output_compiler == NULL || + configuration->structure_size != sizeof(*configuration) || + configuration->compiler_revision == 0U || + (configuration->enable_vmjit && + configuration->vmjit_compiler == NULL) || + (!configuration->enable_vmjit && + configuration->vmjit_compiler != NULL)) { + return RUNTIMEC_STATUS_INVALID; + } + (void)error; + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t binrwir_compiler_destroy( + binrwir_compiler_t *compiler, + runtimec_error_t *error) { + if (compiler == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + (void)error; + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t binrwir_compiler_get_revision( + const binrwir_compiler_t *compiler, + uint32_t *output_compiler_revision) { + if (output_compiler_revision != NULL) { + *output_compiler_revision = UINT32_MAX; + } + if (compiler == NULL || output_compiler_revision == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t binrwir_compiler_compile( + binrwir_compiler_t *compiler, + const binrwir_program_t *canonical_program, + binrwir_compilation_t **output_compilation, + runtimec_error_t *error) { + if (output_compilation != NULL) { + *output_compilation = NULL; + } + if (compiler == NULL || canonical_program == NULL || + output_compilation == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + (void)error; + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t binrwir_compilation_get_view( + const binrwir_compilation_t *compilation, + binrwir_compilation_view_t *output_view, + runtimec_error_t *error) { + binrwir_compilation_reset_view(output_view); + if (compilation == NULL || output_view == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + (void)error; + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t binrwir_compilation_destroy( + binrwir_compilation_t *compilation, + runtimec_error_t *error) { + if (compilation == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + (void)error; + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/compiler/compiler.h b/runtimec/compiler/compiler.h new file mode 100644 index 00000000..48e29864 --- /dev/null +++ b/runtimec/compiler/compiler.h @@ -0,0 +1,98 @@ +#ifndef RUNTIMEC_COMPILER_COMPILER_H +#define RUNTIMEC_COMPILER_COMPILER_H + +/* + * 组件:BinRWIR Compiler + * 作用:从 canonical BinRWIR Program 派生 execution plan,并在启用时于同一 + * 编译阶段请求 vmjit 编译机器码。输出是统一的 opaque compilation。 + * 联系:唯一内容输入是 binrwir_program_t;结果可明确选择 vmbin 或 vmjit。 + * 约束:不读取 RWIR 或 kvspace,不执行 Program;全部优化只在本模块完成, + * 真实错误不得转换成 VMBIN compilation。 + */ + +#include +#include +#include + +#include "binrwir/execution_plan.h" +#include "binrwir/program.h" +#include "contract/allocator.h" +#include "contract/status.h" +#include "vmjit/code.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct vmjit_compiler_t vmjit_compiler_t; +typedef struct binrwir_compiler_t binrwir_compiler_t; +typedef struct binrwir_compilation_t binrwir_compilation_t; + +typedef enum binrwir_execution_target_t { + BINRWIR_EXECUTION_TARGET_INVALID = 0, + BINRWIR_EXECUTION_TARGET_VMBIN = 1, + BINRWIR_EXECUTION_TARGET_VMJIT = 2 +} binrwir_execution_target_t; + +/* + * enable_vmjit 为 false 时 vmjit_compiler 必须为空;为 true 时必须非空。 + * create 成功后,vmjit_compiler 的所有权转入 BinRWIR Compiler;create + * 失败时所有权仍属于调用者。structure_size 必须精确等于本结构大小。 + */ +typedef struct binrwir_compiler_configuration_t { + size_t structure_size; + uint32_t compiler_revision; + bool enable_vmjit; + vmjit_compiler_t *vmjit_compiler; +} binrwir_compiler_configuration_t; + +/* + * 本视图借用 compilation 持有的对象。 + * compilation 对象只表示已经成功完成的编译。VMJIT 目标必须携带非空 + * vmjit_code;VMBIN 目标必须保持 vmjit_code 为空。编译错误不产生对象。 + */ +typedef struct binrwir_compilation_view_t { + binrwir_execution_target_t execution_target; + const binrwir_program_t *canonical_program; + const binrwir_execution_plan_t *execution_plan; + const vmjit_code_t *vmjit_code; +} binrwir_compilation_view_t; + +runtimec_status_t binrwir_compiler_create( + const runtimec_allocator_t *allocator, + const binrwir_compiler_configuration_t *configuration, + binrwir_compiler_t **output_compiler, + runtimec_error_t *error); + +runtimec_status_t binrwir_compiler_destroy( + binrwir_compiler_t *compiler, + runtimec_error_t *error); + +runtimec_status_t binrwir_compiler_get_revision( + const binrwir_compiler_t *compiler, + uint32_t *output_compiler_revision); + +/* + * 唯一内容输入是 canonical_program。成功产生的 compilation 持有该 Program + * 的不可变快照、execution plan 与可选机器码;调用者仍拥有输入 Program。 + */ +runtimec_status_t binrwir_compiler_compile( + binrwir_compiler_t *compiler, + const binrwir_program_t *canonical_program, + binrwir_compilation_t **output_compilation, + runtimec_error_t *error); + +runtimec_status_t binrwir_compilation_get_view( + const binrwir_compilation_t *compilation, + binrwir_compilation_view_t *output_view, + runtimec_error_t *error); + +runtimec_status_t binrwir_compilation_destroy( + binrwir_compilation_t *compilation, + runtimec_error_t *error); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/compiler/optimization.c b/runtimec/compiler/optimization.c new file mode 100644 index 00000000..486e53f8 --- /dev/null +++ b/runtimec/compiler/optimization.c @@ -0,0 +1,25 @@ +/* BinRWIR optimization 的失败封闭骨架。 */ + +#include "compiler/optimization.h" + +#include "binrwir/execution_plan_internal.h" + +runtimec_status_t binrwir_compiler_build_execution_plan( + const runtimec_allocator_t *allocator, + const binrwir_program_t *canonical_program, + uint64_t plan_generation, + uint32_t compiler_revision, + binrwir_execution_plan_t **output_execution_plan, + runtimec_error_t *error) { + (void)plan_generation; + (void)compiler_revision; + (void)error; + if (output_execution_plan != NULL) { + *output_execution_plan = NULL; + } + if (!runtimec_allocator_is_valid(allocator) || canonical_program == NULL || + output_execution_plan == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/compiler/optimization.h b/runtimec/compiler/optimization.h new file mode 100644 index 00000000..594467bc --- /dev/null +++ b/runtimec/compiler/optimization.h @@ -0,0 +1,36 @@ +#ifndef RUNTIMEC_COMPILER_OPTIMIZATION_H +#define RUNTIMEC_COMPILER_OPTIMIZATION_H + +/* + * 组件:BinRWIR Compiler optimization + * 作用:从 canonical BinRWIR Program 生成只读 execution plan,统一承载 + * 指令编码、类型固化、KV 寻址、指令融合、虚拟寄存器与控制流优化。 + * 联系:仅由 compiler/compiler.c 调用;vmjit 与 vmbin 只消费完成的 plan。 + * 约束:不得改变 Program 语义、Read/Write authority、alias 顺序或 source + * logical program counter 观察边界,不得选择或执行目标。 + */ + +#include + +#include "binrwir/execution_plan.h" +#include "binrwir/program.h" +#include "contract/allocator.h" +#include "contract/status.h" + +#ifdef __cplusplus +extern "C" { +#endif + +runtimec_status_t binrwir_compiler_build_execution_plan( + const runtimec_allocator_t *allocator, + const binrwir_program_t *canonical_program, + uint64_t plan_generation, + uint32_t compiler_revision, + binrwir_execution_plan_t **output_execution_plan, + runtimec_error_t *error); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/contract/snapshot.c b/runtimec/contract/snapshot.c index ddd5680f..0aa179ad 100644 --- a/runtimec/contract/snapshot.c +++ b/runtimec/contract/snapshot.c @@ -3,7 +3,7 @@ * 作用:版本、source revision 与快照的构造/重置/形状校验;纯值操作。 * 联系:engine 在取 Program 前构造快照;host 提供 source_revision; * vmkv 在编译前后校验同一快照,拒绝事实变化期间产生的 Program; - * vmjit cache key 也引用它。 + * compilation repository key 也引用它。 */ #include "contract/snapshot.h" diff --git a/runtimec/contract/snapshot.h b/runtimec/contract/snapshot.h index 6b6adee0..329ba9b8 100644 --- a/runtimec/contract/snapshot.h +++ b/runtimec/contract/snapshot.h @@ -9,7 +9,7 @@ * 当前事实,不能替代或修改事实源。 * 联系:contract 层只依赖自身;host 提供原始事实,engine 在编译/执行前 * 取快照,vmkv/vmbin/vmjit 只消费快照与 generation,不自己读 - * kvspace;Program 与机器码 cache 的 key 由 engine 用本结构构造。 + * kvspace;engine 用本结构构造 compilation repository key。 * 约束:snapshot 不携带进程地址或 kvspace 内部句柄。 */ diff --git a/runtimec/contract/status.c b/runtimec/contract/status.c index aa762640..1cae5121 100644 --- a/runtimec/contract/status.c +++ b/runtimec/contract/status.c @@ -29,8 +29,6 @@ const char *runtimec_status_name(runtimec_status_t status) { return "yield"; case RUNTIMEC_STATUS_WAIT: return "wait"; - case RUNTIMEC_STATUS_FALLBACK: - return "fallback"; case RUNTIMEC_STATUS_UNSUPPORTED: return "unsupported"; case RUNTIMEC_STATUS_NOT_IMPLEMENTED: diff --git a/runtimec/contract/status.h b/runtimec/contract/status.h index cd113857..edf2f06f 100644 --- a/runtimec/contract/status.h +++ b/runtimec/contract/status.h @@ -7,7 +7,7 @@ * kvlang/runtimec.h;SUCCESS 只能表示请求真实完成。 * 联系:host、vmbin、vmkv、vmjit 与 engine 共用同一状态词汇。 * 它不是三类状态中的另外两类: - * - execution exit(vmbin/exit.h 的 vmbin_exit_kind_t); + * - execution exit(binrwir/execution_exit.h); * - durable status(host/engine 通过 checkpoint 提交的 vthread 状态)。 * 三者的转换只能由 engine/route.c 与 interface/public_interface.c * 显式完成,其他组件不得猜测或改写状态类别。 @@ -27,7 +27,7 @@ typedef struct runtimec_error runtimec_error_t; /* 枚举值是否落在已定义范围内(用于校验跨组件边界传入的状态)。 */ bool runtimec_status_is_valid(runtimec_status_t status); -/* 是否为失败类;YIELD、WAIT 与 FALLBACK 是结构化控制流。 */ +/* 是否为失败类;YIELD 与 WAIT 是结构化控制流。 */ bool runtimec_status_is_failure(runtimec_status_t status); /* 稳定诊断名;未定义值返回 "invalid_status",不返回 NULL。 */ const char *runtimec_status_name(runtimec_status_t status); diff --git a/runtimec/documentation/architecture/README.md b/runtimec/documentation/architecture/README.md index 774e6318..c4079c9f 100644 --- a/runtimec/documentation/architecture/README.md +++ b/runtimec/documentation/architecture/README.md @@ -1,14 +1,14 @@ -# runtimec architecture +# runtimec architecture documents -This directory expands the rules in `runtimec/README.md`: +本目录只描述 runtimec 的唯一 Compiler 主干。`runtimec/README.md` 是总纲,本目录把组件 +所有权、编译生命周期、执行顺序和 Read/Write 别名展开为可审查文档。 -- `runtimec-architecture.md` defines ownership, the only execution trunk, and failure rules. -- `../../specification/five-language-behavior-matrix.md` is the single source of language behavior decisions. -- `capability-map.md` maps required capability to one final owner. -- `runtimec-trunk.mmd` shows the only component trunk. -- `runtimec-execution.mmd` shows vmjit refusal and vmbin fallback. -- `runtimec-dependencies.mmd` shows allowed compile-time dependencies. -- `rwir-binrwir-aliasing.mmd` shows explicit Read/Write aliasing. +- `runtimec-architecture.md`:组件所有权、compilation 生命周期、状态与依赖规则。 +- `capability-map.md`:每项 capability 的唯一所有者与禁止职责。 +- `runtimec-trunk.mmd`:从 specification 到确定执行入口的完整主干。 +- `runtimec-execution.mmd`:repository 命中与未命中时的编译、选择、执行时序。 +- `runtimec-dependencies.mmd`:允许依赖和明确禁止的反向依赖。 +- `rwir-binrwir-aliasing.mmd`:myrwircap 映射、canonical operation 与 Read/Write 别名。 -Mermaid files are sources. Rendered image files are review aids and must be regenerated when -their matching Mermaid source changes. +四张 `.mmd` 是本轮更新的图源。已有 `.png` 与 `.svg` 只是此前生成物,本轮不渲染、 +不更新;架构审查必须以 Mermaid 源为准。 diff --git a/runtimec/documentation/architecture/capability-map.md b/runtimec/documentation/architecture/capability-map.md index 5002e88b..fd2fdc0d 100644 --- a/runtimec/documentation/architecture/capability-map.md +++ b/runtimec/documentation/architecture/capability-map.md @@ -1,32 +1,42 @@ # runtimec Capability Ownership -Each capability has one final owner. A capability may use lower contracts but must not create -another execution path. +每项 capability 只有一个最终所有者。共享合同可以被多个组件读取,但任何组件都不能 +复制所有权、建立第二执行路径或在执行期改变 Compiler 的决定。 | Capability | Final owner | Required direction | |---|---|---| -| Public create, execute, destroy | `interface/` | structured request and result only | -| Status and error vocabulary | `include/kvlang/runtimec.h`, `contract/` | success is the only normal completion | -| kvspace access and checkpoint storage | `host/` | available only through narrow host ports | -| Execution policy and commit ordering | `engine/route.c` | vmjit try, then vmbin fallback | -| RWIR reading and validation | `vmkv/` | plaintext to Program builder | -| Type resolution and instruction specialization | `vmkv/` | based on specification decisions | -| Immutable BinRWIR Program | `vmbin/program.*` | one read-only representation for both executors | -| Read/Write references and alias policy | `vmbin/reference.*`, `vmbin/signature.*` | Signature owns policy; Binding proves identity | -| Complete language execution | `vmbin/interpreter.*` | all valid BinRWIR remains executable | -| Internal typed, fused and continuous handlers | `vmbin/` | private strategy behind `vmbin_execute` | -| Machine code eligibility | `vmjit/verifier.h` | refusal returns fallback | -| Target-neutral lowering | `vmjit/lower.h` | consumes verified BinRWIR only | -| x86_64 and AArch64 generation | `vmjit/backend/` | peer implementations of one backend contract | -| Language behavior decisions | `specification/five-language-behavior-matrix.md` | the single decision source precedes manifest and code | -| RWIR operation facts | `specification/` | one generated source for vmkv, vmbin and vmjit | -| Exported symbol set | `interface/exports.txt` | exact match required on every platform | +| Public create, execute, destroy | `interface/` | 只接受与返回结构化公共类型 | +| Status and error vocabulary | `include/kvlang/runtimec.h`, `contract/` | `RUNTIMEC_STATUS_SUCCESS` 是唯一正常调用状态 | +| Five-language behavior decisions | `specification/five-language-behavior-matrix.md` | 先裁决行为,再进入 operation manifest | +| myrwircap capability records | `specification/rwir_catalog.def` | 每个 capability 恰好一条 canonical 映射 | +| Stable operation identity | `specification/` | 显式 identifier;不得使用数组下标或声明顺序 | +| RWIR reading and validation | `vmkv/` | source 只能进入等价 canonical BinRWIR 生成 | +| Canonical BinRWIR Program | `binrwir/program.*` | 中立、不可变,同时供 Compiler 与两个执行器读取 | +| Instruction and Read/Write references | `binrwir/instruction.*`, `binrwir/reference.*` | 完整分区,不截断参数 | +| Signature and alias policy | `binrwir/signature.*` | Signature 声明权限;Binding 证明 Cell identity | +| Shared execution frame and exit | `binrwir/execution_frame.*`, `binrwir/execution_exit.h` | vmbin 与 vmjit 使用同一结构合同 | +| Execution plan representation | `binrwir/execution_plan.*` | canonical Program 的可删除派生物 | +| Plan generation and target decision | `compiler/` | 编译阶段一次决定 VMJIT 或 VMBIN | +| Unified compilation | `compiler/` | 同时持有 Program、plan、target 与可选机器码 | +| Compilation cache and leases | `engine/compilation_repository.h` | repository 只缓存已完成 compilation | +| Execution dispatch and commit ordering | `engine/route.c` | 执行前读取 target,只调用对应入口 | +| Complete baseline execution | `vmbin/` | 所有合法 canonical BinRWIR 都可由 VMBIN compilation 执行 | +| Machine-code eligibility | `vmjit/verifier.h` | 编译阶段产生 COMPILED、NOT_COMPILABLE 或 ERROR 判定 | +| Target-neutral lowering | `vmjit/lower.h` | 只消费已验证 BinRWIR 与 execution plan | +| x86_64 and AArch64 generation | `vmjit/backend/` | 同一个 backend 合同的并列实现 | +| Machine-code execution | `vmjit_execute` | 只接受已生成 code;不能编译或改选目标 | +| kvspace access and checkpoint storage | `host/` | 只通过窄主机服务合同访问 | +| Exported symbol set | `interface/exports.txt` | 每个平台必须精确匹配 | ## Rejected ownership -- vmjit does not own language semantics or fallback policy. -- vmkv does not execute or generate machine code. -- host does not inspect BinRWIR instructions. -- Program does not own mutable profiles, code caches or fusion plans. -- No component owns another baseline executor. -- No public header exposes internal runtimec structures. +- BinRWIR 不属于 vmbin、vmjit 或 vmkv。 +- vmkv 不拥有优化、execution plan、target decision 或 execution。 +- Compiler 不读取 RWIR,不访问 kvspace,不执行 Program。 +- repository 不编译、不调用执行器、不改变 target。 +- route 不做 vmjit eligibility,不实现 operation 语义。 +- vmjit 不拥有语言语义,不依赖 vmbin,不在执行时改变目标。 +- vmbin 不拥有 canonical BinRWIR,也不选择 vmjit。 +- host 不检查 BinRWIR instruction。 +- 公共头不暴露内部 runtimec 结构。 +- 任何组件都不能创建第三执行器或第二公开执行入口。 diff --git a/runtimec/documentation/architecture/runtimec-architecture.md b/runtimec/documentation/architecture/runtimec-architecture.md index 623dae64..dfccc813 100644 --- a/runtimec/documentation/architecture/runtimec-architecture.md +++ b/runtimec/documentation/architecture/runtimec-architecture.md @@ -1,119 +1,148 @@ -# runtimec Architecture Contract +# runtimec Compiler Architecture -## Purpose +runtimec 只允许一条从 RWIR specification 到 execution 的主干。任何组件都不能建立旁路、 +第二次目标判定或第三执行器。 -runtimec is the single C11 runtime for kvlang. This document fixes component ownership and -failure direction while language semantics remain unimplemented. A convenient implementation -must never override these rules. - -## Only execution trunk +## Unique trunk ```text -public interface - -> engine route - -> vmkv reads and compiles RWIR - -> immutable BinRWIR Program - -> vmjit try - -> executed - -> fallback to vmbin - -> route commits effects and checkpoint +myrwircaps + RWIR specification + -> vmkv validates RWIR and emits equivalent canonical BinRWIR + -> BinRWIR Compiler builds execution plan + -> compile-time target decision: VMJIT or VMBIN + -> compilation repository caches the complete compilation + -> engine route reads the decided target before execution + -> vmjit_execute or vmbin_execute + -> route commits complete effects and checkpoint ``` -`engine/route` is the only policy owner. vmbin is the only correctness executor. vmjit is a -removable accelerator that may refuse a Program. Generic, typed, fused, and continuous -execution are internal vmbin handler forms, never separate executors. +这条顺序同时是职责边界:vmkv 之前是语言事实,vmkv 输出是中立 canonical Program, +Compiler 输出是可执行 compilation,route 只消费已完成的 compilation。 ## Ownership | Component | Owns | Must not own | |---|---|---| -| `include/kvlang/runtimec.h` | public status, request, result, error, opaque runtime | internal component structures | -| `interface/` | request translation and exact exported symbols | execution policy or language semantics | -| `contract/` | shared status helpers, errors, ownership and host port types | vmkv, vmbin, or vmjit policy | -| `host/` | concrete kvspace and external capability adapters | BinRWIR or execution selection | -| `vmkv/` | RWIR reading, validation, type resolution, Program building | execution, machine code, checkpoint commit | -| `vmbin/` | BinRWIR, Program, Frame, Binding, Cell and complete interpretation | vmjit selection or persistent truth | -| `vmjit/` | verification, lowering and optional machine code execution | RWIR parsing or language semantics | -| `engine/route` | execution choice, fallback, effect commit and checkpoint | opcode semantics | -| `specification/` | the single language-decision matrix and RWIR operation manifests | execution strategy | +| `specification/` | 五语言行为决策、RWIR operation facts、myrwircap 到 canonical BinRWIR 的唯一映射 | 执行策略、缓存或机器码 | +| `vmkv/` | RWIR source 读取、验证、稳定 operation identifier 解析、等价 BinRWIR 生成 | 优化、execution plan、执行目标或机器码 | +| `binrwir/` | canonical Program、instruction、reference、signature、execution frame、execution exit、execution plan 合同 | vmkv、vmbin 或 vmjit 策略 | +| `compiler/` | execution plan 生成、vmjit compilation 请求、统一 compilation 与目标判定 | RWIR 解析、执行或 checkpoint 提交 | +| `engine/compilation_repository` | compilation 所有权、索引、租约与失效 | 编译、执行或目标改选 | +| `engine/route` | repository 查询、未命中编译、执行前目标读取、唯一执行调度、effect 与 checkpoint 提交 | operation 语义或编译 eligibility | +| `vmbin/` | 全部合法 canonical BinRWIR 的基线执行 | BinRWIR 所有权、vmjit 选择或持久事实 | +| `vmjit/` | eligibility、lowering、backend、机器码生命周期、已生成机器码执行 | RWIR、vmbin 依赖、语言语义或执行期目标选择 | +| `host/` | kvspace 与外部能力适配 | BinRWIR 检查或执行策略 | +| `interface/` | 公共请求翻译与精确导出 | 内部结构、语言语义或执行策略 | -## Facts and derived state +## Specification mapping -kvspace plaintext is the only durable semantic source. RWIR, values, frame facts, source -program counter, status, error and recovery state belong there. BinRWIR Program data, -register caches, dispatch tables, analysis plans, machine code and profiles are derived and -must be safe to delete. +每个 myrwircap 必须恰好拥有一个 canonical BinRWIR operation 映射。映射记录显式保存 +稳定 RWIR operation identifier、规范名称、canonical operation identifier、Read/Write +参数结构和行为决策引用。 -A finalized Program is immutable. Mutable call bindings, profiles, code caches and fusion -plans are sidecars with explicit session ownership. +operation identifier 是 specification 数据,不是 `myrwircaps` 数组下标,也不能由文件 +顺序、声明顺序或生成顺序计算。重新排序或插入记录不能改变既有 identity。缺失记录、 +同一 capability 的重复记录、identifier 重复、签名不一致或歧义都使 compilation 立即 +失败。vmkv 不提供默认 operation,也不把不完整映射变成可执行 Program。 -## BinRWIR contract +## Canonical BinRWIR -BinRWIR preserves RWIR variable-arity semantics. Compilation fixes each instruction's read and -write counts and stores references in this order: +BinRWIR 是顶层中立模块,不属于 vmbin。canonical Program 只保存与已验证 RWIR 等价且 +执行所必需的稳定事实。类型固化、KV 寻址、融合、虚拟寄存器、控制流分析、机器码、 +profile 和缓存都属于可重建派生状态,不能写回 canonical Program。 + +每条 instruction 使用固定 Read 数量和 Write 数量,并通过一个规范化 view 暴露: ```text [ReadReference ...][WriteReference ...] ``` -The common form stays compact. A wide form may use a cold side table. Both forms must produce -the same normalized view for vmbin and vmjit. Encoding limits never justify truncating operands -or splitting one atomic language operation. +RWIR 可以具有不固定参数数量;确定的一次调用在 canonical BinRWIR 中必须保存完整数量。 +窄式与宽式编码只能改变存储形式,不能改变语义、参数顺序或观察边界。 + +## Compilation lifecycle -Read and write parameters may explicitly bind the same canonical Cell. Signature owns the only -alias policy. Distinct register identifiers preserve access authority even when their Bindings -point to the same Cell. Undeclared aliasing is invalid. +BinRWIR Compiler 的唯一内容输入是 canonical `binrwir_program_t`。它按固定顺序完成: -## vmjit refusal +1. 验证 Program、manifest version 和 binary interface generation。 +2. 构建 `binrwir_execution_plan_t`。 +3. 若允许 VMJIT,调用 vmjit 的 verifier、lowering 与 backend 编译合同。 +4. 形成 `binrwir_compilation_t`,其中 execution target 已不可变。 -vmjit consumes only a validated, immutable Program and execution state. It may return fallback -for unsupported operations, cold code, disabled machine code, platform limits, failed guards, -or inability to preserve an observable boundary. Fallback means vmjit did not complete the -instruction; route resumes vmbin without repeating a committed effect. +execution plan 可包含六类派生优化:指令编码、类型固化、KV 寻址、指令融合、虚拟 +寄存器和控制流信息。所有优化都必须保留 canonical Program 语义、Read/Write authority、 +别名可见性和 source logical program counter 观察边界。 -## Observation and commit +vmjit 编译判定严格如下;顶层 compilation 对象只在前两种成功方向产生: -Every source instruction boundary remains observable and recoverable. An implementation may -keep values in derived storage within a valid region, but route commits only complete effects. -Commit ordering is values, source program counter, then status or error. No component may make -a partial instruction externally visible. +| vmjit compilation outcome | `runtimec_status_t` | Execution target | Required content | +|---|---|---|---| +| `COMPILED` | `RUNTIMEC_STATUS_SUCCESS` | `VMJIT` | Program、plan、非空机器码 | +| `NOT_COMPILABLE` | `RUNTIMEC_STATUS_SUCCESS` | `VMBIN` | Program、plan、空机器码 | +| `ERROR` | 明确错误 | 无 | 不产生可执行 compilation | -## Status direction +`NOT_COMPILABLE` 表示 vmjit eligibility 已成功判定为不适用。它是建立 VMBIN compilation +的正常编译结果。非法 BinRWIR、映射错误、内存不足与内部错误进入 `ERROR`,必须原样 +停止,不能变成任何可执行 compilation。 -`RUNTIMEC_STATUS_SUCCESS` is the only normal completion. `FALLBACK` is reserved for vmjit -refusal. `NOT_IMPLEMENTED` reports absent scaffold behavior. `INVALID` reports input outside -the contract. Outputs enter a documented empty or invalid state before work starts. +## Repository and route -## Behavior decisions +repository 只缓存完整 compilation。缓存键绑定 authoritative snapshot、RWIR manifest +version、canonical encoding revision、BinRWIR binary interface generation 与 compiler +revision;租约保证 Program、plan 和可选机器码在执行期间一起存活。失效只阻止新租约, +不释放仍被租约持有的对象。 +vmjit 不拥有独立 compilation cache 或 `get_or_compile` 入口;机器码只作为完整 +compilation 的一部分进入 repository。 -Every language behavior starts in `../../specification/five-language-behavior-matrix.md`. A complete row records C, -Python, Rust, Go, and V8/TypeScript behavior, then chooses consensus or a stated camp with a -boundary fixture and invalid-input rule. Product semantics must carry a matching -`behavior-decision: ` marker. No matrix means no manifest entry and no execution. +route 在执行前调用 `binrwir_compilation_get_view`,读取 Compiler 已决定的 +`binrwir_execution_target_t`: -## Compile-time dependencies +- `VMJIT`:只调用 `vmjit_execute`; +- `VMBIN`:只调用 `vmbin_execute`; +- 其它值:立即报告非法 compilation。 + +route 不在执行时调用 eligibility,不在一个执行入口失败后调用另一个入口,也不修改 +compilation。执行错误沿所选入口返回并停止。 + +## Facts and derived state + +kvspace 明文保存可恢复语义事实:RWIR、值、frame facts、logical program counter、status、 +error 与 recovery state。canonical Program、execution plan、机器码、register cache、profile +和 repository entry 都是可删除并重建的派生状态。 + +只有完整 instruction effect 成功后,route 才按 values、logical program counter、status +或 error 的顺序提交。任何组件都不能让半条 instruction 对外可见。 + +## Read/Write aliasing + +RWIR 与 BinRWIR 只有 Read 和 Write 两种参数方向。Read register 与 Write register 可以按 +Signature 的显式 alias policy 绑定同一个 canonical Cell。写入后,后续 Read 必须观察到 +新值;Compiler 不能缓存、提升或重排会破坏该顺序的读取。未声明 alias 必须失败。 + +## Dependencies ```text -interface -> public + contract + engine -engine/route -> host + vmkv + BinRWIR + vmjit + vmbin -vmkv -> contract + BinRWIR build contract -vmbin -> contract + BinRWIR -vmjit -> contract + read-only BinRWIR contract +interface -> public header + contract + engine +engine/route -> host + vmkv + compiler + binrwir + vmjit + vmbin +engine/compilation_repository -> compiler + contract +compiler -> contract + binrwir + vmjit compile contracts +vmkv -> contract + binrwir build contracts + generated specification facts +vmbin -> contract + binrwir execution contracts +vmjit -> contract + binrwir execution contracts host -> contract + external kvspace interface ``` -vmkv never depends on vmjit. vmbin never depends on vmjit. vmjit never depends on vmkv or a -concrete host implementation. No engine file other than route may depend on execution -components. +`binrwir/` 不依赖任一执行器。vmkv 不依赖 Compiler 或执行器。vmbin 与 vmjit 彼此不 +依赖。除了 route,engine 文件不能同时看见两个执行器。 ## Acceptance -The scaffold is acceptable only when: - -- the one public header compiles as C11 and C++17; -- only the three structured public functions are exported; -- all unimplemented calls fail explicitly and clear outputs; -- missing component sources stop CMake configuration; -- name, dependency, behavior-matrix and export checks pass; -- no third executor, old path, abbreviated project name or alternate status survives; -- a fresh build and all scaffold tests pass. +- 每个 myrwircap 恰好映射一个 canonical operation;stable identifier 与数组位置无关。 +- vmkv 只进行验证与等价生成。 +- Compiler 总是先生成 plan,再形成一个确定 execution target 的 compilation。 +- repository 缓存 compilation,而不是分散缓存 Program、plan 与 code。 +- route 在执行前读取目标,并只调用一个执行入口。 +- `NOT_COMPILABLE` 返回 success 并选择 VMBIN;`ERROR` 立即停止。 +- BinRWIR 保持顶层中立,vmjit 不依赖 vmbin。 +- 未实现能力明确返回 `RUNTIMEC_STATUS_NOT_IMPLEMENTED`,输出先清空。 +- 不存在第三执行器、旧入口、兼容别名或隐藏执行路径。 diff --git a/runtimec/documentation/architecture/runtimec-dependencies.mmd b/runtimec/documentation/architecture/runtimec-dependencies.mmd index 9637c086..598a5716 100644 --- a/runtimec/documentation/architecture/runtimec-dependencies.mmd +++ b/runtimec/documentation/architecture/runtimec-dependencies.mmd @@ -1,41 +1,49 @@ flowchart LR + SPECIFICATION["specification
behavior and stable operation mapping"] INTERFACE["public interface"] ROUTE["engine route"] - PORT["host port declarations"] - HOST["kvspace host implementation"] + REPOSITORY["compilation repository"] + HOST["host services"] KVSPACE["external kvspace interface"] - CONTRACT["contracts and generated specification"] VMKV["vmkv"] - BINRWIR["read-only BinRWIR contract"] + BINRWIR["top-level binrwir contracts"] + COMPILER["top-level BinRWIR Compiler"] VMBIN["vmbin"] VMJIT["vmjit"] - X86_64["x86_64 backend"] - AARCH64["AArch64 backend"] + BACKENDS["x86_64 and AArch64 backends"] INTERFACE --> ROUTE + ROUTE --> HOST + ROUTE --> REPOSITORY ROUTE --> VMKV + ROUTE --> COMPILER ROUTE --> BINRWIR ROUTE --> VMJIT ROUTE --> VMBIN - ROUTE --> HOST + HOST --> KVSPACE + VMKV --> SPECIFICATION VMKV --> BINRWIR - VMKV --> PORT - VMKV --> CONTRACT + COMPILER --> BINRWIR + COMPILER --> VMJIT + REPOSITORY --> COMPILER VMBIN --> BINRWIR - VMBIN --> PORT - VMBIN --> CONTRACT VMJIT --> BINRWIR - VMJIT --> CONTRACT - HOST --> PORT - HOST --> KVSPACE - X86_64 --> VMJIT - AARCH64 --> VMJIT + BACKENDS --> VMJIT - VMKV -. "forbidden" .-> VMJIT - VMBIN -. "forbidden" .-> VMJIT - VMJIT -. "forbidden" .-> VMKV - VMJIT -. "forbidden" .-> HOST + BINRWIR -. "forbidden ownership dependency" .-> VMBIN + BINRWIR -. "forbidden ownership dependency" .-> VMJIT + VMKV -. "forbidden execution dependency" .-> VMBIN + VMKV -. "forbidden execution dependency" .-> VMJIT + VMBIN -. "forbidden peer dependency" .-> VMJIT + VMJIT -. "forbidden peer dependency" .-> VMBIN + REPOSITORY -. "forbidden execution dependency" .-> VMBIN + REPOSITORY -. "forbidden execution dependency" .-> VMJIT - classDef backend fill:#e0f2fe,stroke:#0284c7,color:#0c4a6e - linkStyle 18,19,20,21 stroke:#dc2626,stroke-width:2px,stroke-dasharray:5 5 - class X86_64,AARCH64 backend + classDef specification fill:#fff3cd,stroke:#9a6700,color:#3d2e00 + classDef neutral fill:#ede9fe,stroke:#7c3aed,color:#2e1065 + classDef compiler fill:#e0f2fe,stroke:#0284c7,color:#0c4a6e + classDef executor fill:#ecfdf5,stroke:#059669,color:#052e16 + class SPECIFICATION specification + class BINRWIR neutral + class COMPILER,REPOSITORY compiler + class VMBIN,VMJIT,BACKENDS executor diff --git a/runtimec/documentation/architecture/runtimec-dependencies.png b/runtimec/documentation/architecture/runtimec-dependencies.png index 8202eeda2421e4c5cc420268d553436ca7798eca..68fcace8c3ffed18f9208a09fe271770fdcab641 100644 GIT binary patch literal 130991 zcmcG$1zeO}+b@cV5`zIEQX(Q90!o93bm!1KNP~pH&;wW?Al+Tk-5okACEeXMbjL7o z*6=*|zVElcv-dfBpEJLo$S^baz3zKm>$?7Nt?^Ni6UWDSfP;mFg)b@bN(l?=MkW^4 z6^R?y!C#gii>_l~-NKT5C9L8Uw>pmPM%X{nv}Ix(D!cJdykS)J|mpW`rSnjP1cBT&AR=M=|VLZ13aTvg_+%&v#DLG$vm%0&n z5QsyiHcMh@DJNwwC%L=3d%C8vx@26jrze)YyL-KO8FNL`EWL_lp3S%S*VaGb61%97 zKK^=~M#ld+@^x1T30TUzYk>Ilrf z&6%r-#=0amn(to~Qg5Q?iI`STh>fk0FHlwvH2=W+Z6?_l69t$@nBMsvw~h$sWKDdOl8ljn1;oV}g+cweO`FL1Y<|p7|WQG&`%DH1d$>Vxp4bI52a_ zeT|BW%F8T95V>H@&F_9WjEXYj;{z|n{^DGP@df+QUQ31Z6M`S}56(Yq(<2s0VOjcS zxaS5wewp{-Q<*k;5D?@Ee?9Zzl;voj-8!rqw`w}xTk$VwIMwu4xj%#b&mmgr88C4% z6?PRHn-nt(GZwsfm%He+(uw}MFZQ|m+S2ok(FCgx7dM`6aOnkje z5*FQfk^05it^W+%IJC~MK1=xu;eRF`E6n2Wo6<@KX*%`vrMh}eA$=b^`A4$!{*rTB zv8mlZ!%(<%O96c5MHUs4XYVWQ6jO_f7v3qnC;#X7^Z$%|JumL~`SVu7^GNvfmN5Fu zm{9xkpi}-|Eri>cGyi$Kh<=0#hCdHacF`A@S=oH;N6Z@Zc2?}>#Y-l4&d;1gXlP{A z8bCh!wN|72O%{_*wfe<7xI_P5bZJxjqXoh8g3ekOuQX2ocgrz6&Pd}|@(N}$Z`k;X z1(2DMS9h@CNh`4AX;;al%X?^rgx-Dp=#kRtPU5NU(L8$9vNv5eNL~mIop7=6>dR8r z3IakVwRa~xh-=!j>Ygde2k>eP(XZ%ln7 zkX#v9^P_Y;-2A3gpeth5^YxS4$(D*)SCY?{`&+echtq@_rAydV(_X^c-QvoIsD0+1 za!c$g)Vlar^M2$$e6T=|I?;_?_PO=ML#+y{kZKrdYd@4A$gZ>QPo&bxV=kB>FXgY+ zFC-klmzGSaA3y#vRAv#WqmwHhNO4ugrghMgk&ylHjO(9F`S_$;UQ6n-nBa&uWD?i5MHvY@YIy-&w+sjuf)`X9oBdW zDII@(Iq0jVbKd$%zrXFgsPouy!a3e;uRnv`v`gS83cb^*i7JZavW9m#6WzPlTGCn1 zqMEHz7Rl$h&f<3utzIj@#H5{HfBb7^J}RojaH6)LpNEC&&!VA&p3gM%|50Xc^*3re zEoF=${G?oJ+^#wNjfnit*49>VNe7Z)G0raG3z>6+j@f*}8M*Cm10-s>m5x}utHvol z`BbC3NvF=`NEkIxFu7D{<7*sa{FYnPju-t{NN6JoZvW6|;dkJwIU`GCn{H%iDD%Y} zh0$X2M0h}cLW=iZcerw2ik^PLTU{0ZB<$>df?G+YYa>yN%dY#^xXA+MtE#F{yS&f# zGM}3g9EcEwZwo`^hs!Lywe1zX5#?#=>k;Pt=0iJ0MJB@{TR(orGlRO*#BXe66>xg+ z3lg-XCE1@d$Zx7aFlonLf3kfyn$s+941PduJD@QR*0+?)!8)ewoTXAbmigo0HdQ$R~m!K35B-e6xcJo{skPkn;VV_>DTvCJa@=- zWVd&A<|kY!`QF4r;HJ^hB-<0Np=lO_JM)ox?javP(m4DzZwhMq&&f$WUKo-gQpaIW zc+{RItY>pMV?#g-~NuHpu%yo+=Mx3EH1fA!@i?#=}5`B7?ODk6N zJ$IwzXv)m{C-NJ6@^!H3EvtE@U5<6L)bg~ps>>{(7bP2OJ{Z6s74}r|z~=)6de)WW zR<55Z5xd;i=tR;HcXOWvr<)zJ=yyTQ1iKVDM61la0$EJL1VS!hOL!o!<48`|#5j~QU=#&B6v!;qXoJ)6zc25Dx! z5!=5x0$ao>WrN+(Rv}Fku3`@BW5z84m@5luxdIo6;ppx z2)JWzca_8Ucv-valv`%pV$4GX-qFyr#q^SGKzvZ z7WW6J?pc@#Io&aZ|fFcBA2EXm3G`wo$9G_3X9no3F$E%k6S zr3^Xv@8)Y(1fzQwBpegrT$3j%$bJj;6LkV1w+sOPnpX-uRNNZg&Q2(GGXI*e(ue^0gVVJ+ zoLTF+#E0v$eMR|^01b6b2s*C6Ia;q_HCh|#-`^qUKcq4nuZC}J?d?Pfo$(D98RWbY zhlZA0@--(3A4u5Pe4aW~{c)gdc7)m>tU5b=XS>rbqC$EQ-V&_L z%0>vtYHQOUF{yRN4>g1$JUUvWJg?192Zo6PHOtI1C_FNG)plm!#l`GKBc(Ty+#V7x zE-`>LsF52;Yzdz2Ph3pgluXil9IVFJXG-xaC2c4+n%L)gk=JnRBeksSnkW_)My(ry z3hIwbom?FpB0ze%HC$|zTG#1$$#FNV&gq z8}5%ahaAZ6Q`>%3t`U^L>0yb(jX8e2rU;SE%Q`NUc-@ndr7%jsb0Z+OOx6y%WL!ENw>ix2;*81HZY<#DX!$$s3pqiFR2XDML)u+s?B) zAB;<4Do@!dN!3z{pt(-S>S!bjw;9n4T1C@di{u&dl8+zXD8yyCG18&b!Hs`|QnsRP zp?$QuFH5g^Z;+t$3NtQo2jhe;z?jQp!(<~DTEI||A0Eke5T?u{pW4nZXHXV>FcVF1 zF|Vxd)UMj?$>|de9Jy4cQ&T=Vdb(D3vCjq|(_}Rsg@H>wl zrOY97u!lzXsvj|HmKHGjU-Z*^$W2OCu`@6dJ;cTI7sa^4xpHaLUUr0Vs?pHw5zadrV@3iM1& zVPKtv`mwHCKtsE$9RwPjY9{WHkfia>WDK<}#ybX&IWNK-3dNz4^e*W9s)YunGIJOY zYL&tk&=g!b9cK@rcn0#-E=y(a7rU-X*!7&~dLA`Qz{>~g*0Drhx?)waSWr3hpr*Ye z9u>a3R3wCznv)ck88W+)IfVLsr?O7CXkz!PH^`DHWy!zkbc@W0s(v%qj3jGEWn>ibLRX zBiL%(MJk*@)vtn8Yd=F^tt(l2i+5bVAct$oQwFt9?l-t1cNk)ieL89_UmBS6fyv|a zD2JR3u&}M$oubee-QfoIG*KeUn^Ly6wP=37B?aLU<2+x++&GvT7pA=PqgH1fB&JqN zI>Uj6!lPWg!=4h!s^>nDuT!IGIav=ch%q)cGMWc#q^jRll_6&P#GL_uqjsnI1brao zyw`v5n2oK_30*W&1j!~_K`YO7!H(;zainjf-Fpzu%$mC&1UR9J;g5BaMYXDTxm>fo zb9wu=YPl}52DdT*{+^L$qve(sl$41+=H=3xGzxY1nuuIet zO@55#hhZNj2=J{LjZ@`$?_h`%U~V7oJa}M5fNj5CMclg8)8vNC8Z;cpm7haxn6v=g zWk_Jb?zH*g4h4liwpi)e>47g|-F0b`syaqm@|asWqu!W6D20)iNuyYTrFIjCXTWaY z`}gkzqd=iDa2)B3Jt%`SX1VOe?3ar9Yi^(HgwEG&7`K3|_6Vf2FWS!Yd;7Pfsu8F5 z96t*CW~=-26qxU2?o?P)1UBVGw5_@Jl1|DuiBy1<_fv}ZJRCc_mkt~>M=71a#Odj0$RL65m6oKh)5e$W$rq+l^=3b4e^>+OGF|JN&QMNabS%EKAKeP&u( z@d>9{(VA2(s7Y72VgR%~rfdxYlZBd)2pnIE=3Kt!yxX1O$0&s1#M!eGXGy63e4VqX zrvCU@m!Xg}X<}&*o@>bpQjlT0%#^0q-@m!vXh}$9q7UPFVFGV%5M}I~F?N?)41TL$ z9zgoE1>D&zC0j{55f%Zja( z12vc9Qz?f2Y_vz&T{HztmZ?*LQCmd9_P_E{uMZ|K-Rw8x7lt`ZFwvRCyXdS-OGq4Q zG8BS3SmKTEe6m$Dmz`r3mYXYcG#3gK8%bPD@^ny`?-utSiJyP^G=9~WQO|8F`0CZG zQf(1ys~9TNm(UTX+ARq(Z)o$L(G_)>$a5F9{W(=5&E zAI!IY|H->|!rPZXZQ}WWBJrq=bxzM$)$tP^ea!`C|#3^;g0wk>G5j()je^GrnCK1`tAA1 z#G#FTz*aF}wj!tSWKjscX6X`d1>}!|v=LgV=Wo<$6XE;yb+S-Hvw>XIEtJjok0wT) z2|5m<;XHQ6BZ0lC;sqXX>x&?>NykVuthb1X2PI_9S+vSm3BCy<0)a;MT#tcU=k|PB zL7}A9wL15h4t3WK0^pOe))Wj-U1#`~pgjLpE%Kv>rmpK6 zNlSZsxR`&;NOJUSGT$VO_6$f_WOh!8kHG3H(b1p5WWzzd&Y*NztyT=^8U^sq#QXJx z%ZgF707|(gRM%S`**8r2XlZcc313o)&9t^g#kw`>D3FXt4#YUr=5_5F+WygXNbM+v z?IM68;WzIJ-U3NGwS0Eg`OFkl=pyn}mz6x|>MdXQ4J6x_d-v{H5hSPOpfSn|T3udX zF9ysRRgM}>j=(;)28G874{GuQ(4yqESt4~LC9yk8JzW3o?%uzQmAU!az<^chuFmk( zovgV&i>IidX>kaLc^_Q~5CG-+i%7Hg^QyKg%mX>iRZ%15i()tmBN1n{(B}n{QA&C3 z>m=EAc`7*r>Jeq_%l5`h+Lc{tBdOx8S)ndMXkB!-7_)^A0<~-tsom28Dcao-lCZI5 z*hXFGwG4bf>GpK&N@E+qc}zt$ZF@<9;lC1^T2CX5+vdf}7g2$Ql|+UigSw4uc-~l8 ztz{;OaGh+`oIiX~MeJN%_Uuj4sexR`#xIPF{zIZx@cOS}@BcH&`Ohf+A)E|#&n(p1 zfP%vE>C>l+lVM3E24dbAJ{D^o5IHw@HA|2X8|ksv+W<07Q_XRpwHE>;i_hUrIDpF%W*EGC6BjqKiPA%@r$;GG zG1d6u#4kj}&xP@D-Pq?(_t#$eQ=Waz)hLllmqTkyiO9*7zZtKV%&*;cS?-zFzBp&2 z*167))#@`grtONf*?f8-?oa7dZsP+JMrs2=kkO1ySxaxXaH3ed9wN=#g5iH#TMd#g zzu&ouj~|+oU#-Yevuch}-0<$(Xl&IJ>+}hO3P8=;a8h1Z>u8+~WL#g25>E#42ARjP zY9)Vq2DmLJPC&qXcrbqOQ6~O4=47Yy!SYC1hRaFx{ytQf#A0&2!Q&&R<%p8tkzvf6 ziP~@Z`AQX5B2~x8OSS-!Q0$VqpB`Z!9j|oG6*QVJq`A43W+x^)Hsj>(!y$VupYnf7HrfuW3-1PvOO3_A!s!X4T+qmKb^IBobjo@ z{~)po001t`&# zV4Y1DT4rU{q-mBtxCn$78kjtiX^-)%K%UVuGc#KUsQV;4ug9Z=$--|$MO+qE^-%(b z%Z7&#XTGcO?WVG&c;Jk3rZFtbzs}s*`*SqXp$29v3{`r|^=7CGIarYR43vd;j#)}+ z*#hwGmPjB@pCwrWCKh>j??RQHesA9&8e-1|U`GM>eY?!1CG(KPMAm}|)R6wD{m_LS z?%Dee;He}f0B%e9Dddx@=ZOdj4G#|wS9@0Q5zXaH(w(R*OUSImtP$4P%QAB5XXF(z z?NDVM9;1TMwTZlu0YO+>FUHgq{*>X}wBIn%6B{Jl6(nS59_Y@frJ1?g_#mH-b-$}TmER#WI6Hah< z`F@jJuOjVB?ppOZo_l$1i&lHt2Tsuv(GRa}Tpz*Uz4vxLJL zL+6G~XeAQ`2U~MB5}TFf1(*i4cl2svS`Q{WLjYoKk>wiyQzYXc=axaoyJ;vt?mZ?O z)X~xW3XF$`=aW=G%%1WnyuYsxfyxZfW5}HPxQxSKo?=bWAAr-xsRxzoo({WW*#U2% ziFC5pB2+Pr)SHlhZmG%IDJ1kA;`imjvk8iTMIYLPNT?qC-?3AxDs-HVb~af2S1YCj za&+=P0ZAFC3l&2mJGH3w6$d&osJU5xcD%sXEz5}Ly@ck360JV5PX)RR}JBWJa zy1+Q3z}@Tw`F8&Xs7I+{o91At0GEmx1Jx z>xECM866!R0R{z?<2e|!`-J>6dr9mV#+q5`d-<|UWnv2K?c2BeDp2U{DZ*t2dhdMd zsEa&+#Xt?TYf!-H-d%cmmD?y)%>T~CfUrLQ>us37g;D+gM!{>Z*rw= zRDjp6wgj+n9BgHP`HPRwbQ$JWcyf52_h-mSs;Na7#iTbC=U$!+T0M*-b8Pl1OOWWD zzR5wR7BuqH?EY)b*CdzY9*W=zLK43N}$bFL+LKCtX{Q44Pa80Fe@d;>0sOiO@9isH_>FsTA38nQG zef6rc#$heSqZGZ+nMhgadSE5~=FKX_JIlq6`1FE;f-t;&y!&hq?fSD->+`fKp2VHc zrOAzRfDl(2Of9YnJZCjc&6t|PLbe9ul`lUd%B)L9RKP_c%^zf0UCO@l>rX*@MlS7m z54lb6+P@9yFN*{ft;EoShR6}&g`ek+KGyhqImrD0T{v*9QqyTA8^8(OzfkLr;=)gCRgSnT0ChXQd=&!MA@6gvk8b6}Hlrj;}B14#r01#5O) z5NyTFZ9O~g=CO#w3Zc8#177^kYS<;LsmF8k^CZX;+=jo?1vmbAWKV^yPSlO!Kp-r5 zczC}-VrZvhVj}!6WeCRXI`w!-JJei+qW>dK-{ZkzCUUotjORvVrgopI@d4|h{cEDu z`4Yh4wv`D$bF7iyn5er_?YNP^=XSWc3j%T$;6aE^y;~K>vuFK^8FKO8Yu2k7>m);; z{6w4qx!&~~=(B-Tf^^)oS5L}iwTs^Em3JhxJev&^I!Tv}y;p6wC?{TG+^$U^bYkPu zGHu*v8=7Ifi`uX83F8+A*WIxE#c-?+dvT^(eRu=@bE7e6%~~&i&Q<2J+i%(jmY3& z{pXe=eXw3xE~891F0D+|t?W)zYM|hVM(J5|Fg5jVr=;a5ht*hR;nB__HgfNHF~=II zy$@_!9z7uwfs>xq;gX6-x7=B@M&gpidBx)Xr(Le}3ZlU29+Udi{?1O@;EJuSt;(cG z@;cVmMG=llm%K(4$EG7JD!bdBI->Y4W?`k3o;S`mslAG|YVJ;;l^%% zrj+D_&f6`tseKz#o$XwcaYb;HLsJ;N^7rougaC*#E8T8)pjhuHHsMySm5;JNdh}@Q zc#Bpp?tZ#%WSuylJZ!AFJ(df#yEe+jNJrP)^A6t|p+9cdDL}&O$?;dC=NCZ8Io^QK zsP}*HjKOK6?%*Y#!)jCpg8ul_x&iIb3~tbS*WIOHSKuj_z_)%9e*o2#y-yn*yfpb!|B>+MW;1bUf;U+ zg(edBT58oW1;P_?t|m0nYgO7Li^Dhx=N1-RKw#p?^!|nc^a08NKp!kUgA>yzBXBFBgErOL)#*EB%tMPpmlUOV)n@9FPAuzkFN!EybwmYPxD?KYPqR_cH z!v=kXSK8j{a4*De$>t|M*O<_BL5vO_I(q}3^9=nCBNOP)ALDU=bI+wjwI1*g<;g7rWuZY%Ca{}E!=@AAn zw1bq_J`+xX+<{Jj_3qZc@pIA7W9C)U)lC3L`#lwMiD*wl)?3)O zQyI8D#fFleWTLNMr`WBHl-2XT=*^I)ta%`9X!sQs4%PLkoR83A7kT+ImodNc(V{n{ z`wh2Qf3EMmd zfXhm|&}GkjF&ULJDe8@nNELt1qyZO!@^&i=jCFKhW?)pywL#+0ioUzU%*olOY@3Kr z`uuRIQ5+N7()oj`(7p{x@$O=X&XV~@ZI{nxV*S%vfRpSOX#9b zDX<1Ya%;8%keIZ%nfM_{wG8kac(S4yZa7gbzr;lf}UfRiP-Uy02OQtA86O&lL z))NfK#i4I_Y*?Dye#ga;*>xre1WeSq4szSa>guJ6;a9|6)d?4sx2{<$&-S(&1sy(b zU!)6vxc?*Gp(-%noZ4vhmHPl@z@9zA=QEhL@E=&V zH70){Iip%h($LWGt&Om^pncjMo}1#hFT)5aDAp&y5_nqBi-8>kacxf#4aYo7QZ%4E z$O_rVLIRp48C)!ZPP$chdU}ctukS_NCTa&yo4$cs?v?)v2ti*rBXwQO0(A>=R+pDS z1xw6gEFiPhO$b@c&?^Zk@X(<1OMHeI-_+0r8pYZ^Lu@f=mH&30a9$i1=?07cfyH3{ zUftAtT-$)f`z}j}5Rv62gJp~@rz2h?ANoWV=N_vrS)oZMMTw~d896(Bm3({5v+-(| zRuG47AXfB)LfXJz>_F3L&v32t&U=rXa@$8ErDg_+4Umj5vU?d{0bJt6)Z8F&N7s5g zm)~JiWU{;NuQq~A%r6dA>t0Mv9PD1#+kHUup|g|Oone#2Po{d7%X;6^Iw+r>Ar}gIiuNgx*z7s`kjvf3388 z-@0~7>@Y#Vl^qryim3|{LL0z85t8@TE-oqY2foemQZ`4T$Eow?LVGM+O3(xT25u!C z!L&8Fb6mDMR5YvqE~@8H+`3hP8JAX7|XNWh9ExUGy`qkZ*Nps`V7 zUxYwF#i-HqQvaTfxJ%U>5AtE43%bYN#`wqQ+lq_SY?}7oUhp zN%@rI@7}p1cHX_GVgt(i&=V|(!F{g`V7!!_BP@o8=Y8~;#d-cnlKJ1$_%A+>^*{Et zQ(nSK3MpY~>+0=J6(<#4(JX&s2HM2IUCK>40%T=m2W;F>YJCm552DhC0XcB@)eZ3X zuag##>wo|L{Y}t1TBB|pZ4{w_`N241tE;P<)HM6{5QQ?y>Eub+E{}_iCH-129>rAR zRvk$W@up>AS*O@5YVfVD%dWq&s(d zREh{aka^fZrTroo&l^2GJ#7r=&2?^_pdYt?~br=AAj-NO8 zb=XUVG+>4H_eb8-gXL!Q%~aos)y}^1GmS-8i>c%{d)xUBBKxDlzpR}#1=;jYq63T~ zYak88f z-e~d6dV-&Ujm;(uxl^Tu#VP_CdtRie5Xwo)%EBgsZXN0&xXd#VoH7W7LDVW%2E{(D zx~H;%dW5;mH;TcUyIM6u&5D2m?x>8~Wj)XQz(`A^;N#=Nqa|x4At$$hdto{`1p{iC zk=-)RtW|CgTK<-Vr7^ixg%_lG(18C1Ffs3#0}i~@w}HpEnNelg3@^-3kBkBz zTaI*(akevnnq*dO?rZL9wKxAgb#$ghMNv{l=0sN39Vix9PT?9Q#@9fX=|F#y@CO{b zOT2*0Y1cXxodJ<7l$eA>(nturEoryU-`^ij4dmktEZz6#GOTYvzyRXlFe-g{W3lkW z{L`W2qGs~tuyPtLcEfm)?|pAnbpo`?cwF5S`>)Gq_X@+*`}ViCmQ(A)WC+jCi~;>1}yi|*I-fvq9 zL;wz;g+Vf}a^neIYE|$=;FK{jYPK(AK99`GsK(FE(vk}b4D75zs)wP@lK?mzYh+N6 zO*oeB4=@6TXw2#Z7|v^St=#)?>lsr9mQnL0)w}FG(ahn8|1|Dai1NH;L9h*A_E?=i zUR=YpalJ^Jx2=-V)6=6=W^$)Yk>UBV4Gnz=>+N@OvmXr&4GRj|%mQyu`YtUk-77Nt z@d*vh5ts=LU_3hy1njsO*;pViNyZf0Qlal2QhE0oL605$xegXyu=U7kH^N5a4x^C1>{q!To z)^=Shiw3}%0CYiTq=H(P5BRwShWh$3o?#Hd!3P4t8%HYz4RJt@X92j}q@yLFqTa*C zrqBfReq2JY$U1?XMSQ zQBhGRz?^(sXR5b1=0@qVl+1t}G81swZN`LJ(tG7ZXKxa(X{EtWv^S=%Vfs}w!+;Kk z=Z#3t$&B)%qE-HRncFIzN)Rdiu^?uz+fuGVVEp?0GO5n)s!UaNiq0S>?`XEz5*5%wCF$LUEU z@GEBl!Wd8eK+l`W?z}x$m;%~I*Pnqd!(0I^p>vsbWZx{41!k0m}PHXQaQur7^<0n6U zyb@|F_6@ACUse(VmJ?S zp!bL@yKWhGTdc)zi57HIj{ZzI;W5nhjXoFEYZHTWTH@^=b48(N@ycsLuFaddbn0Xh!HbgJ!J zbV^MXJt5wQ$H%Q0atAXC$8ftm@Ydvd`3rsrXm$nn?`ek`Balxq$ZKzD9zxDL$E;EO zILQOGaCYa#EQh28xQ6{PrH^~6rkXabPtYsWn*IN&Fg?96LczAU83;9Oi;@}v9NS71P zmha{z?=kK9>LX21puFwGi3LIZ1g*N(t)f>nBr0G|Llk zeBJQK#9%P_23>#xi*gzbjg23GKAVaHNIoVJP0@seg!IhL&K}&HqWR}i9zS^^huKM~ zV(OAfCV-EFvrT51SX;|qvz?HCC&ikkVwuWr?mqCZ){^}49a1uYYm-h9kpZCXGsrl! zpg=M8*V91gOl>=GGCGU)dBS&CB(dLsU1(rGA?4PVeW55+T9J4aHblE~FzInHcq!Iu zy!sp(c@BQ|@gXt3@5Ko0llNG<=eqHWYoPhIMicqIAvi9sRul|OfeLt{!^ybhD!>eE zy?p?h<%;Y-1q}@iodCLL5;>O6=uftC2ylc08_lCf-yt8Dkn~`4&wXBd)8k~6n5ZbZ zqv>OQ{;@g$ybW~a`NMYvd*0etE|{X07#Irb_B9W|ab#iNCJLN)7V?3<-I@pxbE8F6 zI?4K$llEn&o99*q(PzZ;efz&0O2L?tUiJv%2!K7XdDa*m!}Bvm4=@Wzz1K4k#J~}1 zs(qNZ?$~83CFQFOrJ&FL(vz#fG1wZ;7>{(iCfctmC-xsC40MG$G>c*D&E4qSaOyx! zF3m3Ke+nqC1I5hwF0EV`jdaA}vS;hFLG4f)aB@###l$^KNPaAweumk^@Zyuc#=t!U zTRCQpGvpe##}FaAnt`r-yB2I$OaxjPiIBV7VX}T8sZ}M_4lw&1NGbh&9^1JIfF_RwfTO8M z>2dN_0toE57|~tbR*2l8rLBzvv@?JDEH8NUc&p$j zcV63>A3oC&MlC+qd3Ou>z-A-4@k0F%8^GLDu>@6B)v9i9;LD#2MZ!jEfH<89NId;Z zIAkA4->&(AooB?K*1M8LPQk^&F$-Uz%v|-nWk(k*K4W!YN$7we6T!kFN;tM*KW7^E zw`aM5x7oVdo$B2?Z~F=C{@wXTcqZOqskkwsZ!&m0skE-x(C?(oU8J>c&(0)szg#I# zGnMyBIZu4Y7hoqY9rbJZ#SxU8i0pxt;Hv`&0DIrVC03G^n*(xuqV_GqK z9vY+JVno|=C!W3d@5&%eW4tX-DJnn$B!NLBB_rb|g~d8WjhO&8u%9>SO3Bq8@I+y` zZl{B9pG_33g;vZ?md3Wq@%1faOd*YDrx44`jFQmEH1d^Peci?w}aFr+7<*u8{F zuR-$E&dOwK@9m9%yuw185Bm43+o6Ox)>49%s}B=^a4;`F)8?>-r#flj@q}}rgoGV+-F|3i`qSM3_0nR#;&6% z=r~k6RVZi*=;JiguJJmt?t0c!>z+3Qw}K;KW(qkmAF;2s<|dv6<;H36MUl@XUxKe? zvrf=~2yuLNqyuhIZ5(2{Qs>+W#!!ETKmb+sz4R;Z+`01vKv9earvSloowt-cGAS9G zsEAbYyAequgnpvsxKVb6LD>ZTut4Ta&8m7=o5V>}UgK6n55(!}A>aH7#1g{WG0rLz zJk6y;-;Nv%(MpVaNKn6>|M41j>qqbFE!J&k#Rx`A(!o%QqCDS?5`7d4U)=VOJoMv7 zoa$Z;`w3%wR=&Sowz_8p;9Cbf;cEC6(oJgqj~_i&SF;{^Q~>7{H;4L#2#)i$Fh?d9 zls}7Tdg4y!c(VACCr9;ena6l4#l}16WH8an^OksXJ#vSmO_Zo@Zzj}m|F9`d(@=fO zT`zMmOS$a{yV>DdvDJ#4^HRTKnnS-t)lu=z&)7^>s>rDHBL(1OISM?*qFcNNHu7!E z&Kkr6$N1=d?+nJr1{-n9Hqs(>V`f)Y7&B|Z7bE;*rqA`krfon@x$`$Gox;;9H~w%^ ze`4*to`315sv-*y?Lfi;F=1<%hEVe}V*6n4>$^pRd%QXEZ$?W7^Z9K}U(8R(9=95e z^A7FAYjTDEY=gFm%a2=ot02|s690 z%f)A~rQ3s=E@N9CYj^hCNb(a5f=5(S4ZkBQd;$?+zhLIgqcvl#?O|Ku z31G{}4S_RI!rusu6e%eyw*x|l%JG=pc|=VuAU?VQEdG502xLFgW40>O9`C<*@BuBb zs&K7EOc$P~Cy>Ap?mFco2?_njn_XhtG58_jv8?f$&jn54;$jk@2XZG)_3hQrCG#IIGqep@g+&UT zj^rnVM8{hc_~GCN-&H+vDK%58l@n?j@JC9`=&cZpaPdC+4ap$v?qod+T7*(Wy`!pm z@QN!+uT&ds6D|VEa0h)+n*q%MG(JT>%ZE`w0L@w#7Zr6FgY|+YT?7}XKJJcVZ<_?k z$v{)TSaRHZV8Nh}jcvX1Lh&x8p1u&Z3E=81d+C$ys3RxM?J#=t?c2B40Su)m>uEhX z+PTu#fDQn&Byf2Y^v}!c(4-j_ng9tg8t6LPmgCjWrZK_<;Px5$-d}O2L@{Z>#%rx@ zBvJVWE`;}umWy$@0RBxJep9%Ff~UZEaEvjOmR^>3C?$>DX?3>97HxdA(F~nK;&ud2 zUpbZn;;muhnQm~X;)x5HQ-J8pev3l)QMs(oc$6jqNSSe!QhuAMMxi)4lV1Q)t<8g0 zHa)5Jf_nQC(0%ioR{?AZ#sw^@&UT)&`f$cieq~nm38o5UOj%9M7V{eJ{jwT|C|3>i<(?@|!J)aG{7q@3r(_>n zIr}4}$6lyogT}*4?jSAv5_I66S5fgBIddVrrs}&i`0&x!-9%Qbq!aM<1RTJLq%-+@ z+cN`EFDHVz4Trc!b1zq;{_~7D^K528d!^^tK1|Y5}HI)GVd0?B6VCX_nxPp zS+N;Xu9)XpD0&_HtTf}8N4Kx4PN2Y>U9-q4R2z0W4D~n&%_4+SkY9j6_bw$M2|qx;LOnFzqMjET4bay=eF~XC z?8^s(WfNdv$Ucm$bVv8w^%XSe0cx0k4WQ3uR_+e}51k65 z^V7SX(8<24)ioet)w_3a82`QzE#SJp9})l z>EJq>BTcr~xps^?3U1oAMfq%xTl+YuhG-Qm(f2N*AI%EIF$-#HDjaxIe6Wj&v z(KcHe=n;#+R>p0QfCib#4`k<^rY|I+4~U57t$Ne_1prGqlc`(7m>`G1V7bClIrTmc zkgxREbb5q0K|wJHgAetK>1k=vodO5iuTcAII~yRvN<&7|<>DUsrhK z9})z;3wB~a9@xr_8nYXZ;0@QXD)W|_ zGIiqBZABearMS`_ZPtjgA69W09rqFp=|{%_W_|Vz`kI%_VLsIR%r%XiU84f#{o|Rn zDb&!7@#)<(gPbR}|*%R7B>Ea(v9!9tffuu7DI)}`K`AF0LO0xTP7G#5{n!r9dR#om_hSy zqAXC_5_IZPfgJM*;|QvB3sxUDgLt^x2Nbbd5SJs1KBdeHaW3C|GvYBC{%?0xQe31=OkBt_q-<&E2-8GNKNVW zA~pYp+-s$Pgesz%A>*aO_U=^9d3rrIpc<|)sk^^s3fj0C1)YzQV7xzUGleGMr=JfR z)>Ev&Dk z`a*8|fvl~M){CrsJvC#U7|ZiOtJ*$G$N#HgA=Sf&jY^4EaMTKP*ZA$vq*#rpd|4*#0^d{}*#_9Tnx;_6?7T3C2dG z6-62pL~;N{L_iuudb1G`kY=RA0%>XKkQj21lpGWhDQS?F5*SKiXqfM~&>i>v-1oD- z^?mDI>*X&4hMDU+uk$>PUmXV32N~(t9s;)FR!7|U3Z-R0k`a9=Rwc!!Z0zmwWg+2n zZ!)7MhaIl!awW4`CH{gErLz~2c$;tew~Ue$0?C<)A8TqT$rPY?M{np5%`&UcOX2W2Cw_`0ST?kfW*Vh5m_A=R3^v(c zE&mU8;1}G}$^E?Gii@29>@f_=+1W&02$~^3;svQDPVfvrzW4CFsOZ+aPp0JL9)rbM(|!c$!n6lvX_OSi4iQ z7!H*DwUQ}`00vL*Wjao#=ct{crq-m>X-TBeO~0uSOm5$S z(1s;F2fFD=m$}38oh1T=`2|!C z-|0&SrtGu;?IlAGNpiG20Ei5yOiU^l;~n+w4<8%Ff=)`PH@wD|e? zWdTA8I%4Yc@My*P@>H&26TOg!(fB{gM?g0`$m9GaM(Db6Eat8r2v`@5;Y`C;vqC?@ zp7Xm6Y;F(S;i$U~uj$<~5fc$%+!!k&prj#0z1zDb-_6$Q!8HNZLz5E_l9=hosaO8h z9d43XGl(AbDgg7q)9JxJ`T^j>iOKV?mK`fW4v`3ObCd7Omp>38;xxegN4q-JmW6Pd z`JYw+syw2$s@SQ1$A`a0B2z366#D(yWBHB#1ZDMydrsf2iQ$b0o zML9F_`Sa)ZHm=xVLLpoxy%$l3P8!mc#`lIhuJjmBR6^Tw5~|zmw;<<8LNg7rWIcR7!)~K7G^BsJO72e+tTbU)e89FZL$a!SbfG_4Y(M{9dKURkE{P^G zx%G}&{UWN2C3jiOS#+9k(v9QQ*!ACiNEarGu=caL`O}A#di6B(q*Q`OY=w=PXAv%r z0erEDWHtosLq}l=k1zn~wTNB)+Uzt0{o$OG6HWM#^67y@;Tzd~EGVnsU-|@P;C0Pl zmq5OJu6(3GeS57Yy;5PiSYQ&x=qMUj=xH!%VDlIoEm@x?RonYevx^Fj8p|VAG?D+K z5$9fySPrDOiQv`cW@UYyJlHS{hmOmcUsebY8+JguUzdhY%ig~I`kV(K}djPC%_6l>yj3X*27z(qA*EF?Q&k^js3kzSI8dt)#_?_RHj2cvr=!H6d4K-mCYN z+|qf36tObb|M+9Xmh5gMA=Ul01tR_#ch@{S5KpFE5)Cn7pY^o_t$<`Is+AbaqHaM7N&wL7w3a^c%4^ zbB2hjXeHc;IABm1HI%cHO`91$@#*77JB=YWH^h4rDqP%$9vrs1_a{qIDtPs$9!rjm zb#^pN0G2v02&{+gN^}wlPqmuJRJRy~ilr*dykd2wm7ES?XIATjxfZ)Oj2}c0g{Yr&8{d!seZw!Cdttq6{W?i&K~J@5+_|7OmLsO4BP& zQ;k2%bm5XaCm$8(+Xyd3hoMS&w=wdm-pU$lbXQQ^e5{5pYjeeF%GPD;P_@7#JcIV1 zZ7u7+6u2&~=Tq#WLEj2;?F6Nou~W$)B|x+^9x7C)PxCciKBfVBsr`G(JwQj8aN}!8 zks^c3I=xVut}Qj+nv?SYdNlQOpgVWSG|wD&@#++_t-E6I#9*}JS66)p_warzWr4`e z-rFYK1y4j10`f2LS2%2T0JzH$?{eX76Kx%zq(vxTem#l7@!{M&gAVvy7rNc zT5Db|6_bk89mNs!i?4a7$x6OI-3_ud@1GraJN#uCGpE!!@?^rEC^;AW4+I_j9rD=y>PUP(9(e_V|6ec|-cCbyMM& zi<>_986}@0R+F#}zku9l9NGK6F12PEWX3%2a=Wv>n)yLBodUA!!e8*u)i>spvD5t&6wi8PE&q)o$MF zO>EX^-xJm?zNv7A1s4w6I06}^W6V>^ZH<$=^veaO!l3{&n(r^+6X4=%3X6``zNe)0 zdkvgeMR+64jTiM-j*VJkp4exbM9owB&yypoZajEB}=%SE@TOfBbrg5HT8x z9c!v=uwpk-T`c1<^xi$;?r)2NH1xlj^yKEC_0jAf;vU?epes;(u(E@?bMs*?h%&c9T>DC$aiVLBBD~8lipOfb-^^aFTM&dLL!-+krEzDS*(B_0rnc%%Pm$b?eP5x< z;Gah|BLl;ZqLtN;@6giE0#9$R;N;}=WW&b#p5v{+KcXJ+^P6O(mijevz+(~!7ah-p zd@lfL`z5-HZPgvSR$);g!hNAeAQRyX0{qCX^5;NyLlLs*3y&2l%+d0wt3B<{TW zg=+G?+V0`6q_5#=4g+! z3R0n4A>9pOX!9>ooo}Z8E@(@zf07et#HnA|&%?q}s}$?74se|!h(bBU0(!r1A{F1i z8_0Y^V*f&kbN&UNbt`^1S2~^J3PJ>)ofmlMp@zT&b`An1c5EOypbT{RaY8K4gBv@b zF=QY*b4bJ%L(oNcKLVJk;v0Md`TpPQ>ClZWh~Qa@UL+eLRvaPekp^_ZR1A|6yLr7z zM>-0(7r^ZdJRIWBWxt62r~sS5n7gGLlQ_37x7^(=uIBQk7yS#3W7R9J8?(*hn?T+I zVt;>GJHGdQKqXqZug{Jc_8%cwe*}Vcj_+`dwCUM49DlKDTo>qm3Bh4aN%|=W1bZy) zVQ12Z*;)iw-F}B>CSh~}iI#B3Z#|wJU}0?DmU4P*%HnD5(y7f}3RTsUaHB$KIHp-p z9_`-&L!}4|3|z$%GBWcvR_EgvfZy6MHZr1L*4;qFM$rIBzuSqudjIn)*Vfk7InYSo z0;pgqVb>4(8dB>aGcDiQ?y?k_`X$9Uoh@HGz!<)VD2h=RnzUbvhrltRH=zA5QBA#b zSUdOkC+>BlU`c7305jeZq?z*+#-kx9c_k7w?F-h3C_gREiQNXVqJV42HJ&^T$&vF4 zV?&fMuuS%XKxJYRPujM`_3~^Z1|$&J@c62xz?1a_)NfJB6=CtOUr(mFc~LT2PPL`DDWtU%+ER`J|MY`5W1mrwNfaKb-}Am5}*Eq54dT5K%iGy3-0yX~#|X`wRne0SF@_tWhKPv~7*o5u&Io#c#y zBO>hc@pzJe>545zB(9zV<)NDUcvdSO%x2>Bi<9kXfx1t|AYG-dY-eLSGol}{K2VTT zP^|iaol>1gAHa(eFb5bfBlfxuS3cjBOuY)HVIVN#zK@PxfM(preyWYxzBNf|k1*W` z5YUKyq$5ln*qY*E_|_L2VuT?#=>8(#BQ`+m*OD5y5Dx;@kM`>wkssQLraALK${Ann`%vhnMAP}q1_rL7hv=gsqDR)lW8G9huQpzF=lnik2g?x#{V#+pItXC9i1-X zaIOpGaerkot1WAkB)pn8GBU!XmZm4yX;2CcijgTqcRr5Fhi1FR5WTs%>6^2oT%e<* zbPhIE8yMw)E`AuhquZG*b2@@SFKukW?(9u3RUeSfBuHpnfS>gZjN<7qc+IY!@y_=K zvleg)x=x1}K*9Kgy!~p*KQxTYHFvY_4R-{pFA5?M<^fv8v2sApM478EGBe_GbCoFM z#_SQGf-XIy2k`0GG<_VRe4F-=eefW40Rch>G2Obr-u)1Uj$;5Mh9YciCU4=gfvLa@ zHB9EIw7(olRYoZ#KI)6T)LywElY_@buWbk>pVG<{K1`d*2LH=y_)F+03^y8tj*=Am zZ!(`xYS)=NeWnxgtg4a_nM}%zoiu^@4e4IvQ^0iiORjcKn{{BV8%M(gE&0x!`}R7l zNMXEOu1)ex`cb1(baXBsYun$S(dClDs1b4%zk|eX4!7^xKqN(3aXZ5VWlI8mMDekZ

forbidden

forbidden

forbidden

public interface

engine route

host port declarations

kvspace host implementation

external kvspace interface

contracts and generated specification

vmkv

read-only BinRWIR contract

vmbin

vmjit

x86_64 backend

AArch64 backend

\ No newline at end of file +

forbidden ownership dependency

forbidden ownership dependency

forbidden execution dependency

forbidden execution dependency

forbidden peer dependency

forbidden peer dependency

forbidden execution dependency

forbidden execution dependency

specification
behavior and stable operation mapping

public interface

engine route

compilation repository

host services

external kvspace interface

vmkv

top-level binrwir contracts

top-level BinRWIR Compiler

vmbin

vmjit

x86_64 and AArch64 backends

\ No newline at end of file diff --git a/runtimec/documentation/architecture/runtimec-execution.mmd b/runtimec/documentation/architecture/runtimec-execution.mmd index 2824afde..f1fb4e74 100644 --- a/runtimec/documentation/architecture/runtimec-execution.mmd +++ b/runtimec/documentation/architecture/runtimec-execution.mmd @@ -2,30 +2,56 @@ sequenceDiagram participant Client as C client participant Interface as Public interface participant Route as engine route - participant Host as Host port - participant Kvspace as kvspace facts + participant Host as Host services + participant Repository as Compilation repository participant Vmkv as vmkv - participant Program as immutable BinRWIR Program - participant Vmjit as vmjit - participant Vmbin as vmbin + participant Compiler as BinRWIR Compiler + participant VmjitCompiler as vmjit compiler + participant VmjitExecute as vmjit_execute + participant VmbinExecute as vmbin_execute Client->>Interface: structured execute request Interface->>Route: validated request - Route->>Host: load function generation and state - Host->>Kvspace: read RWIR values frame program counter status error - Kvspace-->>Route: host-neutral snapshot - Route->>Vmkv: compile RWIR snapshot - Vmkv->>Program: build and finalize - Program-->>Route: immutable Program or explicit failure - Route->>Vmjit: try Program - alt vmjit executed - Vmjit-->>Route: structured outcome - else vmjit fallback - Vmjit-->>Route: fallback at observable boundary - Route->>Vmbin: execute same Program and state - Vmbin-->>Route: structured outcome + Route->>Host: load authoritative snapshot and execution state + Host-->>Route: host-neutral snapshot + Route->>Repository: find compilation by identity + alt compilation found + Repository-->>Route: compilation lease + else compilation not found + Repository-->>Route: not found + Route->>Vmkv: validate RWIR and encode canonical BinRWIR + Vmkv-->>Route: immutable canonical Program or compile error + Route->>Compiler: compile canonical Program + Compiler->>Compiler: build execution plan + Compiler->>VmjitCompiler: determine machine-code eligibility + alt COMPILED + VmjitCompiler-->>Compiler: machine code + Compiler-->>Route: VMJIT compilation + else NOT_COMPILABLE + VmjitCompiler-->>Compiler: successful not-compilable decision + Compiler-->>Route: VMBIN compilation + else ERROR + VmjitCompiler-->>Compiler: explicit error + Compiler-->>Route: explicit error and no compilation + break compilation stops immediately + Route-->>Interface: structured error + Interface-->>Client: status and error + end + end + opt completed compilation + Route->>Repository: insert complete compilation + Repository-->>Route: compilation lease + end end - Route->>Host: commit effects then checkpoint - Host->>Kvspace: values then program counter then status or error + Route->>Route: read immutable execution target + alt VMJIT target + Route->>VmjitExecute: execute generated code + VmjitExecute-->>Route: structured execution exit + else VMBIN target + Route->>VmbinExecute: execute Program with execution plan + VmbinExecute-->>Route: structured execution exit + end + Route->>Host: commit complete effects then checkpoint + Route->>Repository: release compilation lease Route-->>Interface: structured result Interface-->>Client: status and result diff --git a/runtimec/documentation/architecture/runtimec-execution.png b/runtimec/documentation/architecture/runtimec-execution.png index 2665a0ea4b7b3dba1e4c6940662ea39cd5df7c24..59596c292739213f1b2eba574a4edef44b02776b 100644 GIT binary patch literal 372167 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

AOe}0F48kYrSE_H8CR7V@aqG3 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 diff --git a/runtimec/documentation/architecture/runtimec-execution.svg b/runtimec/documentation/architecture/runtimec-execution.svg index 60664d0d..a0e9101c 100644 --- a/runtimec/documentation/architecture/runtimec-execution.svg +++ b/runtimec/documentation/architecture/runtimec-execution.svg @@ -1 +1 @@ -vmbinvmjitimmutable BinRWIR Programvmkvkvspace factsHost portengine routePublic interfaceC clientvmbinvmjitimmutable BinRWIR Programvmkvkvspace factsHost portengine routePublic interfaceC clientalt[vmjit executed][vmjit fallback]structured execute requestvalidated requestload function generation and stateread RWIR values frame program counter status errorhost-neutral snapshotcompile RWIR snapshotbuild and finalizeimmutable Program or explicit failuretry Programstructured outcomefallback at observable boundaryexecute same Program and statestructured outcomecommit effects then checkpointvalues then program counter then status or errorstructured resultstatus and result \ No newline at end of file +vmbin_executevmjit_executevmjit compilerBinRWIR CompilervmkvCompilation repositoryHost servicesengine routePublic interfaceC clientvmbin_executevmjit_executevmjit compilerBinRWIR CompilervmkvCompilation repositoryHost servicesengine routePublic interfaceC clientbreak[compilation stopsimmediately]alt[COMPILED][NOT_COMPILABLE][ERROR]opt[completed compilation]alt[compilation found][compilation not found]alt[VMJIT target][VMBIN target]structured execute requestvalidated requestload authoritative snapshot and execution statehost-neutral snapshotfind compilation by identitycompilation leasenot foundvalidate RWIR and encode canonical BinRWIRimmutable canonical Program or compile errorcompile canonical Programbuild execution plandetermine machine-code eligibilitymachine codeVMJIT compilationsuccessful not-compilable decisionVMBIN compilationexplicit errorexplicit error and no compilationstructured errorstatus and errorinsert complete compilationcompilation leaseread immutable execution targetexecute generated codestructured execution exitexecute Program with execution planstructured execution exitcommit complete effects then checkpointrelease compilation leasestructured resultstatus and result \ No newline at end of file diff --git a/runtimec/documentation/architecture/runtimec-trunk.mmd b/runtimec/documentation/architecture/runtimec-trunk.mmd index 9f3e7b04..ec1271cf 100644 --- a/runtimec/documentation/architecture/runtimec-trunk.mmd +++ b/runtimec/documentation/architecture/runtimec-trunk.mmd @@ -1,26 +1,37 @@ flowchart TB - CLIENT["C client"] - INTERFACE["Public interface
structured request and result"] - ROUTE["engine route
only execution policy owner"] - VMKV["vmkv
read and compile RWIR"] - PROGRAM["immutable BinRWIR Program"] - VMJIT["vmjit try"] - VMBIN["vmbin fallback
only correctness executor"] - COMMIT["route commit
effects and checkpoint"] - KVSPACE["kvspace
authoritative facts"] + SPECIFICATION["myrwircaps and RWIR specification
stable operation identifiers"] + VMKV["vmkv
validate and emit equivalent canonical BinRWIR"] + PROGRAM["top-level binrwir
immutable canonical Program"] + COMPILER["top-level BinRWIR Compiler
build execution plan"] + DECISION{"compile-time target decision"} + VMJIT_COMPILATION["COMPILED
VMJIT compilation with machine code"] + VMBIN_COMPILATION["NOT_COMPILABLE
VMBIN compilation without machine code"] + ERROR["ERROR
stop immediately"] + REPOSITORY["compilation repository
cache complete compilation"] + ROUTE{"engine route
read decided target before execution"} + VMJIT_EXECUTE["vmjit_execute
execute generated machine code"] + VMBIN_EXECUTE["vmbin_execute
execute canonical semantics with plan"] + COMMIT["route commit
complete effects and checkpoint"] + KVSPACE["kvspace
authoritative recoverable facts"] - CLIENT --> INTERFACE --> ROUTE - ROUTE --> VMKV --> PROGRAM - PROGRAM --> VMJIT - VMJIT -->|"executed"| COMMIT - VMJIT -->|"fallback"| VMBIN - PROGRAM --> VMBIN - VMBIN --> COMMIT + SPECIFICATION --> VMKV --> PROGRAM --> COMPILER --> DECISION + DECISION -->|"COMPILED"| VMJIT_COMPILATION + DECISION -->|"NOT_COMPILABLE"| VMBIN_COMPILATION + DECISION -->|"ERROR"| ERROR + VMJIT_COMPILATION --> REPOSITORY + VMBIN_COMPILATION --> REPOSITORY + REPOSITORY --> ROUTE + ROUTE -->|"VMJIT target"| VMJIT_EXECUTE + ROUTE -->|"VMBIN target"| VMBIN_EXECUTE + VMJIT_EXECUTE --> COMMIT + VMBIN_EXECUTE --> COMMIT COMMIT --> KVSPACE classDef fact fill:#fff3cd,stroke:#9a6700,color:#3d2e00 - classDef policy fill:#dbeafe,stroke:#2563eb,color:#172554 - classDef derived fill:#ecfdf5,stroke:#059669,color:#052e16 - class KVSPACE fact - class ROUTE,COMMIT policy - class VMKV,PROGRAM,VMJIT,VMBIN derived + classDef compile fill:#e0f2fe,stroke:#0284c7,color:#0c4a6e + classDef execute fill:#ecfdf5,stroke:#059669,color:#052e16 + classDef error fill:#fee2e2,stroke:#dc2626,color:#450a0a + class SPECIFICATION,KVSPACE fact + class VMKV,PROGRAM,COMPILER,DECISION,VMJIT_COMPILATION,VMBIN_COMPILATION,REPOSITORY compile + class ROUTE,VMJIT_EXECUTE,VMBIN_EXECUTE,COMMIT execute + class ERROR error diff --git a/runtimec/documentation/architecture/runtimec-trunk.png b/runtimec/documentation/architecture/runtimec-trunk.png index fb5d1e39cac9f57b67d92877e8f495993da3581f..28f9b5a00e616ba45b854c7aa0a3b8d3b3877008 100644 GIT binary patch literal 125585 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 I=GFWE03d?A7ytkO literal 51909 zcmb@tWmFt(mjz02_uv}b-7RQv4{nXSyIbQ9K>`GKC%8-SU_pbsy9U4YeloJ|H*;s! zoj=vRR#%sFpL)(dTOySeKcOHJAVNSupvXu|r~2OdGdGu2X(OiI!(`I+!GzGKo15ewuC6J+fBzow_46}pYHDJ) zv9ZD7O1AFn>$~ag?e)gR#r0EGPFP!CH(W1Mqan5%gNIDZ8lYB5mUQ>+R)rSd02q zZzaifKxUTKIQr>rr<@c6)y>Sg6SJ{$Do7(QVayDn^#C~;Te_jtypsr9#|&p2e?Lm; zt+B2SVTd0$$c+WlV>&o8F{M_fcE>-tXi)MCzu5dRTm0#8)l>Aqhxocu* zxbE+o^k3o#Vqt41tQ>_gk8?+uns(aSX_dq5NU0Px5UEN7LBB9s!NLqUia0npck274 zXDY83ZfjEnwt19qmC*?X;#{c@@*e94^C=_w>X;yC=dtn{yZ6%n_TS~DU}lV9)INi6H$^N!T5jc~|nmj5uMo2#qM zaFs;!)^2z=qU;u{|M{QQ@$Yr=|9UqVp;Hwm9_|l@Lpy^sS*xw(V6&L;?8}#&i5+XU z*9U)L*zav~lM7^X`11+VJXE6sEb_XD^eO%oRq5NG;N)bE6ee8^Sd_Ii#e;~#(f`>R=sJlr7-&So&wIy$!~^S*)Lyv3eirYGT+TM zb@{)rr?42}?_3qWjRc2;7;XI^zqs1vz}`liDpNzdxa~yB%OjT&9t0y<7+r4Rr(|GB z#brUZI`3i(72Y|^$B_s@c$}|=YJX4N_D|lt*j(SZU%!vAb6sOIF^_nt)_>{?hOxS%AW_q57d zg1PB8V5X+fJZ`?oQL>{Qu?(IXgIidhW`aRC(^k0@T9jr7!{|m9Ay?^HSao`ahzNMN zLC(J}tKNK^TJHk573yObQBl&Ki3t)_SuL&7h(WdXjNB{m`iu!7RbhjJ zA+es3J1wuCAFw>1=1El%VOkHaXPM*prbDRt@K#(Aq1g}7ke1~wmu?uyX}v|w?oOO8 z)&mUiyw>3Q!`yJqe3f%!+H$FtNSF;we|HBo!~5b_dN$eq9thcdewgXojf=Nmee91V z)HHf|G}}^W+#ZVWNg!YS;p+{cLHGWAkBblh3{V zkWb97qOs^}gEm(UL9!-0T_h^G)PY<*kTj}k-JxA;i4tk=VqJ*Q{TWkFA!*X+7N6gv zYioOZdy!66)6jw4w;>B>C3+oZhoO46?@;}PT%7I;Gec+&JIvSfP`D08+3oS)CXwXi z#y+yJuyD0V^i{@XcfC4TtyW##fbu!rDfiDg)*; zLVMo+LPD*6S6WLZMSck-EK>+dnv>dE*3QPpMuRF1n@g+m>i|qx9z_@k;M!l6`lS~W zc?pBKCBz|1{;^7i5)%>0&+CNq@T-1d+ER5KZm-PqSmPc3(pJfyu_i?gha_~c%N|(- zmPMNV8o{WpL;qQZ6pA)Ek0y-}CCmUW(Yupzc98s87?B^I$qjF=6)0HZIZ;-&r1BL{ z6SK9owb8&p2*Ow?@eo#lZH38rGk-=GlMLefxyvSWDqj-NG0|U56eE6sbe%Sb8@PO1cahLLzUJxKs3!GTwU#s zd1xtvJK^Mwm4#-Ev)Q31`ebIO-4vHQyj-&BRvpEXR`m@G4EQ}fJlYPuZLcNrbNg$N z#C!?(E1=%_q`O0Tu?Bp5>1w$fxmxuac@|f!&*j@?EEz}WWm8|4x@V_FE1@U zjLo=4SwA*&;D^T%0?v+Xb=gOa72=}KJLS)|XFP?9`Q6*g5%vp}bSU3HYmTO)vy%|Q zB(-+HoQ$2FU4twZmMz9$D4mYc7Pi`;(;IG}gMP5ws{s}7I~Y6;pC4kXWQB-~oP`vl z-M^|IvvIoId?e^~CHUhv1rNH>PXZaZ$t~1Ti$J)26IJn*-ap8up(@-c|6efD5^r^5 z!>BVlI(m&Y#=b-`+qEG!d|Clcde$^?b#--@))cH$r2z{KO?!HJ`kwxaY+L|3K8imY za|6V3ZaLSRAq*xQ$P-Qczm^oV=uwZc{rry3Q|) z*tGpk@t8E2P48Ld`9EkLozywj*VfkJx}hGE{B5DBU&Q8gadZ2kl8cP{nQTEDvcHhR z89ad+eS)Wq)T0V63idWaCFYmd;?7`T1};Kh2m3{e(bU-r7A_+O3f8=;R>&^=)XJvZ zf^1P5zzX!uIYkE5N#Hi z!}`MmLSp{HW_dpM8dD8cW_Utvq%YMZ>9f5eNz(7ueP^H{A=e@wfSySn@G1r%I^C?L zkIrkxt4(%Qw5zLxG%b@eCGi_SB1Q6S7PII#gk&(=LNhaCeSDeD_6|*I6#(=;J70?xm2JU2CT}dyOw8-rHee#h$nY+GvBjb8|Jf3}K=78ys}4MTluq$vpI<=qLq z+GP;m9;`AtTbWaCv}XGAu&;nlLV_y)3jqlU3LJbYr_XoOP699;ma748UVc}<0oePo*`6s^Jp3{Lv~rI6n|An8;drKIY$G!-ue5KIQjYsn zm!D9&pjQj8g|A-w9z``+7HWGCCG2y>9#V7qQoCym0N@c8(*J_1we!%84~N&d%vl&? zuAQ0ORiQyp-C^8zM?F6x#W#U-)lJAO93MX5+WxL5;CHj8?SdlS9!~V@o5}OyXQ{JU zpvDt$PiP_4Z{q|@Mi&!i3d5eQcSCWQKL@6Ez4Mk~8W0W&B2DrYQVj=ZOAYUaiGEI6 z5bp50j)D*NyI;ktT(Ofdil%pW&Jgk;g57!z#$n>`sRdz$lD#||P#@!ciYEzd_i*T| z)E)!v43B(hxqCYI`O&19?cI~k#_>b2@gA2^E86ZE(b(&Fo~zbkQiE2b5<3Qu4MFk` z&gyM%4s@^k`C82SZGB7ESFYnolPM@Rn|WJf|Iri}<8Co<)JFh>U4l3WB?Tau_4&im zLgU4wr^RjmfzI&+|G+ufb#-}=b8=E@FHo2*!pTyQ2)01U7GWadxQePsQa-o<7(K{p z1}AcIzWg)kT89@3Fg9Uqsn8~IL(Wv`F7yoT`&KqNygVw9w@x+6=X6yj#m@he3y{!5 zinLj%j?G7rR}NIBj;@D-LBz%xM-To=0*88n^R9=~Kb?903(Glm<@v*PiAqaj>`=h{ z849C*8#oDsw~)>2ggt2i5+o7Lj~}_-SCWL7h7fud_Vq-o&^(9!G^A&&pUG`V^W{XfTkk5Bs%_?E>y6sPtdxwfiO#`&Hma0xN91reUOp#xr>WlH!~$w*vARHLKYR z!&(;dRkcMWB(~U~q9&5lS5~Zl@GDm9O#n05t(I81ZnG1k3JrAY9w9elID;m0RQNlP z*)1DOQS-g_WiDF;e-ZGTX)V(2oOi#WW09wg<$bP*>$8(*a(BPWFGS2%2f@Kbr_A>i zz5Ghhl~*RrDo$697nP^o_`^4xO~O@<#w)OoMFQXY1U$SUFHZs7XIR)by`DL$E<&mR zpbce!8Zr9?}DWO3=kUG<~O#h$Mb$3ZpQa>2ZD?)*4%=*2l~*cDGff z(``zk9dWDDtU)Nmh2;@4pY1a0{a|Ec1DBY11bzO=Irk%OqJW3NcH7gv$*23WRArAie^=dq-W2wZLeiclu2}KRflZY0R->_2? zp$*DZxeiuZY1|F%dQMvo_+!0!1k5CH=Hf_~a6a>D70OyT%zXl%a zT+d6@56V*S*pGe{w7`1N2fVf#LccoiPb3#Fm{ix+&O}~r?;D9+=uHR6eThyDM>)P6 z@t>_S0fBwa`yojz_F0UO-l^SctAEH@(!cz^5wH9KwB zTy(#^geJbZh%It+YXg(80v;%b?(yspBrb%gj%np3v=>!qFq$pw*R}!x2uy~iPI>CF z>p${mGLmDvr&>*CX?7m$8Bhf6$A{bDJkDue$3f9NwG*pDaHIcu!toacgDByVGXGbb z5oKj->e1Az)(!{xEr1vyyU9EW^><(_av2039!<&m9}y9S7I`3HFgW`iK5OpxVLkd= z7xqKAzn^CrTF~ziZ!rE1mEXgj^2+1wLOg)i?TD91z+HN0p?Do#Eg$;pddGvw(rQa< z>;3t9_72hB&6BCDjiBjp^Hi~d9UfnOGp~m6exXhNE{zfiLHu`*bHzFUv2#uzf1s_p znk}OMXpgq3b`M=%&#CQXAJKhMw*0i=HzB*F`z`+T+5Siz`JS&_NRkuh2AyFMh3_ao zj&d$_K7C9y^qI)IRIWGGKA6hOls>}68XZ?C3!vrk*z6lf@>O*HZp9kte%kgijoEMG z`9bYNfkla;kciJjA+gAvn@aE-otjj{4lERGOfW9Xx4xq}Br@Hm6Xg;`@k{*C7_rD# zIv3g^ME|>!x?#A9LK2)Ngj`o?fa(F`FfB#yrhAP#?+nvj*{W@I{&9967#~-_d2&%c z<3fwKGiL1qx)ScO^@4rEjte!oWuejU$r~O4A#8W-jV4J5b8{1Paa^+;+qc&45zf2c zU=(5vLLr4#h2U(Z6(oNp9Z5)ctMW4lBPluiiws`VBDK*}F6oa_!j%4KJyTh!KdT-l zd0KTzIWM-V&MrgXD@Uxu3=hFGx9O13D^E2aLFU=GV(8Z$JLN}n>QfLX6M~SC@L;|w zC!IE&yU~GexWQ!~Wa9p-A+$akQ^sj|265C_)^D0ZO8(h2bCdj|y{DEIJgXI2`xbQ= zBd!^J5qCLx3AY*4+;MU$919)aPo($s^pLtckJJ*r`!VN>VK&c1MY3P8Qd_myG^g$3 z`LuO(qWp%r?r%GBk6oOuD>>*wz%SrDOQ#&+Q%UAa4hzA}l~%RE111TQm6NU={pJQNAim8g>= zP1Iz!XG)ZQEStS2O?k>(TKR4f|9+_OoX=$s4~WxByM`hziB2HDvcMvx3*6Ie3v(7SH}=xV<9%@U46wJg7}Zu}7P_UG%oY$O z5@AlUY5x>2N;|Q=*vSP03^2^jPBiX{i2l=c{!ex^4fgtKf_PH#-(Y2e+Ae8jN$~OM z2I~x(Y*P>9YCa#EaCR9Flz#~4jm&tQrz2P^nPfFmMcaRGk&fNxHGm)XkY8JiFBSa1 z*nAJXj-^4v;l9>BNYiJ-BKQh9!ShW}Yw@RrHh`=CfN@NO|8_J->q6I^B`(rL4&UuT zL(u+2tmDzFNUig(JFQ*|?epz|=%4G!7st0(yTl8Jiw(BF2+nN_Ix9#jfx;cwl<$=) z1*snjM*gA&Z;wh%p;K5v^ObeApb$80fQPFr=vYs&1g&=^e}KUf?XFsDapKeK@RXuN zt<Mk}&hZ+01vC+0Oq zSJoE-=OK}b4bXT~&F7AngsxCGnU@$8)IrVn0gi{i_-cW^L(K1sRHfq<DG$Dvz2>xEvHf$m{7$Szx2f{cRKz=imw#{Y`W4yjh_f$zRS-FD zmEE3ahp=QPI>n*GbcDSQR>DXaP4|QaBGMSZl7nWWm)Sx-sMz;Xb$Z?YYIvLngnwS{ zg{ErO9WfrLFxuOB25$=ngi}s;cE|Q}b~v7hG^;)PPnQ=!i?x?h71A=$0BlACj)2oT zg*oP;$Tu2C^c(HHzv zv4ncEHE3!I-PZaBqaP}kRD@7Ats3GVC@gHJ?_p344e1Fr-(MlOvRtt{v|7MQD=5Xfw#>}|yCH0r&v znTng70BG}rKPpL0fQMRUsDdRnAxz4VlNjzPU}9l(83{R!1kEq+Dhv+ z!9rq14kquq=h0?q3j(mNcH=2UJNv5n-2AzuU^SKIVN*&-82*}Ep(wue_$Mpe>zX?9 ztTdgH>YS%_4qMx>%{6t{L~&Im#lUmxN1m~d>Q&avK?Zh9!FIA)9A9X4knuo1q#+53 z?q7uO77_MpvF|1u#hT2&UB2e+5UD1}V@mt4K}$McNqli{@~y5WwJrK9mkou4)Dtfs zpUIm`w$_l0_1gJJGA=v|Xm_-g)$h>~B!e;@Sh&OIu-b-o2MVCNN@Ot*B(`5|dmP~_ z*Qla;9JKOWBMrzR3mY$b^+Ci`T^8bV{Hs{J2FBsN@pl0hd=OV1Z{|NPT#o81F}dy@ zriBD}doH!L99CW5)qm0zW*5Q5`Tv}2dN$9Uv9%iOGH6avGKa> zg$`@5`#%#UV%+}3pHxTj=5aq^OnlBs=d>bW)M*ecG&SxLe5OE;MCb6}E5hP;G-@7} zQ$)CryxLt2bt`U=oGYKh(N?GRq2Ilw-r9p!LP!aV?0^YoZ`v77#KN2D!O{Kj(}NYvF@QD=>}snYDvV5NdDGHN|MWhMYddR`+g8ooX9S-nDSlF zyvz9m-F6s$*zSWKi8Hky2qcFd73Xobg5`d;0s-{lU|`(t|BIFZB!b0a0|u$OELKoN z?OIqOXTXyku9og{E;ycGAml1)Mp6n_0-X2z{1Lkzy6dI3;CDA*GYZ&gN?Zc}Qv2d&8Y9cQ6g8rJ)z=JS6v1WNc9ziBq@|92{@_w z<>cgq{zm0txjQLDWfXL9Yt&5Pzi`^~nA6sh8GY;2$(?d?fDrOR&snzX2>sJE}TwIiY?Eq2hKPZtHb zu&Lx)OPdk}KUA)4aNLP5f(|53C9&^Nj4*?PO;b3tSI)_@);4$IvE~{b%YD@0dVfeO zF226Ldh6=y#>U1f@HV*#=jtlv$MqzAtDg7VX4+{;dVm%Y5vgA^wbELQ40MwY{~WP2 z58@?^xjlxOfRkF_L;2e;iOJn695DefzZI%wKYD%wf<5*ue6L6#q8yTuO*R>eVOJq7 z#pgwz9!l6b4yJiJ@eRf-31a>I27t*}$oPdqL-~7kcXzkQ#lxc{vwDbIi4u_?x%~q+ zCwZYiK~&fPFf#=5$?&MyA`T{bMDS3+FF|NJ55l`o|C9h#`1$&p zLz&Dwx~BiH=F|V#&KAleS+w+@%Uw07lRqntPIz~|ZWYO;l|z_t*A7f%S*lcql*tcv z#o*^bP^(=50uAoO#DtfyMWf0r18`y7P$n9{em`kxR~Lz%dt5)%{aAgwqfKsWq@ z@*oh0VnVH(=+Ah1dq)MGTlu=HMe8PQnE|!?r=kCU?=KzmY8x3$vad zG5Z*R7K4A}#%NFdFuY^j)MXo znyBR>>)TN&Qra>YrMvzZRJDi)CxgLYp*g;PJinvHYEwVw<~~aWvFoYR?efb3`$^C( zEP@h=p{(C&mDj2(qy5Yi50_q{b{PQF%rd#?{PhU1D*5;ZS+bMz=&i=$x2FEP2CjcQ zV)d4q2$!1``3Fc;(Ac0H@}`MDxBH|VM~BLCDqk)OQZ|8uoNg0@aVsXp7+Z@~E#>Ya~=@&p2>Kynara!3ci8o8vw-~+#v)+cm8cZUW((Oi*7KtT!5@gNReZuScT zZS~;@WItR-;1UU+AT-;H1onZidu#KA@@!i%2Tu#S-!KrdeyvO<*Zfa--4oZHef{vB5jr?V zLlQ1`LG9Wuzd@vFRJ_H37EJKiJG!q~_x!RH>`Sp9_9I)S5gAA1s|RU{?|QqFyP}f2K$I zG$n9(9l)?Rv!%m9VOuwY5G#e0#;hM=Jx7nXFg@ummyhIkJ^!Nhv^Ts-CSmuns6O=K zB0_7ZzUd)7ZF*D|Miz-G6gHgN8wC-(LTi1=Cunb})#CJf|4PBPbcY)eObfObYW;Pi zER9@03|ngDc(!6zs#PXm={K6j0$vwKY2NZ(Pf7S{Gagerph(lF{84=qEk9F1O&$?@ zIJwd!u}IkW2UeTA70ScaZkVA^Tp%oi%eanx0)f~?@5S>2!*puw*mCnZxyM-+g8zIk zd4-cOC#SriZ@p2b2(^2Yw!|T6$>C*D4HpN%oztA0)Eh}QV{F;1wux5SnI`h82guENz zNKd|Mx0~ZOH9PdwnUsKf0waxu`8vF?AV`Iwd+WLtBPZ8-+|8t=X$w=`PcwrX8{f<4 zG$D6%*7X1WF3f6o#QtYJ)ew-1Jp3*;>i!72+1T}3KD(coA1~IyxcmK%@rB<^&?#b#C zjnwdW@wxK%xsG|hBm9aXVO*OB(*dCA{MbP^>$@e|Z>CJ$#y#sC_hY0kP) zNaI;h?v;+e%-gFZZk3=Y`{^qN{KtE@{$e4=Kk-0?h~(#~U=>qAT3S3jYUYzD z3rA-V4{E1atJ|@|AekPXJIm>k)5nfMnN>q%ELKUG{XQI)LqCtIoz z^qR~x225NX;p41q0G<2p=1%7)&mu5wUu=K-FHsj8-;F)ri+8MyKui1B4+)7<(A?;$ za)G(z<(aE_$Qn!zuM@_>tv9cmHyW!I6w>mKshTX>A?@jWn2$#Z5jnzsFcV%`J-$Prz1y>asMt1r8~klZ`p$p<6(Z7>TJOyc-X$){FL!> z+5VC4V5zZPLRHK;9?&z9`#;@8eKDP$xz56SJ|B$r*&3p8JJP`L8WR`m%k}!c#%eAf zV2R~7(SA=Nnqy!x;B(e!-74B_U$Ajmuy3rJSpyq!m9s4%@s(z@N|DikecF?G9Zt!J z(BS&ZSo4q0;^(dP_%o!tyQV=u+O)?-C#cOnu#Mwo-}}Vi$oi(HO}%Z~IBjf1D z5rA1~@j?^!g~vGq$xD0kOe>%up~N??jU1X->xqkX*W!8gn~04dGH5VD?N1nTSGNb+ zn^!H_OC1xW74EDQPjeA)S0ZfFFhcW@lsK%%Tlunl+Bd3DZR~I&Mj@A=OBs2@zYg2J zS2!T}l@z^S6C$_yETw{#!kF0Nf2&yOm+idEIzcEH7gTVX>;V?wLV z-8cEB&zMM+rqjp(TEFAQ)(FMp-PntLn)?3f3Hn~idcuyUnf+o?#3I+bF{+N;57vY* z<6zclm?ozrYa^^wjF7(rK?JGxt5{md)KwKY9A*Krn!Q}#Eh%Z;wCB- zOq7elR-eLA|H%b-FKXyDxguo=?Nd~W#6qf4C9a#$Q0==bD@WiBMF;x?y!jF6UrB9f zv{o+e;o0HiG8G5voVYuXy9UuY@al`}m`W)i-uM}G-o!V?LHY+RDx`8T?0d)|GM->7 zmnsXB8xTZP3r9`$n8j?gr7~N~H)pC2!!YR=^Ja;7NFpbyeV3xzMk2mUOvzft<}JAC zOlG~1?0;r7=sUA8a_pT+*F~VmxyWy&yojh; z8@I^)KLzLFHR-C#QwgPs#t^fVr6;LvM5h@rK(~ajv3c)$`uP62>0U{z`^+No&3kR7 zadFrAJ;fApk{crdPB^s3^`4(=i6P;_!XP&n%oKB0H)JClWHw&TSgV3QXjWk^pofRn zfC`ylQL^Pspy?cUSw_0C*2m^DKh_Zu$_KEzEMfx=m99%76|erBo>@A%f%a8Go-;OT z?ZPIeUBh<&mv6O|vvZPVSzD@wmZB=Z9D6u1>D;UaK0V!y_q-#`+8&$;F&R>f&qtJggD{DSb(6r5?uhS3Ew-Ixl>J`PA zc=l<7F|R8EJ7LcovtTK{X562KENx)geeT9sTt+<>NI%Xc8qp87LDODGH2#+>N|l+y zexV0#y1`q;XM9JQ4%eT>xA}mlE`F%GWq}n-(jAqQ1m$Rf_0B~N7fh48E?eptfS75(vt>; zx5g7Tj0Dd)V}+NKDYX5V|!iu z3Nr5Naw-OL5l3catIi?KY}tp5C6Ic`*aQXZzJ7KCU>>p^x|Bg{xLWWZu&7Ov$C*~ZgRWx&(xbi9sFjX*H>M3 zS73#|!+rKz97|`2tt2#qW201atkFdINR36|p`4lu3{*+3Bm~(Zsvi_`*!p-0BFRk< zMOzmqvfB|)mn2`hGNl%CeXSd926Ei#=vq7VRcZr>Vvd{(Qsh#~)31Eh+DwBx;+C69 zKOW;{Xhrr;zz=-=;R*|H+?Fwsr zt#c_0KY#zmILj@%8{!r+vt?4JJ+!~tcg`C6(M!(2dI_k1eb6v4(NRjuJ}FYK@Cb3) zH3GD}vW1+(da5HC6r=S?MVy5vu?X7c^;0Ro(qUl>V+snolon$ZWbGX=y&s&5HiFKv zrYyOX`P-B_J)Lkt1232FG|JW4q)~ImoF*tyfWj)6^F>BXT=vFaPS~*~B)h*G{j#V6 z(ka$kea}EG6z<+?$pcJkgm{b<80W%n#~M&dlW(CgMea7nFB>xBr}~JirlVFQBsf9A z%#`!*`@`WSx7Ry;(9A|t0(TNpi1vT(|5Y%64Min!<_S~db*`criKoM4Xm9XT<)Mu< zT5uz!#s^7iyxBxkVnS$(ZyJD!zxssV8rF^ z)r9t{JhJ#o!P?#-%2RFmYp^MmtQ1P9Ci3d#6Rj=5*HY80h(G(%vT-gzGaXR0AmFN| z%I`7-(`t7L335=NK>U3~aQLTU+rETq;{B--qKMiDl?x=%Q>>UWkzw0z2vU-h9X`w*_ zK3#@f`zlPTd9IT|*7X4riLb z;}HoLe4O_kii5g1UdxfdeV^>i?rh-nI%fXCpxd9K((CC?L3r7nqoWy3ixl65~VIJM;)xp=v&&O|H~=l zzxg1dVf}sD$n9T7Uu08nKlOY!KVy8WF3u$ECXI@s%*q);_GJ!v{=AtG)Z?$IM}+h3 z$ZGrlDV?z`ly+DxG}{9d4d7VjS|GLRk%Idxp5Z+|yz87@R8;isuZY12f&eeCmJ$!1 zgR7}%IQn@SDd*k7`2kU7ink9~FH@2n3hCw>c8_l`GrOLtQi`q?3{*0!H~wQNx>bc{ zXv+@rztTXmEdFyg1ED$EU6R?7|}fV2`wa=sB{^}R=wBzwhprY#LJgHLtmEpz0lUt~Pt z-GG{oT#EjCKx4qc@<7SCJH+vosj2G4>D!SG@0?J1h>E7@Xol#&XEY#8t5rJqE5#B$bNcFpVYbWBTIg8YCanGz z_(-W8xy^ez`+H8qIHh@NN*U2QbYoo%Tm*AgV5BlM2{?GHAnXufSD^qo<4B@?QKwQZ ztVf$Sk{>umCXYikM-ic-bbb5S*qGe@*%?Wsk`i%~*9Vm;&>z#!Q=!8xxQzZ&#&9YS z5zZ!1$z+uFG5*Iu>hU)6U&S>zD{e0?rU1U(`t;;vR?BKY*ZmJ1$R-;CZ=C8FO9tUQ zNCsOxP2*oEA>1ok&STs5nQSJoNCNNr`uj&76XsN)l4)m(6`mwI@I|L!Taq}WYNO4m z5p_?uw>b#$zJ~=s_pxFEQuP1rhNIL}5&H}MXMTp{5qcUki%x@p%U?xup99$l7mY0x z8))Zy)u~Mk2V*waD%t6307Yo?Hc%Qi{3Q9rrIPQN4Y5X{-7L2jy|Cmo*adLLX{E3`l*1D0MjO?S8 zgF}sSnYy#yUJGQh_0-3M9p~2nE}wDmv@r>L&IP&!atcLYAn7!0iimzs6x;Oe=^_K0 zjAA(tw@9OAfq%?SQDIX5rSLDUaK073(kC&Y!Q*1)JrGQ)1ai8jWlk#ZOHmxO_&tJD zxU%$t@at0wh|Qg7#`jQs0}2C|Xz zj&58Y(%F*nulLwZFgWy;4zdmN&gDM;2x&~$N%o~WrQsxZDGP~5SM@~ltM6WRo?0Rn zo|ZcsawVS~n5nQxnO3$9R@46lh`Ij)JZJlf@2#M$FT>{r1{&HR0xW)lkRQdJ^mgUhfWlW?(z!OtdknxD$^v`*_;{YK(@ z(ou1mpe=uwf@$M(?l`NFP>{fC`)?uUw*-U>t6q+1P#`(bbPB1{*XSo7(ePJ&(K6+} z&C{n`+mT3cO5bj0jS^fs~> za2Y@5?N277@i*JEkiesnJP?RbM88g+SBW5hL|Uy^aXEN#L#wNjS(P#>st?|_=n(#P z-<`aXLP4Wmp#_6C)7zH{Pr1Q?J1J(AFdQ8H;T|##5}a!~jXCItjR;2n{tnIuZg_hK zSw(~fwzjzu*G$V(tJ1`#K?e_+y<+vBTmYv%p6O&N3XakXuR)F-j;>>k$|o&;|qLi`Q#jM_?;?!M>b4zOG=($=~ ztowM9eiICcLdzKJNyh;UHe{M@s=uQ)z||LDbQdI-o3#lL37<)X6%PjJ@Z{~aT7x$^E-D@J*?ia&69=t{5b;60_ z$7G>pJ`06@3MIU^n$M;4MtqBk@SO1$Jd%|P1T&FG;kX8|Q^_JY@whp_TgB=z<1#-K zl*EJfe#MJ6q|%<;2c3h9stqfcS&PE~V1qa0P8#R&a?!OONk=^-6!$}i*|3eM@vO)% z_4iHuI1#uKcy4hfPmcmu;P#(Ek@OS_{d>~>`TIDs!~!4^YULR#Pc(8?u5{qYzGr%8 zvsZ=AH=yC5kM^c72&V|tYQTcQRHq5g_CD&H3%0*d2ilon3zEZnXGr-M`hGO1Pok}= zMX^r@uKZdp=5$22&xC7T0Z4Y4{xF+I5fU}wNd$`eyhtR1cVL@lhmYU%CZ>w581Q~O zl>V{fb~^h7W4YYSakAb3hf}GKsOex3qBr!)8*Ks6;|S3U?FW!3Qg(@)f%^O&X)EhTp$iFNv4XcweP~MCfjZW1Pipoxd1f zAH8qd=u&QfI;xmv>GaE6k^}CLshdN$^N?5*$CkBHz z_d0bi?z?FuUa!th+avr4=E_*4NI`$QrVwarbS}}0H!AA(23EYb%~h?+9kqTlV13)i$? z5|agA6rC1~3e_g&jDQ>`9B>l|E&m7<{synWZWxfBPUmo6qFE+#*@0fCiQm{*4+s6a zaGJ^o&3MKqV%<{&i;I)-*{(Ih02ZJi8H&N+QB@eafs0y1L(bT6UH{3eEF_vYc)i?#?WtbCcic;b=taz7=1MovOz-kZ#b*%|4qS^MHmZy*f~M23F7x7MtJv1xKZXM-4(5w@QwR2qag`GxwI zxFpdYa8088NlNUkP8{^J5+QftSW-Q6_#2aet$rJcBqnNS7b$%AYaMA5^E$NJCj|%x zWM6zdu-_yTA$Q0*bzG>}oNS-?3HR|D+vOemt>*pl65(EDI$ARB&mJ-Z@;`uRJYC)W zMCNtw`Nru{c2IBgtB6b8S_jKoqYSlr(cI$K|HIo`M#a@_+uAt6gF6HXf#49_U4n<; zF2P-cyKB${hhPcr?he7-B>{rF%QwmU?z7Ks_w3X5y+6J`w6ua$t*TmUt~vVX{Tc95 zD50GHjS&EtFduvPdAJJI@oS?5>W;UuWacYZ*A?rW4woadqOi9EFA3GQ4mLzC19NkY zGn0~%2zGN&WnljAmdibvE?RGa*(P_|tLAff@p+J+L2ta+50W~~H@ptFTl!+P+ubFJ zgyT%LzFW%Ok=&jGn!McjGsIWBXmxg5>|f!eZ{$N?Aiqn%sm|K!d-!vE;Xkve>XZM(a*|N(8LC$7w`d~$P%&OQ?ttNHsAS;cmzq+$e zsQ9bcqCCoBtDU&~aVrzKgh$0PXtz_RY8 z&;B4sxRzBs`)8&*(bM!pzKw?&#o70?DsYFi{5?)Pl5C6Zp3*OcW)lXKAub7=^wcui z%j}LdVrS?-uu`ysRHz|1=V76HQ3LH!z6(Z99~^ZK9rt{NIpZ-mAF260fe<#ufE3wk z1_>65i1Uxq(z9TH7CW2imH$DZNseoqy(&qPk`rvsV&^J#dh^JgY-OllT?f>^3w*25 zoWK)bqzMTpk4IMY6;k@O(3D3}^b)NJf}b?coaM-1|=k<%Ys&=+ZG)+rJI<)Mm}3 z^%P!s@D$D3h!IaKd z;J7&*pvFl=;O>6W&-J=FsqZ6RuCs>Tu2nJ6vxc+O){>8F?Xo ze{DwKqTOGjMFF1_11=2bHS+gOI_&8Ry=AD;20NtL+g`6^7W*bHk&m(xQE* zd)>X(>;jt!I7H&(wjQt(W?t+hYc)8ltIZN5eCyVb?_AYt*n}q2Cp~q42OEjMntiwO zF*P-?0O5A~O^cmF5Z9(7RtB5GH&Z*i;ogySK_w~b=<9CUBvF#nEJm)?cGx^|POXgfSNi_vaWodkGSl5F6p6K() zkQVH8sv>l)Wb6aFnR!iU$N`|Y+TFM>vI?&_ztBCrpEkuH{grVnL8j#Pn#Q+Vxd>}Al-Amu6a131o17JEsT0|nyD6$>xRL3^+H{!}H-WSqL$F=pRkV#%e zT5$M$6;!l?zqK5_3~nDSbM^#<20oJ_5Y%E8qv}_$2ThKxS=Elw#``PQEznW{t>vMQp2I)^I!OEYO|E^t^sIOj>0vlV zw^mrTt3${DVO-_5uu2zuo`?#(Bt3!b-r`4G23}}@-394{wK-rUWA<_$4MH> zNfE#CnZLIxFK%?*N8BhAgsDE2a(zra!Pa+yMe22X>eF|;RJEYmfjFnO&=#Wu9e_=-E4-whV-kT`-z;%X2xr#b zx+T}%^geubDDY8l=7Fyatu#wFX*pAwYA=~<{e0QoQ5Sj3@Cr5b7qk3p%%F!CiwARq zo8Y8cQiG2s#@RP@Z;Tdsi0ShdaC;_=MZ<9L-aeE1X7*4#G zlr)ybDsMT|gKJYj#)7uMjCh)jeu|^WrNJ~dg$RhIbaXN{R#wHT->0~nksVERczwi< zaG7K@PFLRQ_GQl~R-8YZtQ2QR+68>9^S_&;JN+*WTAY-{l*spg*4yEzZ#y7MiAOvbBKTcaEiM#6qzrn5~*)pEwU$ZztvJ|V`zLT-SUX~Ju$u_gDESQky?`FBS2=&t;H)CJyH z>TM>+BrLr0c*82Ks$y2jQqdqNdUo{;$$>}|nWh-NOoZJ}QBcN+`ag(Y|3eE16n^{U z5ne3HZBQ-M;bUU^gy~#0m8V`D92~qnHl}D{Vv>Jxex8sO&d^!HR0Fsc?vVV-m7}bTvY-Cd5R(0h+6A7pFZMsAEj}f4L0)?e+23FMv1wtMWJH-yo>*JvH9*-0i*_1jpV(_E_qLr%4HwqXrdp zU1o?7Hvhjvb5Nc${YTIodnS#8XPqoRCb;#6a8T2kk3jsX_T$OVETKaSiPA3)pl#L+ zeCj}d6|%KGBBDzl$HK$o#063{Jv)W#?L{#`@r6h#pFK2WPf@JnQAAIBRAUtUFT-&t zlK2rAynn$jy5eb5(TCdLEy<;EhmL7~#9MOo5tUV$TUyeN5>_dgGB*|!^ci1X*2z*T zjDTKYl`$8D&WiiPRy0_3FR~zzmzQTg;)@)yHn)3g?_r6-7B-uG*x8A)A`viC8AB6~ zV_z>!7Dp?2W&b%f9m2By^G|=jsoze*bsEibyG2!eY<#M0jQ;~8C-iSd4q}8d2la-Q zt+K2Mu3mE0=2RaMzp`tLiG@9a?pLFcih5h%aC@9rR{qf(v zd<<(tvz7&-Ex}TE&XJ3to(fhOX8j7_;{Ynw-*CnGl)nKvv=;T_h(>A6V@`mx&Ir{G4(6A^cOxg58jhb|bEfF=&RlbPZfVR@MX^-FvrBNkNY z&x?plwmgo##f8I)f3FqT88?N@KE9Xu{wr=?#)(q83bQzB3J|iP(;9M4j1*0@;0g({ zN~hKzyfP`2xe-1`re}A`G4TE-Tr%=vsbJjs{W;j}H;=`kXSpT*rgjFtmTe~#1Qxj`P$-`VHT> zuA2dDoC!)B+x-h!wN?krN%IAW0k$Hj@M-$TpPUmoKZ0KFstQgeI(6|^-GQC+)n?5(&&n9Z z_-$g4^?qy6`KhW%zRG@J+2#Gm)i^^LT~5N%EJ(Vv76|A-?rr|2jAunJyHZ?iGPn95 zZE;D3pF}ZGg!lqcZ0%A2QD$IuRUJ-$ep_m^WKPwf#W_J^)#*Z)6Nphp)q{wEC)fe_ zZ@mJ*6A1Zh9Q2G}4J46H4{1Y6=PEt3UW$qw{bu)e`&2ewViXVdVPg9HdD<4Y)Qn=G zrC8nlYI?E@tuBK7FUL35yJLkZb}e4T4YrfJHb=atr6Gh}Mm@sargr+i-aPgY zpnM@Yz z6_1LH_U4)2{0&DoP|L#Bj`t|N&rlKIR(e|$vK+7F`AG{E3Abzj*~kkIxkzIS1)~FH z;oO8FJ(E?YgZ<2_v-b1ReVl>1Lxv-*nZn~S~i3XP{ ziy+vFqWaM7Fs`|6;M!QJhcSTo}^4$Aj=H= zAC~TEUc-#E)XAagCm_cWKbv)5)ZUep&3f7 zqYss|vScWd%l-<57oPs=f0LMm>@!7!f(*Axm1Mr+ldwAY9YG)~karw(-gezAM&t^F zjihpWb5Gw?pnPxJc`Od+zOWGp_e^hb{jkXIIDXl4ie0Eq@Ws&#;VnlImH?{$I2w@o zaut{0%3SUl@TT3L&zh9ueip$k*8Z?4hj86W%0y((^UE*3?87qRY`FoeqxBLbgLW$& zOHRv~`^%bo99jeyPs2xp-JAWC>?XI}AUk33>! zEHM6>y5C%-Tu<(30s;cVjBoa9(85~Hy9dA$FQLCu?=2Bu@)85LraB?via~afu;VBC zhCYznj}GhK*-qaQG5rQ+b(u1S*Q1`1Obmo4vG2@$v@QyfOxo9-2D3I*&odo8Ig%@E zsYDAXF!!`x#n>|IucVq>+QS^*yD_4XB!lCBcDl-dOz@HEw&7XRL4f zAdCgse&W)qSK(1(A=ce84G_1w?GiLByv&q_Eqveqyjv~1o z&-W1x26%LaE0Gal2TfTey2OP+u-|c! z$ZA7}VdbEY6ByPIFS8fsRBe`hDqao>j`=Z=XRZAroXJ#7yRlukB$>4Rj@a)z|7+L9 zGKjZ6wVXzQ@Q?H^l(jmyYI7@u*RTT0{D2I!J>Qlb`1YD#DP09=2Q9 zqf;7FY{L@;Uv@W({Z4WR@Mh|9=pipj#8HUAm*iwRQI(Kfs@0NRwn}N~rg!#`$K!!o zal-r#sWIU@43CPHoO8`Ps^1_8A;b(bLNHwdzY+WZArO^<0CpV#E7A9mW{_gtE{|2R zYO6ujyCQ?)KMbt$eP)}3(XydUR5P`zwg(el(?Xe|kqBVzAB<;&hF}I2T>14oblE>z zH%IQfQhDm>ryvCNomS$GkkK=Vc1xTQlh3bl94v=<@?(*lOHBB<5fsA>h$E$F*@wkU zaB9Y%$BW-w5d{^vUZQH3H-2Xy(qTsv&Y?JvxoPWQ$1D+*$U)MF;h`tnmHI6HYA6lE z!t=9IuGsb9p?g-Ug?hw*X2>u5663CIqE`>MxZOJ3V;_V(hVb~*&ypBH4=MQ!EQ3PF zoqeaDksd?QU*$7iqvtUs)6C~h*2uo?+ljij#;Vz9E+;s+=c zd#&WxUK$&o=NPFCM;U!Z9m$M~J?yO10{C{c-0A|qFfwXPYi#Fsoh%Xkd(m)rq5Yx6 zqK?INIf5~q21OcMbiF@4gs^;$xV2-6x6yh}Nk})5$ujh4Rw$_>iD#d*;=PANk^ca} zz@~NFRI3kq!cVs%=B8-P$}a{XFGQpbpx=1J^k%KBHX=}D87(1_k6e>z<&pV)alSfKFc(r|l6Mq>L>i+`3xzO})U3#LSyjRb1jj1_n2 z-8xG>(fs8toX&MK&cah0v)HXF7|7FYvBdCtBlG)u7ICl|Y?g3@xFw-Z!(^D^KG-$C zab;7Gx)HGhF~q`zb^)jHSJ6u*^Hp2UP=j1}VJ)hmG(?6##71*~v)Lj>Azrq}OpL=r{J_b8+|o1pJl9hrN8=&`SE=m4igS3#4b*eAA$8$ zS3{UFZCkN>t*?~3+Uy6Y`l4Pr;$U^tb5rEv`S%w1wF$KE=c&!tf7TbEGXwF|S}O@Q zX9wFZBYZZ9%CVsU^4PL+mf*6ywlWwr*SqyTGCRb%n9uP~SC96kI;ai>138x?s>sa5 z0^Y7ag*Mu5xhxG1^G!P13~U8$I>S>CiRYFHK-L~{;Z8eWfU z{?s&N`Z5)3C#Ok_0OmMlcKgMOu#2TSmJjtH@B?0EIE^{ENyNrGxhmBAR>(&mjxx&| zC|CQn61?*#U`hAzDqcgQ@@s4?daa+Bp!`h~>0mK8JbOuI zG^XxNwnXj43f|>Hm3s=FF(sF_rp>arSS!*`T0IaG8b;A$!2v!Q;p<+SHa7hOBjlK7 zAFZf*J2IIJ{qM5BHCwl8oQ5~VO@_65Y7E;J#ACiiOY)zJIj zll0;YH`vJQ-9(S!%*2a5iPRRG48c84gdGjUDSBld4?nGGoMhXw1Y^NdmtBN#}Y_)*6Ka=vM|Ud#*=vs!P;n&0~R9kH*{ z0|ZHJIV;VZx_dXriBnE4{{a^Bw&qHH+|~L0lq2m@5b);!jkJNfteiFIn%vt+e7c~j z9~rMQ@QiGF2j~rCtb3aD^-YwvWvhNw;)I9BlKe06fPb4C0KXvLcj-3Hgb$KZHFAS8 zIb(juorVFBBT-!|5HB|TepPSQKv{6bV^K2bowUSEQ(nW zf1UWL``Z!|Jtd3}X1&xW9HDVoDuw5Jc+ztDd@N$|3dNN#pTa z*$P^v9iJ*L`ukCO1tR7&EU^&PLnWnMkUseQd9v;vKPvQIq01B~lQqhnZSH)l<)-@K zcxz6w{sRU8tWRrfbf@I!bDG@@6-5uuno`m0Qi>Y0*Z(7_h5>6WQns`hS5Z4MQ|+!S za>eW$eeH1oS*EY~OW9I?>-6O6)H4URX4CJol^SShXw3jXJ`Dim`@6feBDmT?+WH?z znYs#SpN>lg?ay&3W&THUDwDfDkY?i&UhHQ6b&}A?q_FQ}9)ExlB8*XXQT+f(s>G^D z{f9!X2ba8XE)DsB{_I~2d?f3=yji3qrfnXX7LhQU;q5pJy!|3JN-%l3{QH-PS>rsjcO(yt+u0f-twQiT$R>Vg2_ZW66 ziA#!j&YbJ{&ijM)Yhi_WqDOHNvbYYbJuJWVW}oSLd!-Apc3siSn3aYbKQKsTx_x~7 zlN+YJAXR|&F_xb}Zf$Fo)a-kpf1kqEJMR;m+q@fYl)1*h0g<$;t1B(h_L7@LuPU^C zqzIZm#Ltto#`^hwF)=YTYP_;WN%>>9e>R?Jh)>q!9J(l3Qy!}vPapjjCb~UkKkEx? zI=QaO-=b&iLD%b`P3qIv*VjIq7{x?4!CMR+#Eee2_XgrN|4?scrULK#<`}mg9%eg$ zRzF#i1(jdyoBd(6;9-L3J_SI^cbYYLKYGD1MIcC>B`6U{a365fAe$#e-N`+IKtG!R zlYodg>E!TYsOl`7kh`mEA2Bhpv9q%?3t$5&s)JxSn4j~F%l>D`^YXa3xM3#bVtq$t z9M_#|(b*?%3$$&FO$`oouOT3|^!|g`vSH@ofa9_gGGp+E z*ur;6Y>ii>3bgV51jJ^ULP4j&qr{0vFefQQF8TucF*f^DWA=gPUsQ2Z>ddcA{v(va zboz1Cf6zV*--OS1;Ee5mk-le@M}N}Ahk!1=9@+X*W6J`VhyNDF*AgqIbjAmXRwy{%uPx5J2o*_UsFTawfkd+)WiPR2DZNHVRLZ<~L&mq!vDF^LLts zMu<=3_)lVHW~B<$MD%oYdw+}AGT%as%V|tEcXnP^*4E;d)WP=AJq_DP(6J5{a|Z3j z)(jQ>!XwZXBIb4s>H1OPig?{+V0fz`K4v4mYMrHEze7o-tvK*gWjkmgi^p2_FT=B* zQunKlZtG|Ga7;)1hDVwsHhIjykq}eFAr${W<_OND6f?>{Xn{@W-`39-y2!JMCbc{Y=kF z_8w#4TWc#;m%X~Y`z#urFnNzhRsVfQwK?g;hW7<({r;l`|2Y^HL=? zqV6LAK^(_w^Betc$jB&5eea6L3^Ax;;P-D`e1V;XAo>`HDC>Bt)>>>OIUA#*5uf=G z%&Q9-H{qj687|Im4p-z$n9J{nwHsa}9tvCp#=i50NFo3-Ubjd2LGH?Twcg+N_kyO& z&Gbw%GN6BK4$WaPipBfLLnCUv+J(>9XAlRwGh@$DvQTfsvDn~3=v+F7y02Lkc+SJ| zKd9X=uNR?P_o2UgYrWo-KqEkKpE-o8JxNfiT8TlRXd4(HzyVcJGq)4&?!(E=LLHwl zF&PP*><&9jP-v);_VMQVm$t^s!`0Lg*e5&nt1RZQw()hto_yi!lg=;ov~9V9WZTmZ z7Ud=HHxfs;QqmPTy@eKA(Y2aCYKu0<36BYjWeWdB96M!DsFX%2>kgKZzHk`+g?vgi zjIn>&H2g8sU=H!hmfLL63zaXX?1;&9efb#}==2HOd19S(`x|fix=7M2lV~tGwmXAo7X0vNXD1 zgTQNSRT+)sG*Mug`Jl#H2fNcF%a|chvxOad<o%v_DzlGnd2 z;u_^d;ku%JFNr#Bwu8dyAK{+nv|$hi{CQiEkH?rg}*y$L#( z%a=EYa-mY>M|W0JOJ1Iz*C2995q>5C*5EI!jGkoSI=G>g=<(26|K-x~ zmBP+=_Rl<=UAQG~Ml)JP^K)0$#_Gk6WhJT+Fz=1d_(fdY7R-k*IbyT7xr^iEcta2l zjmurJu@nWJh58w!2uT2jM*) z7mwU@d`Q{_EbFg7j*audC&va8^w7Q=CUk2szgs{Q6CnGsM6z6AfvDV;4o$)U1Q?>G zz`?&}Zaf@HElrUuusx-{6LW|Eu;Gil87qTyA#Ab|yyr1(yu@ zUzJC^B%dE0TjHVZNq9sAa@P&EoKy793#P(#O#R#2+g&RwD>im^_O;pRtQ6VyH#Zb8 zt45I=%TU@*l?PPr_cu=XcZg?L97tJU^GpRd2VEq>ea9dB(<^7}8I|HjUK=PFvi|xc z{$1(u$@5=Jk30U$|0))qvniy9Y-HZb`c~RvI60keGx-PQ|atpWx5A^OebJzDmAp&`*ws$4%8}13W>Uu^0;`?^DIhiMiNPXm|h85{$sz~s?%3Q^> z%}}L1lqAu{jywF)8Yh_y^rNy($Fg6$yWbkB9Y6F4%**J3m{%{dhwUUP8k&t47#COx zPU6RBT@ig?M2U@QnrcNsE3#`w{@VSrrIl4PJYHpcQGj-qaA1uopD=@N%O2zqF7)B0 zoOE#DfwzO+5L6{bjd0d>7oclI2b?-? zID8-AW?J%Nyn46;;sjlV$;gA4L+>wuk3?hY2X2~wsfTf#F*t2keSUNXqp@1ndqMoijD5}=H~U*a9Rrerbz~$d){oLiw%yX z$@YWwd{sYc@*9zgjvl=XB7Z)!lY8g=d1IHKedvUJJ~7Y1Y?+v5+clugzLN8p$&*ca zj?8H$a9JPsN`5{wIWi|0Omk2UMSHe;bYyEt9tg$&YCax%KUM}iZh|Re(}2NS4ny?= z47$tU{g@3XI`Rxa`oWe=b-z4NH?7v#o-H@DE!Lg3YSs=jnhd9MgIQD{`dcGnVgBpzu#{RcJK!dm)XO!4LIO2yjR@dg zSu7pqbQ_&zvGMSz8FiZK2o|Dz<>chb08{Rk)nr&L$Ng@;>=BHQB|2)rs@wmOEf!vp z&S}>{b+b5U+F{|Q3NWc5UsDNh2YvzgQ+2Dyb;awqiF7y9#hNCwKSMzk@6_I6xdz5F zE`&=(aD%jm0r)P1yiH->mz8KY!o?PtWzcKZ%<7kQ)kwyY$Ex8AG#7$j#17x-3^<1b^0G_7MjgX!*aP#%bo9kp?TT0B{cdS% z5z4Jrv)dE~X&oxKjW)zmNVJq{RGVJ`LN0wF0y?fovSv(y;+e1UV501pe~46Gw>Yhp zl)TnAI=rvwIQSWh^MJI$b9S)A(+3nWc|Uwk+sp|tfVD!wmda+iiNFIQV6^4TF+ZO@ zG$Z|{sssp0=%yd-*Pw;pSAO^bpmNq~F}Zn&qjh#0O!N8rok45L*=+ZFY&djk3jS6y zS(A6yrxx4#agz=kF7FIpDtF&`&03=zf(*8GpHDo^J1Qc76N5I8a+5AZ!lHf=FZ?H? zRb4%Gf3*=kH|9rs^x(l>h6CQm1hhzSd!OZYH%y6cD?crwRw$aJ-2u3w0|_p2Z(R=- zxoE>|z_jHR8!(-#1|V&}0Q?-h!tDyUh4XG6kC}(J&VUQ$=hbMRoX(4GL?0>Ue(aiO z;_nNUUUrlX0~#tZm@47NNlE^+vj;GLeThV803NeJZYOe+p5U&a3K{`v_?;uxd637} zRLZS$Jy>=PseI( zKtMpuRxD5#zRP5@(`|H$E)q6m!0B%^!McfD%)T@gN+&1=*LTVlGMo3dkZdAvc_xX5 z%^a9LS-Iga5}f$R_Z9N0`S%Tr@gA9a2Qc7ad*fS*@N_SUWA`!1%WK)MY)6M%e;Kpa zTTrj7`mS0!EdFk2WMe`D-5~>3TH`H z3clc%EbuZJVDK{nVQ#{NI4W7U;6%FV9}*m+oN&x=x3SEaRgQv zW5q&cw}?Ow!I90l`@)anBxnSIq8nJ$rhL_7bb&4TTe6mKxRM^{YtA zm#eZ(`OsO_;^Q5X=+u>p@;Uvo=%q_2>qGUZ6a-_W!*~g&72WZap4A^uPG;+%L8X9E zuR*O7!DysEw?CVqWakBw!*UzCnLFx&i2uVJu7Z}9)*HM`q>ifyV)5xtX6v^0N~}*s zrZ!+wBn8cCl|gryOKVwxaK$dAd|1z;8znH4 z;8Ex{xn}VKL9ZHYow3=V`*Oucgzh{|NyF+#`6ub6ZY>w<#;gJLmTTKrXcann(W(3p zEM$Z-E0Bh)jzoG&;-BEvMC|Gf#-RLV)=VMks5@ltyU#>>TXZlg;BHwfv-{}s6By3(3C~w-F7xJM@aeHCgB!prQMzb0;rDcKCR#I@%9+S%M0%XJ+aC> zfj8=&RbZe-q?f$s0@h~$w|nXs!YoAc-3(?JGZNwtf}HtwAgNC)u40g8vY#n*y-=rA zH`zN>UB7tl;q##zJ~x%5Xch}8^K{g1dpRyiaI2%mn>K9t-3;M{bwPn#%$84Fl+MT8 zOE8S&_K@!9@Py~9a2d2H!``USOVn)}nZZfr>|ok%{<4Kr2}!cqeGXW6luf}&J-^Rk zl$zPdpG?VW{rx*>naDo#j`^`_TqGUAO37x!?m=e36Y;%y6Vtz{>%#m$o3z$e3{yDn z2ra2}hBmvy!A9X*S;hsQv#uJnA;wVgZAfDy7*db*&mi>wZ~x-Ocy@{aijNzd@NB!8 z-E%iFurB8h7*(i2_ivoA0u)E29yzFcTVd!dH!;iB1$qtKp%(JGDjSHCpM$cS5wdZ8 z=v5{gkMHzB66Jvx#N`SaRo7z4<=eK759?yZD$(ua+pLYSpx1}&kNniRa_a=Y_ys)U z@?(f{_e0hK<6be4Pdz9bwOJWItp-Q4mtnsQpi&M!u8#C+j9!2jpTNXnkHgcz8d!y? zL1}rC&W-4v9!3EVQv=(*5oB$TdUFDlN(>}3cp~6Skx{yW%;y->ea2__4=vzSXlxK4 z9~|X#=%DgP->^VnFJFvD=@ zzYTyI#NFdYLj(@KShVPt8;sND5$w?9t5__y_a@`h> zu&t2{S}RM-cxrRl2WBJ0K)>!EUlEH{zW3gIo%!vkQKU;yWI~`3c^=hp?a18yqeBkb zK+QZ5wC0QlEgJKw&sg5(%9JQWm}^iaZOC1Dqna_%KzGY{)#`*-O#A6HzDc_E3keBf zDzaGvvk1(Kywy<7#b;8%9Ll=J#zD{#hSf0HeO|m7tY{ti(;gq`vy?lIHm|gb0pWDD zOC5D5)i;t|()%~>EoOni7*15vf{UMz9By47LQ`cXTq-X8vfU!l9^B^@3%v*`iNORG&5L z0y_m`*Bp8#$;7qB4ZKqcvLqe@CVJW)tD?eXSXkKdvI&BnHQ0E~w$J zq;6xfR?+WpiX0M^4@Ze{mx_Y4>mt*{Vc_6CbtmR@Zw3JR? z`^}N2v_|aq!;|4PgeGTgZg8u|$@}9yis1*jkm{9g+T|zrYfSnmn}>iW-C~0`AqxSW zWlvvw>w^ysk_lBqwC1%mlhY&&9-kiN*F;b62UG`D`T!kWm*C<-cERWH2aFMsCag(cnMJqX??8vsPstg8DI*-pcKlZFQ?v)wyba{RH@*b&R1h=HF{!BA1=aF&$Ii0+-_U8)8GbQFUZ!d zJrqCjPe!dw8C_2qE(8f2Nz4feGe6Eh9tlW9X6&-MJ?Hg4Ctu!Z_1a)8iJm`|PZz*G zt)8F6T~M*sfz}Q>^Qmz4wEkfpR^zaE`YL$pQ4@Yjvp#%7_KQFoizh+t*!j5A_&v3H zEz}v_99qe81N!diVjvlA8@6kq@{adeHDul5Dj6v##n#?6%tZ)S9gEWeE6jE^L?x-h5sA}2UX-%WW>NT0u(;H&BrRd zZz{H(78=N6h}gbwXBfTh88A*pr4%pCrc!hNyz{-V6tZH1TAygtjq}7>p+a>h4x4RIU<&>@Hi7s+U*CTi_vPQs9rU&y^1E_wmGW*SGS_ z;P=ah)qbIbi2%SJ0YC{iXtT|p%~!vt>bXZ*&$XZHd2f5uq0SkCrr6M$7err!Ki;H+ z`7HWbFhCcC8&^ylF@Kr1z_4g-lKU8O>ReN!7af;1uCA%>A6YG1w9O)fz5GHhn?<}G zA!ApSjCtK_7_j5Xva({dbgpkh4~js4>ltnu-DYs6pd^A^l$`J+-0P&$XQjti@;bbj zgOjgXZGR{g%#_po{H~=O^5q!USh3Kkae+sCY+G{mc`-30fERnML|H`%|wp$v#5T`iuBwi9Fi039O>frL;h#Yt+P)`t|jK9?Wq$sqCGxkin(WBS^NH8lSEU|B-HGq z1{Q~Sc3DjTAtk|We}UmT!O38$am;_zOkFvb-|BwN1D9KnadZ378R%}ERpnDfNlpE& zm5Z?E*mJB~;ObI;d;WlMY`V6x`qt=iF-no7FF3R7wlHPV3Wivt%AfRutjzmNM*1gE z>5p9wZ1i8+@E0MHuHVJ!U(ml86oGsLz2(6WQUT1?G0S*Oeo)tlcr)6K4$w-{Mqk;d zPt^D5ZHLk^!>}35c~zfq7Yn6NxQoYiyuQKETfze&gCPPQ*d;I6h%d~jEKo$etnUi; zQ%G|f!pp2wOO)}MGjJ4Mm>vbJJ-NGVPnYS{T8>|tD(CaZ(`i7Br`YEXgxUY7L0Q!) zMs+nPi*7jR6Kl2K<&N(?{LJc(S{}XS{i?eOWRVqH+(~_8KY6z|i(45g48rHkIH(K- zbHBI9cG*C1z*`837`c$d8el$GpPdeXB7DKyF-Y5ewr zm(;M1Wof~s00WY`n5BusTHLr=;Yk6%SaI8vGIf4%m+6gLa{6l9`uCvuOW>tl+?`W9 znoS@KYjILs*ooN1rtmwh(OsQKdm3m5Ct8)Kj0l~1>o(tyb<|oci;J!X>oZw*mi(AK zpFs&EIG-kRLbBFw&}pKa*uC|2ExIprx~4jAD7vhUUQ$0xT&g=1@631=rC+;piRbDb z^&>s#SV!QT!O?sQ^@D+p$dJpNEM#G`#mdFKEQ_GGv6Dtn>qkM zE@AgAJ4@(*?US);2OohC1q|qs)lo`92_=Vc6G>lx%<3zF+u>J&0asyl@o(|b1I^mY z)kMf70z^@1ybt{?_q`tQ;0g%DB=HumDVnqW7$T`nL>jqB7dH_82@)mA1?Sg8h&DJjZF z_Z#vDONt-6Y&gIDQRdV_!7AqaE-F=_vzUMh0qnGux^pd($Uxv{vH(ldbc*(Uw-x_$ z3>=Hi0kUDh;f@1@SG z?`PY)wtA#Bl+a=vdoPDg zv-=gZ*l1PZ!BkN2he#+(3*};(YMj>+)CWq)$zQ=I&O$e>GHvjJkLuc1 z;7Q@HET4TcVW!FDLk8*dhtH{5R%_6AddXRHGs$4+{m+^Eegzmf*p3O@k-tuUk+HhB zv{z=kZhA_8Ph8gQh|%N$Ss-vHD(vfCaxn6)bH2^9yHy-9JlZc?R;aLsEttyVAJVRV z?#P{H*GPtYb>G{=MGF$XDze<&mQAv1^k!I)uPa?mCh(7BAJJr$KTi^BM zrxfFU>%ra6hV3Mcr+wMF(}2)KNwNO#poCSsZ4NsIX%3m*?Cb0AxV;TgBfluY9Me-3 z`VPYyzbEfJfYh`U;k}#J7!Slq4zzc_JUJTJ>~~LZWbt=rZDOAx2?%Lx1D-r7F63yVeWs#>W-5arfuO9d}GM(Rs zjy4HlCNtR(5OH};UVT30#|0^`!?x)j9F-wabP)5}V$}7Se{cS@cWa}`r>HWWRUUFV zoMoGK@?dzy_0m+W{Q4EOW(6``GB5nyN{g?xh+8NmN(c&1Z5!z$Q6NcLL%X~HL+}pv z_cq;Ek8qJH6eN=ILs>zZC~7=5FQ2kdGui>QhtO?AYaI2Ih`A5BFg}2b=2Ii98SbRZ zW@fh7a^h`~X%uTv=Cx*CE@O}#-(pl9bVl%OuF_LRcsq3ve^WN~yq`;__1J%f{T@oa z$f}Fw7ka+Y1BgudW(S6aIO*%Jm0535VSRj8-ekV3!E1w{)~Z*{N&1WI(KUS$7(bx$ ziR6GIB~pG^f~$Xl!-8Uy=G8TGskf-y2{|m1h?*;&N>@TpjNqIPkv=+Xq0i}Jyd{bq(+{UtluPHKAGq@B zlwsIK!1DYtz-Cxn8iW%8v+i(jUUZ(OQ4@Vhq|0V)jKyZRxz0tM+M202DSAC_JbI$- zCn@{&xM^zXTOKu|s{vO(qxQM)YK&fiW=@SADer{W{6Dk+=>WB7rCZ}pq~$U+i5{c^ z0g4knZT*#xJ?74D3f{|WP1su6@7P!xUEcs4KbS{+qT{L01sKG({uK%Zh8k_4C?4G~uG<8;+gk*|6-OvIUp#j%XVmVN*{#788)#i~qmQ-U2F) zXiMA1U4px7f=h6B_u$sJySoz{0t6CVg1fsk!Ce9bcL?qfB>Y9@-kI;t{4<}d#bS}B z(sV=BsdLWW@AFtIYKK*I_Qr8@FXE)pw-S>`$|63yT1*ny>H#xtN>6QLr%e5g>EW09 zyO-?n!A zv)IIhP#kF!;XtTTEQ(TEk`n&X!HQD8%k_nY)ni^_vn_D>l!%oZ;2DOm*lY=(T>&7T z7_TO+0TIpPl1ttkWHG<@<%M?ojLmg8(0rS+$pTx&wV#`eYGzR6$9>PHE0>;XT_((N-LTpSUceMTd0DnQCOTK;Ak zo&0on_{3zl)`|0)1Px^s!NDLv^bL5yi8f6<1sd76ft&4nMxeW8R1BT< zRvQk0D%S(Rto%0ggJuCt(zGOfNg6gi*>6w5x9%567{?4@RX1_I%^OfIOCxj=}*j$?IYAaE^d-V1hD+Ttu!^Ymfqf-tLTtF07 zig>Tb{n6}^6UySJ+PD5DfXZpSKf=W7c|&>cuqA`Bl8?bbhem|_wx278>3F>Zeqb#7 zqk*n?@6w3e$B4EDlqqk|4exzm?G~XxNW*9kWH5r%Fh1ZECuE~+?2I7)F(2$VrV;#26`NsjVeEkm@Tl9iafg|%-P)N#XA0-)X6_O zY5YH-VgM8d8~;J^mlTm;S$teBQx6rWFyM~~nGBG{{!ZvFH`K-+eceic14T-X70Odi+&4624MXjx9;-qPOy%l zhrgc-ug{%c7?(7>@bK@(MWi;F0SEx;O;%jTf*r~`Xk-EbJTe$c4L$g5JFt@$jx3iU z!U4D1JFvwm;weI265SLvXG4(b^?pKjI(29Pye)VRYwgg|K~1*WVbzvYU47_)+=j0Dwgf#YLO!B z?B>Xb((_9&5cG=b#T-B*fSpj9AeYo$j7=ixK2hRi;n@|>;0T~~BU(aM$`X#l^<%q! zF2Z}wdlyb(MeX9e5Uc)PwCQ2#enDa}>W)ucj=d~-aUD@7UP#=o1Z6#_)XKVRC+z3& z+2lK~mp51SC7nFxiDec>s)ZOh4-D;JhG3!Ew2EiYR^~301e2!?Z$|b~B|rV1+rv>t z5huOT{UEfbTAaC$quPO2Z5Z9?2-GNPm~29rxJ;=nfB{Lx@Em9??f0t$Sc*MHk-4IZ zciKN?gzvmZOtTHW`%%5;-tztpKRrjHn^cY_iDbLI?FDwy{FqsIL?NsCZPTJap|@m$ z^!hGxNa-n)#g>K_D@v-Zee3XDgH89+n_cMn9fvRh6Id@hT}GFv z{j+mBwy%;d>QFcIz4-vFnmB4^oh_UJa`O@Va_CfH zYXj_%e^V>1udSU18s&)YfEWVg>u!5{YwIsy$imIZJ#^uUZ|^)?AGU^$K7JQIqm&2F zfX%yRtLg1$B@WKS(Wx+kN=EPzMA9ut74~(3g?}Gy|=~Ek*ZykI8=b zML}vSu7@2voFoh@&KCQlJM-Mk40}G%P@=m+%gC*F%n1e%`H`B^p_=?Ct5hU#Geh=B z62W>VrQh9M`tWBI?0{?*^ycQ~UA@_GJ}j*$Jyd)++>sh}G#@dOI}dZD=@cX8@&X@r zld}=72cd|vEaoet2?!N2LrGSmA|k4q7U~BF!oV_*UX+f^^FfA$gj_F%d0X4sj)IlK zhK6JWbuF?0#1^P?#ti7pz&Z)BEmq7Z;?}ke0V)_0F?!rUWkyifAuA>(W?*4KDfMcd$%F3l5isrd`N(|qrYwd!VZz~yp|)CbKrO$ zuXFO&6dm1W2cX0PgXy&5?hI?Mk8Tmdi-r7zB_)9=D#qNAJ&x+Z+u0?vmd3OXywh?bMl|c&(28V1B zN?tsg_dQkyVT*K=40J31IM}}5+==?^BgFbEMCXMyPbE+6r_0XJW=Luwy(Y1Ag&P|1 zWEHrr&iMz-AC{W6(YoAz&3s@royyk)pVhs4$X-hb@al@d?s^Q$K~0TbjV|50eurt|i#Uog>abZyxTy<;M2-UPUv0H5pc@rPI1*aKCqA;z@E zBA-IcTBmi5pav>Hz|ht+dn_?%5Dj%nEVCdJ5NYKm=sr9#9k@1|X3@#JO4m z88VC5t!p@*p>M0xWQBk$7pig<7TamJ@Hob#`=jdBJ7Yd3$gkd2q--}UIWqr*hRlze*Ieqxx4IbCG}{z=J%D3?th>X8Xg_JSFiK5=mi-MH zI7|QGR5+Hhfgk`1wuXPrFz}RARPY5fv48VRp(sE)k>$!8&|0B&1Ux_3XA5{+DI70N zm+$F!`FXRLsQ|UsFOz_gE(<^bWkah5Hxvg42fI>)Vr~1JrT5*iN4NtwaNg<-P&;vuw!WwO7g} zD?eDRN^8X2CtSZueW+jNk`MQNvWXdcYxZ3EbjbWP^V5!J@PP#@K7dDMA!zv>jneLAoL+&R|n!Wwi}=Xd!9ap4ZqfIaMWr zi85ga0bXi2Rx4KDbE8TG0r(zv*b|d6 zdS&Bplt|Z?qx-)zTZQ%XdBLa6r|3 zkC^Wsol&n17R_Wh9q!MCBws#Yua3bB0CatZLkgUZs>&%$x&g%c)b(q~>VR*AM5o1A zP$8=go1F;gp$#+a3vH&BA#mwSQ(U%bVe>~2|&Mes`0 zo1-sWZ&uoS09o3`aVvwhcfa zaTrU>L5VZiWFa%37(vqqq#CtSV`9xUDA+4-W4WjCOkuyVxjD@{w|Wcr%`~GwL5;Qn zN|$W1?f6GE8l6;z7NV4HRmH;WD z=NP){=I^ToRzC@4z$%U-;B}5KCI-&$?sMU}UFe>wGZ)0?cOV}!cfsd#BfNj?j&aX? zbzn>RLB#g?55$onSgMxvMJmCEtDzlnkA-jb8yN46rJiq!J5@|F4ID8ft`l(CXQQ{O zmIzm_L5^zKg$w!f_kE(lx>%a*jX#0^SMYFyURRy`5&RRH|wB^sri#JtCd0e>9(JA&8Ii9^xPLN|(YEJS-l zyuY{AIK3AVKod2%E4v^)>p2_TVDccTT<6i!mdiJ2FUs$51`wipWX_#8M+>Ta;>@+1$ja71~c>hy)-P%FM-?we$VYD5kpXo&6q8 zLpGV{sHo6!QZe?DN7|2zKP@o6b+7BmFi{+63J3m?Yk0pcrpXI9uX8HU(a>=1m+uk2 z-*&Y~wKLYvFK=Jo3{D0QXF3UcpvVwoLr`AyQv)72fmOe?m(YU{b;lQE#g zH1PO^n72MASKE(g&+U!5u?j1XvF|(tqL5y!Ijw6iI9~ksB@J7dFT*^aZc!7^Jg9mi z{*{h%DdG1X^qT*}L!nwJOqM2|t--IEepVlUXt~dfP+SM>bm8pg(NQ9Jon>D*bcf*R z>lF1n{TSYn28D%3^i^iuZI)LPib+v)`Suo)tt5~{k_s-xh)gwpy;EhmfTf~@UfbE?W;ecIr? z{}TK8Z5K0){Qd*ry~gUGeL&IKM%>1Gm1i5DtqJEDtzVp9eiKe%Rwr)Hc-ObppJ5D$ z>7BFLO!rhf(D?#aG1-wWR*_%L6oYvvQlWUvUm<`d_6P!w&wcZi-FdsVFwpSsQH|?6 z!{Qt7+XheF+j}Yq7>u{RpOHJ%{Q&&b;^msCuYT(D?acR1SX7HTb`_E@RfN#y>cxz~ zuvZJS+7>G99;qtI;|E zeHITWh6EcL8roDOe6ppg>HnY57(fFKKH`7=)O{*Pkw7XKnWO25C%gkpJ6Y`?oRShj zH)SX1XWe)k&yOMp%gtEVr?ZHK6Tj5)dTC=&H7X8}6b66pvjN^B8oB{Zy+3I#FzNPoU5Jiy zi6L7IRH(S}KZl7Yz6jB*B<#6I43!A^u9$J#^Yg{;yJN>Fh~E!myO|VJg2);@uZ#_)q<~61(v?1RoCgQJ>2$Bunz0D;gpg{ zJw2kY$sM%;Q&kg0IgkP(mXI-V9)%AEhRu6c0%R_h3s&z-lk-bH_!EB4P{;P>a4fnB zu(GhExy-M{QrtN_e9GBIevGtF?q7Hd^PruCKo;F zA$MXVRKAB*2Hky4FDKzP_fC0`SO_DWeP)b{CWFB<(8)LX`pZU**3|Rnli8?yV}?xM zKjey#Zhyr4jm$%IWj1T0xB{z?RF11zHe8a zTS5nx=@X>ZLjG&#kmu=rbe{XCkvJkxNxAKJA4UikRN28D-mXz|BGjznhUaoP$=Nd9 zDw}>P_;iHxk?bXH?OKm^goS`q7}@h>tur#8A>QdD9YdLVtl#FlhHD9Jw~2FU^qeSo zx$w(xCjJpFy|pzQxPU&H$vSTS`)K3gtNByH3W(JDAwurTRR4p z?4-bx<6pY5=n6mrWJObZ1`SqkQ~v$fru(3~fTdrY{WeXmQC{R*^~iv_vuaZ5?+4_e7kntC$?72#XWsah_~Yj_HQOpp`m(Bk z{khO5vs5hn60uf|l`+pWm4VE?Yc$Ofe{d}tvGa%26fz5zG=lped$xoOK2R9V zsL>wb=I8^Sy(Q9G)_`rUJ+%{WwEwS}@hO;4m;Ty}BSECJh+Y~kexYbQ7HTNBKojoF z%1TsX0XL|}tv<;NURG9ZiSFc(@NhL0xE9BC)e@b0OpPji+yLQoZv7T79DRKxh-7Er zB}4E2GK>K00J`Q}9p~e+!`M~*x4}{ebK8N!FMcW=gmR~TSGYH^N$$>F)_s!Tmsj8D zf?6R$Q!4!)Ws~YUZ)c>^S+06}i(KmEVwxa^&&^?wftjW8empcKKDU!G-f?!!3!(4z zanL%I*!B4A#mYsnsQn3zJXc?V^ki7S@;kwcjvdIc^ja~L?d4Ka*CdW7n@mUuf?2S4 zKf!Px@F^k*XlnkCMv(vctAU|^S(^ZCCk>~WBLV&PuU%&{-99&Pdw|Z^Oi|VmjpPab zGt(**e686S5w6F(bUyb|nQtlCz#JX!&;2$G3~Z#BkGQbXuZ3!k1}h!1Psq}5MXY*_L^#9ZEpy6a2cSpZ@V_8@y?4Ae1N;%ZwLHHTp!&mvTRnqCL)$_UCKX!(p3xQ; zwZ*UYZgQ2^7q=r+na`o`4S+Zivd)F>TOyn8KSqNYdL4dl7HRg&x50R8&<_)w%7}FI zz2J{YonhfdHBRCot&;?^zyb|}K5a2&SUyaJR+$va{ZJ#KT>H0sTLNz{I*9-pK#&+v z#7Fs1o)RgkJ^j`@7gCNx!1vZBG0$rtfedD%HEZK>+EpTBu4f_(UII>4&WqK2M1@|3 zo@J%O`6c-%55A}33q$`?N@-tM398-7eaui%o9Uohl4a)Qmz;9}+Z83zF4<(<(A3n_ zmUxTtLoiGC6Qu3J6H3nZW?%7^*Y){5qNMUD!)HgFWy}%(iFDki#VC=VvPkVac(S*$ z5@wa#YHbS6_(C1U=`8APJYHVJxCQnA&hGnUJ6co{_h*(I%Fn}cws`Kl~v4-Xv^1L@Jvs1hDnAub=!`nF%Z z7v&4JD2J%%^?454-<+l-5TmyN`l6&=8a*z48HBb0$rw7q<+b-VnjwM8*?3p5$a_)T zcf6*$izajsG=s$y0q-=O;>-!Q#i|-1N1UbbFP&^Tb+NbJCkd}Wkd#yF&Sx~|GhW^R zqj~n(C61h^iHfn!?0_J!)DTG$;$h~^uP-NbdaI@)U~J-_CRgj4uMQ{J%Qdr_7B%i^~j}fJD3NY|eyN6B9@&b9} zh>7~nL_`cSNI+NIcVxP-&33b>Wb~B@uETa3ZX>?r3lNA7qO~n0CS%~c+&CM(HE3Md zVXDnNRC`&YtR!<6PM(Mu^V31C%?}Ug7w$7-K!|?uC+*%2?J_sl*vZ2q)}4gH`2may z4WTlXkc121OQ2de)BM%$ppYcf*7M0rPY7J|8~R`xePs)=ll~A>NnOK*t0B7XSJfJp z&i!*Q;I~07n_w#;vN`!`u(;L*IT)W60SQeT?F~-!^;>t828}E8 z_j~V6>cKN;N=Rm*hPtT9nwrIt3BQ@hyp0I$9`rc5I~9D_wtLW0uH}g5;58UOzU`Mb z$ZCJc?i|lFT@d7PyeLM@{r>xyzY-9m|Db^0z6A(4?3}e*tU3;&zecSpaOTsZx)XW! zJWi6B4u6uZaad)>UeCd&n2h)Dz{z#WOAzIbma}!&WkXwVe2ho3RT7IuCoF2#;qcUM zv}woZVf8#M5xstOM@tP*Gbo%sYaFA+{L~`7F`(^Fs#O~&gD-OTFqa8w((sZrt zJ1j1Yr=v|UFhd@|rUJ|Bm^7JmWk4Q+(kBD;chqt)l@9_;&Bl7m82AGa$a+w(^Jx?; zERTMI|9w~ee?7!379ifa2m;t2O6V`yJv#m-I+ou;WdFgV$ae%#qC|Xx2Q^jJrCp%T zWWOwqFExE&@b&!syicR9BD5{was3Dr#|6XQH=FXiPT#i#QZGm*GfqU%77({i%*?1M zyT7519u5OyxD~}jvD|z!G`>@?-Ntco)zw_>BVuVk#HvOqlYcSovVY0+qc=9m`w;na z(_or`u_81$icIjJ)@4)p%aSMs`r8!29cIF~fANJ-N6Sita%=9LoK&J9Ak<7-ai(Z5 z>*T4ZcyvFtFmWrP-Am^l-(GKQLKqPPfl|${`Xe3QS3sbEfaU;78;E(2Wp&rQJpf||%jlMaSAwhm8*t)j9W2d0WZf_>DO zBjQs=eGS&YoAfy9?O-XYbcwhl=z^onh(mH2>|}%teKLuE(CtiM+5rRYbs}dT5Y+yx zt-C=cu5F8!9ykKTF4t7U`+t$LB4Vx{G(^Jy4bWcRk2Vi~m3@0pqC`0y;X~k+`NbszL|=vtu&cl+&4l)8?^2_+RuOpsnD? zkN@?I{$Eoh|F_?D$`40T0M?L5!@HM;7j|U{$+*SI&fHdc?j)nUzOK@RE!A;it0RX=_5M|ebDe!2QbwNudjFYXjuAzwTv#=IWstD z$-#;OK=P2q#Kek>FKCktvZc=YSfK#Ip40vW2_d<$g4nV<->UW!JU%TUTJ{%=*UAIM zJ4(`IthKc@)F6;a5AJg8tIj$0Ge5XS;i>@*pB4@1(xw6+iO;X0?j|0+fA={@L;=Q8 z4k{iVFEm_bYa|quOk@-+bi3N|*k;G|vS}OP??0)y-x#NR4ZZ2*uwxi#LnDn%kd@y; zn-~ne{Ki3Tg;`r(UOonhU-r(*rZl$JjGGJ>*JIaWF>l!piB}8RA?@Z~ppSh@& zoqLx$vNc~#LL_cxC7!64TeFMw6lszs4SRb&0o_N9r{OXet5m#T?Jn0Ykj+~*dD~E1 zi#W)K7wpc0`RNv|OUDEgAg0}(pOZIdgm}K|q-`)fh3b#ke>)c$w1h0pY zJ0hxn!|O%@FM?cCvQsHqbJ+|x1E?jq{H-PI$PqDErpc+)su}^LHL2pbFwfxq`uvY1 z&Z-ISN(CD4sA|#V=1npx$d-Ymx|F?5W`!A&{3|srzowy4I_AU*AhP{K=bT7STe}z` z(*lGCoPaS_{;x@-NaZK!oDqHkZle%P{uK;VRXq--C@`CM^qrG+><;I_eP z82_v#sQ;}c(C1Rcel%1z%-=cEk8ldE9R!kCg$x>l`Td!14+-0Q{-xHcz4+h$)B1aP z8Vl&Qq7(@J3L4|91F%FY!^h5$?mthVGtkg|>4g8Gg#JU~#)pB8kKpg)84d-D1kUa4 z%VU{HAQU8BYCJPr*$>R%?s;jl3xbAE5F<58_>IFCR%(vBE=Ul<6+%{2KpNIz`yIk{iGZYnApI6e@hoB(#J6K8t@C^ zQ6;?R9X;qr)i&A-F+UQ~{4>nm*=pR~BCqQXc0QL%p%oi~WZF~zm8FSJrDorQdwJdw z_eoEu2M&b|B{j7~%0jh4_(m>yiT3bGvZ?KR!VA_i-O4s+l4rkGp!_ZsGm#DqZL{g; zADzg1mln;U8oM-pv4aV-pU*hw$_%txIvbda3knv6Om@&WGU?Fu1p<{?M!$`wgeO^z zo9b?~m<^jSjNFl}iHkB8D`$}}4Twj^g#gTszVVC&5NF#AT*<29;8P%)eP;T&|Juy8uJXAy!SFOM0wgY8_)TVmk=6sZ7VT%Z;Yz1n`q z=1|{M8=T$w5EW(U@rBD>AeM+9>GqUA)_(1tq&&BWK5x%y2y!x8AXxpyM=a2;V4-}S ze(gDnI4fT$Qj?!~&a9@cDT465jd(^AiHW^>X+;nl%OZ|4yp+E%T8bRa*q8V3=Y3q- z*Y6*D^VaV~Wt>>&2Dx1Pc04?APk=1w)8^`O^S}+ETbilM&7nDl7nS@AGr5g0k{3aX z=bci;GjcmNq#nO-i{DTFwX4redZbU!&v~EpQnj(X(f{oPoEoIBw-|-PqE(QL;m1Tf zUbk%sGM@_BANqwr#9aZ2mzFPR1;mX)!`Y(GL7LW;sdk&wxo%@=YhpvXn>!J&?()Jb6Byg^b|cdK|G znt!QD$+=#Vn1DeBii#>p{lsU?rT&gLLJ1V%_)SGrW9@G3=VPe6zQ`_x{{3Qi<0;>M zw(BJCO5fcJ=_CJLclCD5gON14DKZH}gm%=_oQAZi>0&}^MEExx{iokh$1AM{#A#7D zJwcX#=ylCujp zkqL^GL}=m0X%#Lpa<0BS(VFLlO`;WU+<5c_{h17U(VOiTD)ahW`7yl3y&Qxt1un%T z6!1b=ylsRovd_aC900`0(0F)wG*Zs|rl2!tjuW!p+t7%3vilh~>e1NXYf|wHjlBO(F`ZDMxJB>vT)ZD|S^1p$7uD zZw?RFgD5zg+cNzDY~UP`^yc-p@YlK)_S&iTw|)QuHLE)8?upG*WjQ_GGFdTCSU!_y zyBDt~ao7W9UXG+}4;c2zC%msQDJjYn9yjcZX?5^lV;0{tfPTYIgL8we_09!6uqYNj zWpG!ClP!1gE%%Az1-+zLk6Xa-_*|z)@0OE(SRPtFKKwB{RUpj*N}YQ%w4hLWj9|dT zSk|PNC4}|IlMCzk<(iSz9@(KbLq@@knlY0MfeG~sRo8oWIBl)3bZ@R>n2gRYRGhfU z2%)}k#**D3WeWU`oA7{#mp;F|fTk*l_<$Mv=T#sR)}RM+Ty7&+%i@4GB)y^Z>fpm% z3uF<)C$*w5I>(DZ4e1<~{jdzYP5LI1mv;tk2G-B#Y4Ej=zOogQe#_nS?(e9wM^oHd!r>#Cax0FdNsc-Uc9^dmn$884kQ zP#-*zF-Bn?nGVKcKFZ0<KwiRYxqU&)Y~{2%6* z$Ov&^u{vpEZX{LZ$vvKFlVpPQKRnzJk?ZT@G8sa#bYBwM$uFXmMhfBO++1FSZzM{Z zte(Y{Zuut0$SV#x-#D)wXs`ieEqq;lAZ|o7GqXdDO}`q3jG69d4a%mTa)~Y(`!x$CGD71> z!HRTD7-U2=lKi$%Q&U2Nh)*W>!`jX&c$6tXJcNfuG@d0YYWcjq6>`=EIFV)rSiOC- zgt90Upb;-&d_OJzeD1PY{r+8p@hv~RsNw1kqL5Q=@&w!51I?2wH1_7cLfNz6DN91c zfY<`%Xkkvk2xiw-7|=>Cu1wW2?Mdr^vvy#Xr$0;d+^$Y12|HJ;n-J15FLTa`HzC^c zxxm1qADK)bDCmni`Pl@?F_<}`;MaPOS@+wiPga6m<6~p)O&J+lW@x`}v{oDVK5HtA zn&wss6VNOzE%km~M0GkoLdop1S;5wKcXZ1y;^y1MnjIi*s6Hrh+SCeQX#P!F2(p=F z);p$>R-@S8Lq+IweoJuw3z{gy!9-_v`*E!ks`hxPA1WJWhh1*(W4+Uud|zbICB35? z5fKsnTc+Ti9@xhC`i45FqFt*rrrRw3RMHi}z)>er0?xA8TJ}(L@1Kr_Ywm(wvVS&h z;*bcDV9&aQY;ACZx_BTTGR*fcdi$b-`&w~ZO>%p3EI){y$K+~PUP zO4fgr4f;L^ju5Sq4&F99e-yV4w(&_8j*<&66+Wr!Kh^reMdv)I>2>OD$>Y2wymc|T zm2Wcb{%r$SGR60Ml8PP)^7}I?fb+Lo1k`fzDsr)=o5MK#p>Iu9;GhndTSOy7O14b}u#} zBqyG!R(ZVX86drh6Hg{g8=qIoTD%Xp;2js~U4T{H4PZgf9`MCN_CvS>n$f#5#ep2l)5knffQ{;xksnPM1LhzYS^`WrD%x=dMNi!TKRe83Mk<^67Y)oY!g?Y)z!PG9sEx3_x4(o7y^8YsX%yzJPC`k&*- zyc?-*Uv9F9_Jaw=bdSR@j0-01-c<4P5D{%mESfza;_<#{*VxEe%4ZQsMJN4=9r<1P7U23GJ|_Sw5P%|&$8N3 zMOT+Lz<3(_>lVYr5G=BuvdRN7yF}*B39>TMB@SKj%uY%uU$&*fV`z9K-O%jV&__q% zSplbE8_*C>l3#b@)csdG|70OS@{Wn_Q69woNz356P)s;}^k4!=*BXpr=@>0@Rv#Ex#~Mm*bkWezcRoBp0@hjq&&YlJit@y5uZ?axs2H?wF^0Q`v~&L{ zCub7;86VdJSzMIq5`y1_2Zv9?C)w6JbK!Su{TJ{aJ*NPYRL2f;Q)?W)PGdK-k#iXg zf+LymGza-z@^IImo*`6a&qm6jBR^FMrw`GjHvVMTLM2PeYj)oY6rOF_-4>n53o?g3 zzQKrMDZ74exf2n-Dp!)Q;4LZ|j^~}mY;fqmwtjPfSZ=!Qj8p;tz0wGkv^ws4l{fL^ z7kM<#em%sS3%=%nGD>r1?<6hs5<#@VV5Kd|tCdIf+n!7FGh}YHk^TN5#OB4yum`U! z{wMET?SM4rvI*C@T?RuEXlQ7B4iABJ5B6DEw4ovRe;k&4cW=B8sxk47WjzT*f;M}+ zJ?Z`IDe&~eULvb&YsXUwC-^AF!8k_MbEI05x6kTbToN#$VGuoXSNh3_PAmfn-26A) zyD*B&hK@4B6sI)iXJ}Lt@29!wnHV7H=qwM6T9uC&x=fdGGq<}?)tv*DmzU8M6cr?~ z|Li00OF{)7r0?RBc*054CkN8-$00W38Z|zzJ;JcqM;0Ji=45nk!?k&=mc1m}0H! z!kj(eVr~#oPE)ea4*b>|)k^172w-HVGircd{^~p;1@5Kqhst!9$jlkoW(G~12gWlW zKvTUMAmhUCXeoJczDhl;s1lG!*p*V>RMXOIaxL>}Z-N-@D$hWD1`6g?g@qD|=5MGa zS@L^{$^lgX>&WOR2NMfRGb=m$Vf?bscGX%-p*!*uUHXPEm838J8#d+4ktz>f=I9!P z-OUF@eZ#(m4~(w7+IyFbjEqR|sDv8v%Y|4iYr4k(BXhc@IMZgTuC5NMW4e3BqhlET zJO>mp8h<~Z7$F6`Fc{xZYE7Ka-!K{F@0?`^PFgkQojTJ;NK-`1M_(==4p)VyglF#Ncsx%ElHerVOH=&i;?TS*PKjOigJ zqwSm;p6OImibs2Ud%5{>1eQGVw;@$&0xAZ)R`X7{7{HpWo_74w{>hiTVRo=vXmX(!-19tO~TwPryJv^GA+7FN_ zKIqITB

executed

fallback

C client

Public interface
structured request and result

engine route
only execution policy owner

vmkv
read and compile RWIR

immutable BinRWIR Program

vmjit try

vmbin fallback
only correctness executor

route commit
effects and checkpoint

kvspace
authoritative facts

\ No newline at end of file +

COMPILED

NOT_COMPILABLE

ERROR

VMJIT target

VMBIN target

myrwircaps and RWIR specification
stable operation identifiers

vmkv
validate and emit equivalent canonical BinRWIR

top-level binrwir
immutable canonical Program

top-level BinRWIR Compiler
build execution plan

compile-time target decision

COMPILED
VMJIT compilation with machine code

NOT_COMPILABLE
VMBIN compilation without machine code

ERROR
stop immediately

compilation repository
cache complete compilation

engine route
read decided target before execution

vmjit_execute
execute generated machine code

vmbin_execute
execute canonical semantics with plan

route commit
complete effects and checkpoint

kvspace
authoritative recoverable facts

\ No newline at end of file diff --git a/runtimec/documentation/architecture/rwir-binrwir-aliasing.mmd b/runtimec/documentation/architecture/rwir-binrwir-aliasing.mmd index 6eebcf3e..8fdb248e 100644 --- a/runtimec/documentation/architecture/rwir-binrwir-aliasing.mmd +++ b/runtimec/documentation/architecture/rwir-binrwir-aliasing.mmd @@ -1,38 +1,52 @@ flowchart LR - subgraph Contract["RWIR and BinRWIR contract"] - READ_REGISTER["Register a
READ capability"] - WRITE_REGISTER["Register a_out
WRITE capability"] - ALIAS_RULE["Alias Rule
MUST_ALIAS read 0 and write 0"] + subgraph Specification["Specification identity"] + CAPABILITY["one myrwircap record"] + RWIR_IDENTIFIER["explicit stable RWIR operation identifier"] + CANONICAL_IDENTIFIER["one canonical BinRWIR operation identifier"] + SIGNATURE["Read and Write signature plus alias policy"] + CAPABILITY --> RWIR_IDENTIFIER + CAPABILITY --> CANONICAL_IDENTIFIER + CAPABILITY --> SIGNATURE end - subgraph Call["Call binding"] + VMKV["vmkv equivalent emission"] + + subgraph Canonical["Top-level canonical BinRWIR"] + INSTRUCTION["instruction operation_code
stable canonical identifier"] + READ_REFERENCE["Read reference"] + WRITE_REFERENCE["Write reference"] + end + + subgraph Binding["Execution binding"] READ_BINDING["Read Binding"] WRITE_BINDING["Write Binding"] CELL["Canonical Cell
value and mutation version"] end - subgraph Stream["Partitioned BinRWIR references"] - READ_BEFORE["array.get
Read a and i; Write x"] - WRITE["array.set
Read j and x; Write a_out"] - READ_AFTER["array.get
Read a and j; Write y"] - end + COMPILER["BinRWIR Compiler
plan preserves dependencies"] + EXECUTION["vmjit_execute or vmbin_execute
same observable ordering"] - READ_REGISTER --> READ_BINDING - WRITE_REGISTER --> WRITE_BINDING - ALIAS_RULE --> READ_BINDING - ALIAS_RULE --> WRITE_BINDING - READ_BINDING --> CELL - WRITE_BINDING --> CELL - READ_BEFORE --> WRITE --> READ_AFTER - CELL -. "read current version" .-> READ_BEFORE - WRITE -. "write and increment version" .-> CELL - CELL -. "later read observes write" .-> READ_AFTER + RWIR_IDENTIFIER --> VMKV + CANONICAL_IDENTIFIER --> VMKV + SIGNATURE --> VMKV + VMKV --> INSTRUCTION + VMKV --> READ_REFERENCE + VMKV --> WRITE_REFERENCE + READ_REFERENCE --> READ_BINDING --> CELL + WRITE_REFERENCE --> WRITE_BINDING --> CELL + SIGNATURE -. "explicit alias permission" .-> READ_BINDING + SIGNATURE -. "explicit alias permission" .-> WRITE_BINDING + INSTRUCTION --> COMPILER + READ_REFERENCE --> COMPILER + WRITE_REFERENCE --> COMPILER + COMPILER --> EXECUTION + CELL -. "later Read observes ordered Write" .-> EXECUTION + classDef specification fill:#fef3c7,stroke:#d97706,color:#451a03 classDef read fill:#dbeafe,stroke:#2563eb,color:#172554 classDef write fill:#fee2e2,stroke:#dc2626,color:#450a0a classDef shared fill:#dcfce7,stroke:#16a34a,color:#052e16 - classDef rule fill:#fef3c7,stroke:#d97706,color:#451a03 - class READ_REGISTER,READ_BINDING,READ_BEFORE,READ_AFTER read - class WRITE_REGISTER,WRITE_BINDING,WRITE write + class CAPABILITY,RWIR_IDENTIFIER,CANONICAL_IDENTIFIER,SIGNATURE specification + class READ_REFERENCE,READ_BINDING read + class WRITE_REFERENCE,WRITE_BINDING write class CELL shared - class ALIAS_RULE rule diff --git a/runtimec/documentation/architecture/rwir-binrwir-aliasing.png b/runtimec/documentation/architecture/rwir-binrwir-aliasing.png index be3b37d89251815f17463ffb30a5e8d2b21c6008..6140cceaa5aa49e1ca68d448531f592190981a8d 100644 GIT binary patch literal 115379 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

4!-kwnA|p(3o? z?m4XX8!QzM9QjV3y!zKGf$E~*^M@_u0*W_5TSAaOQO>e_1PbfyN_Q?44?Dk>7J5@! z-@fZ?H;cwcb~@QSKR>?#Xf-EBgUO~u;^Kan*5IltR0yAoy!EOyvmfY0Y9Nbp5EcSq zYHm&#zR$?rKMP@`)}>ao{9z?ijhYSbd(iOAGz%*sG9|FFJW7a?^?qUB1rFO>`@a7E z#?Wosg!>Db7G58}rd-kWoL8aNk;&O`L&?%`OzG*$+kT`6DC{k@iJDOe8uL`p+Zx zo9B3V6C#auF^it>3;&`Ke#Z4xbGh?yih6=!PaEm+&cHmVTKR#Suhd0U9TsN8R{;oa zH_Q9ZD{8JE06lK7rp|r zvOje^=Uoq%G{SX?VQh#^kB+#TrH8V*T4C5`Mxe~0Jt7;m0Z^GB5OVuj zdmn9Xthp)2ipJP)!rmPr>8dsOJhMOa#}e-S#GIKjY}=(_YPSCHJpyAGS70HDmcX~V z6o2K9pogrsxpA$;X)yb66v#c40fhi`8FZkqFx_(&Cj}jlWE78$gcj z)E|y0^j*a|v1Smh5~Mz=Q-kdj`PUGw3;Y`R2gGE^e`-4>9lBv!~;4QwO?^iS(7X63&-l0bf6%w9*agvWVkP zk|4Ts=B%qW*ofTufa%FtUyic_Em4_tP;YmUWgyc1Ao`5^6W=X(qXcy8rKUs>OBpGC zwXfQ{hH$zLe8E57rTqf=qeC|xw1t1=2bccdjMup0T8$))2dnd!_a0eI)C0+%azu9X z=g-KdS#)Zu@ikYTW-6nAN#!fds$l=4!R>?PV>M*Ptb0EeW2H!f;OH5AI?d}Z+N3+P zsSXx$RkhgapUF8ju$qY8@k;Nb2Hvn zM$lQdEsHwzH0;wXwOJ_R&MQ|KM;sWVcDC*5+H*sS`7yl9el1JTVX^=D>HDAmdCC6# zj!yQ{AGg{6|F?A~0Bkj`t2yNQ+BE@r&X*kE!DiE_b289wZox24Pck5>n#sw@$>V4> zvW9}9|Ciwq`FnLOu)&R$%m;q%cy?>KZL@S2%`GLUim+HKc3;K#Hj(Ir86j3q9lzoy zvGvDO9cY_!a5^O>tjy2fg1D)OQ!4uq)e7KgF1g(wZ`wN!R$d0PT3c?kjA#1w&?9#; zT853Sz!Js&J14(P7o>2z_U-dn(Y>w~SJnkq_9-9J{<6KLo^$6~5^HWJCLS;&#emOe z=o0kPS=HXVXHvt4+(T_sPirKO`wXcF%cVh8)Qf``7AZ7*&uPf7y+Ur3>|r2RPSkDB zl#h9dGry5}E@`*^jT_Nd6hGe+h(oNzTm=l}-@?Cz?ZL?%WR0|5Pr?%} zN#q^aJ5%o1|IxB}Q>Wa?5n_z~fmi?AIpJF$o^d)|$ELd#a0M^pfhXXuMP>VpFfj&Ek(qbeHO5B-i1Om2(V|72%~baGAcS=l1z z`y*WyG^3V!W3xn4p2dZQ@F|iXN78fG9Wn+iQDVlv%)o9b``d zPa=bIoOr^ZDL~)2((c6WYHx+io9`tY_M@#^_jOkS!dse4Q?p-#RGF$r6p*6zj=y3T z9&#r`^u;bHrhlsI=jf>*x!tgiImPTIHwf5M$UP^sgEzJ@=2r(}P9hQ1ZUv-)LCXv^ z7v2MXET6_af~)d`S-RpNa!h~9Fm=m&9n_e>ujagY4mO$xEtGY43(&Q#_5oKgmTzNkv+D*$tPVp*47f#Jx=`x zhjr+l-BX@~ST)7+CI{^89i{$WeQl^DGjh#VR!tmOhP1U#E}iMcqrJ3-dl7}A$9d%M9q_5sqO z^DkJWSFRVg#)u?|Ogvu(Rayisy#_Bpayk8Fa2eXQU+TWk808lX@89T+;lN3Q66ZyeljaBw)7e1N{z zw*+x<4&(t4)j!e@j^h@!arlIfxziBL1dpfq)I;75*Onw&D$6UsR48&j08E$(TUfk> zj}~N_G#1?D?W;dOcQZZMAGFkv@%rCh&}Bk7i{s0+o=3hcJ%MYJXDAZ-lTBiz-G{&n z@&^kbR6F$E?=9qi!pkuL?Ui6za4jxwsANN8cn5q?>t0GZgy0pTfgD;f_VZ@}uNnY7 zVCk1-IKF;N!h&q`P|m-9-09gKEDhgoT2i)?Zh$rYn(tr1dAEr(X=<4hSPbRJPoVBO zIPG*1;wW#9yy7S}CRZSaU^oXeO>0h4&U+9Gs%2L-rP{#ljHb}hShdVlq-%ei*CrFGCZhomQ=dTi=<$exq&mOihETxP z$WjSQ3atAx!oto~#1@@bYoJ2xJ*EXYtV=8XgGdiDQV(72SVg8#;)&CPDce_w3=p}w ze28jz0tH`2%GueuGk;iz`5n`^+RH|W+jVPsiK}2>i0mb!AwR6$}f;(WMuc+h%h!ZFsZ<8dLENS+%`O^_+?Bj*6v-A6tp zGF(!p@up6niDg{?oY)crQRqN^F*x6Lv;FJ_BwQoEcKviN0ru&jozHZby{=v@3HG3r ze?(PrA2+%#a(>{){P6P9uoxp<-S`y1&1GV#-WuEKj%wYz>7$*v>GVCJD#-CStxY8# zmyuN4ooCXYDkLF-79WNA>1W8 zSxLYzdG2oigcO#@dKRKGje?-GbQbwptXn zc>5jr*WHN&Mo{`ZDw-H@qqL znpZ&!F%0~S3H*m{zeG&IzA~otbbPi_0ag)*d(yuV*RaB1S`TIQp$<4 zX`#HRln^MQx|{m#wOMyY(!R2}sB14H55boYqJ&KyNA3a-CznJXWVh6WpS-EX_iQe0 z07dHGPqRb3%uoSjO`HoQV(q2VYX55V6JQtsYvmfHd6TSc=SP_17nl(a zZ^a+)1V>8YU~zQN(5&D)rfHzLO2DDt1o~+ET3bsmim@1rnsCM}N#;T@%;MWTmB$%Tksp+wr z9m`{l8v7mP+#c7%um(}T)vM4`tqoh$d;%%4*4m=32|hv2_c{m-(x5Kg<<$ee4YT>B zCDjv089{fl%>2(kx5rhV;x1eO++QYI;2bcz^+N-eL-xcccAa*;{%Xd)+ zMcCWU(6)VjYHAxx=GAP|n$Vz%IzY>-Scb6d`?q1&y_$!I(Lo};_d!2H?-Ly3WHi-k z=KgtEb;RF&TF!asg-w{6{d!KhrD1j4s9jQ^JT=z4*jl*ODiMd@45S&QM?aVwqQ!bc zUibZ$>LN?Q;SMRJ0;!PrgJQ^vf^I8gJCk326$VaOg4gsfc|d%YOlTjXyH>1dojGRx zJ~RksSoy~AIatuM>f=S1{NSfgiA(eIUh0=-Upx&7$v1qPf9zvfx+6sy({_S57hKt(CbdPVH zLdkf*(96PLJ_7qLW?IcUbKF?ik%56>YKt^+QTf-EtJ$XL8Z`Y(0V_F5 z9r*C!gE*Ijlk8FC;_K90x2km6lkn(10GDOc^~tu3m(mi~jRz9{su7=QwO6(oI?D>P zp{zh%ddw1;e?L8Adbyix`e#ggB`dT}u^D2vqN zUN#Wca0Tj;P(*5S!Q$!nVRX2uFF|N8N1I@u&t6W^_beyvzP-9xMq35aD%)pS8lmsX zQ(%kjLkE^4s7OJD0@ZlpLTYHz{3 z80&@yB3BW3#Jf!pyIY3N^)1T~4fjew=CXqaUrFoe_Tt|7M*b&_phT>2}}&hMvxA zd$h1xO9g-(9`O>+rnQ&9nv{E!rd&ieM;E@%F)k1Z!Hbg2K*{SfS{wHBFS55G8NEdphZXDirQ+Ck>N0F>+6+q zlUPi`i7$N#=pcr+3{`t8#@h>bpcp^@GY7E`=zWq&d;7L;-~Mw;?=cdI z`1SXP#I&ud2hEHIXUkUww2I1#ejnGRCqMH{`4H9?)ki_)=g(b(fUah66#e6wcbTP+ z1^(9jVG)T%sZ@=@fq@~{D-@N6Z3hk=`UsGU=HHSTDVB~pA>m3#Lm|)uPrch!(XY4p;Oy$Jp%XXdfvAh~;`Yl5=e9I(LAR zb4IBAyf8gEG%ilb>k40q#?0ubtE{ACk087wRKTg7U;}~s;}uRNwO$5m96QJoo>sc! z@v&wg&N-zzEr`6=71~g$U|G{(EF$bHNGxEtuW&GP~h-CXw z>i7An7@TF%pu@^vA((X*w?=m2^Cfd4G;ctUE{K@*8$;)Ez}mAu8sZ#3AFwKhUzzFr%|yW4ug>2D<;=%*a-cpG zm2o~~o^)`gv_wwAAO+VFZ1hnofZJ_x&K~UmIi~*lwcnbmUa31J1p_^#-Aw@p$hTV< z8(s!0aK1sl8QKYh`l1b6-xhO%Jd^S>5%7MVs0+>{67OYJln)HtJ9klgv>u|TU=7!e z*9GHGSD+KKv>OHe*HytvbZo`-$u5o9R^0kZ|8w!98jv<*KiF*s4B#vm68ixut`5(f z4d*k|;)b45!Of))-Y4VM3%O&IWv;YC{KrGbpRjYtE9_Vu2`<4!VaN? zwP!Z1z^w+8Aov5^R5e2~E#bX|nlf-}xxxP&V&O!gP%ubA0;HJ`VJ)<@+&zvUq@7u$ zcTf?3=q*OOGdL@NhOFCQNGn0Q6r8_XB0NMdI2<7J+o1g6yOSsq8+poeK7`i;7GYO8 z{U)@arvqtPO|fE1pIUFmilUJ64`yU#g6pd6eh>#U*GjUfE+Zb$hd)?AU`^`5lQ%Na zG}DhDmIQ3>`qm5Z_|NP=Sq9Ze<-`}hErWxH9Cy1hGWgMjC7o6qx)plFThzWw^fjm0 zB~T)jrB%i_Pc-X)XX*-pG)pA_qj}0KH`_JPA3(R(HFzgrC%d4YA%Z#M+B4$)DLKF= zb^Bx9Ysjbe7H4Exw|ZbmwOW{X@1-H%$6IZP43w362xc?(@-MomUBj7FLD@0e6Py`Cdcv<(wtojBBdm}P zCgNv@AZHL;djLfYe9GeD{V1pwL{O%5zG%$js*e5n z?kFa_nwN9l1(IaSSGjIhI*RGN^;WNTju|LW@82O;RupBV6bo4SpR^;v#WdFLK?!+7ke;sFQwGI z6eP}^$!z)dnv3}#&ufrwhfvORpa}jOEvf2dcSQ$F%j^36R)~=GF0AU<7^jl{22IIS3BS|9F z6L4hrtx+tj@7x&~%7qYn*7;{!@2%^VxuFDzIx|#D+KjU|1x^AGA|!VWVCRHoj7)CC z1q(J9K6M+!ZTBO0LclF2f?p#f7eYVVcg4fG8FJAY!-lUN3PeBlAPztxe|jbiS`*Ov z80@ojc*L+az(1(+f$iiciQABe#y0=q8szXK&jkASDebFEcu~Q0(hl!q*ryN>Uy$=c zWQMRYt1XST_K+TbjTskguxLi@8(1|73W-3;w|to9eNl0Te&oWqpPnl_nl>)VSHkQz z)UF~qu76M(ngN=tRk<;YX<(ucI}8m$okjCnooCb9Jn`5Urqf5wkUX$jXDxUOXR87G zMZn=mUDsTRz)c6f+h@`MEboq&Y8QhYB-fz$3PL3Bo%JOXKLRjl^X1vi3q)&(W+?Sp z9_AFERe^K7fk@6r2k0XSv5NJ1#pYklVWvXn)#vvcs0Y~CtTxY79sMFub}2%ST)}m` z7T+-b>BigRuM;%gu+;f9*h9GwjsPFp^69qWpv;^Cd%|0xh~XT4VQm40#30H^TXQtk zpond)WlgoDcde$hxxb$>odv^@y5Z0C#59JS07Ym43>fQn_4FJD*o$ahQrnpN)Y%M5 zCn4qVPiOYb5@gm6C{{T=IJYdJ)4L`rXaf4L1SW(+opa@Timm+Oe4L2dI?Uu_NeY%9a zxOkArjAbs$hA|zKCq`_VUGWb`F^sZ9@h&S;SZSN-?FAA45L`v#TMgX6thFfF{qqj? z?lV{-K~?ua?pK`98pF?WTD8JN^wzf%Phs87OZMaT^e(?~tv#%P-_ssHzv+p6x#;i+ zM6Op@g$%VI-GO~T*r2Gc>{%G6K-!H_>umub)xPR6i;e0l9q5*Ld*#X%hu!O$h+wDI ze^@h3xzpq!TJzIwThO4^l@3G41UmeLmFo-x3Yb>OMkrxC{sC{{D-cTiU8{S|?Q(_E zhhfhum2evHx&&8RCpYFt^vi{(Xt6`~3KBmWZL8K)=aTU`6~=V9$qXDf98?I8x5ydW z*ds1QzqxaasM%Z+Fbw$(n0TpNM4?(x^8lw@$<@$sh4s*buZ$GUn8j5%5FV5+nbmFx z`&wLris=dEgeP%;KR$5xOGs1jFa^-BX?U2%Px8Kps7$wiX+T|9MW?35{}@oWQP5{b zL7!sx{SDHlTpF14BgW4Vi9WepNSV{?oOXi-EiGW9d& zuF8~>Zmpj#w`4(gS(yYy2$ni1|5=G)ka!>JwwW8sPB(J-eCKnIUC&H{NZzFtq^~$5 zIB04=O4j*xiJ0)h-g;DBWKxt_ayZ6{ZT{JZWuE=L>15xK5(|w8Z z`9KP)#>2q449MVz>SyE|*Mhpu;awSDdUM|tU#)(prU&jzGZbF6#ju{<`|LS&^PLVn z#&WZgL>bSnG9Tp9Bavhkm>$v|L_cRcP!W^oQtP!)1Sljl%4j=4fIG_wG7Z$x4a$+( z>T-f8HHwMOWmpRR*iAA?aXNeZh5LD7Z`JRhzr{?1X~0_``_Ghf#1Tw^e%*;6xWn6{ zKWw(;u~t^Nd58a!KVBzMKa*-oJVL%cQEE}-Ey69Va^Y*MVH?xU!AasdIfj^;mn2II zZoVV&Gkb(%YbW91l*t@h3x#o@Nxu}o2#u*fpJHM;?T3--I)_<0DfbjfzYLx^@nBN< z1GH5cRmW!Len5N;WCE}wHHi;-Fl-hXuw-;DaDC}H*d>z#DZbx_hZS;3&gU~oA~)y2 zHnD+*(rLC?f_t-HEieJo~XSAE_Aqbp9Q($KkD(oJF^-7A5=t zN=#FJlLfJH6((YgPMzp(Oq#zvD<|ja);(Wm#juby|Jk>yDfR70h?JSM_!*tdTb6uh z9LD0c1=}lsGBwu3<33ilI*nPy9m2T!OF{glv4-5Tj|XO9vZHc zL^dd_wXjAW7oDs?|k1`F`=-`ApHS>ufTxB-%*y5(%75@`xdjd~AWR61%e;Gog8g(ghw{)B$hyHiyV!5ZbU;ANF=e;QBz7ln)tuG@X zoPhHAj6Qh^lOhxGYgU0sTi90~r~x}!3D)exB~7fiy_o;HbKWwjaCFO^EU~5VB0a@; z3@wKWL6-wVg!7rWF2slr*l?ll*nIi?vJ=aPa;go&EoszAC zIpu*`~8-tFN40n3b;15@pWjawV@G+|J82>v`#0a0TIMiM@$hH6CUCzZbBARB+GYl zsf15#BLLLqf}&riAjK(DCuz8C4MIxv5e|VO=ROlWSdJ5)dBSd5D8YW#r1DmOnd4T0B27=dc;kAqu&BOk6LYIW+U0s`vWOsJiC~l|3d_|zXNLH zncir)TSZcQx9mVkN!aZ85EF4tKTK(FG6D@+bY^$zK>+mZ5;SSuVG8Qq!sv~|_Ab0A z(~tkdXay94DHPfseI@c{r8CalQj1|MCDt$8`%hO8hicFy&+rhDgrPE78i?t9#$T)d zW(aIIA1d(+Lrf1ynZ)$Hv9}Q>J9#FO-pTQ{X9qNf3V8$o@Z@;gsnWv^GF$PG$%iR9 zwlP1-LU>Jg{mzJGOZ=K{$;i-lDo`Mn}bu0j)aeQo57e!cKS;ct?5783#YjfZS#V^aa+6bO=wu`jFlxz0)Dlcov^3hu*^ zf&5WU>& zYq}_5C52Fcq53W{?TYou+zJ zpFB)eVzwWtOEj$UiNOWx!R6BBfnIDY?ORR`HDY?vy%DqqP>&9sC?X(uK&`GOb#$%j%+gzkkSx*G@lu9>7~>{3#HlD|LDtjFIH$}gjO)s zhv!KQYF^WY1S9{&n`WRgGlWW`5D#iRTzVJ*ctzLEfIX#?3zQ|CL)B56p$$S~EuJ5~ z&xj9l?zFV5SxEitT;z~2G*+gw++HwlQ3hd)X#6MH(&ÐN!&`Pmhk%DAi#m~A1VA%noA-db$x3kRI@A<&!b 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

>b;lSbdhfD%|NxCp^BvBt>5 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

*fq%Y+4tReO|Vxv%` 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 literal 79991 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%0D0l^*T>^=jAIvKkc5SD5?T|EC3{KbO|6sg!H` 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 diff --git a/runtimec/documentation/architecture/rwir-binrwir-aliasing.svg b/runtimec/documentation/architecture/rwir-binrwir-aliasing.svg index 06315198..66b89521 100644 --- a/runtimec/documentation/architecture/rwir-binrwir-aliasing.svg +++ b/runtimec/documentation/architecture/rwir-binrwir-aliasing.svg @@ -1 +1 @@ -

Partitioned BinRWIR references

Call binding

RWIR and BinRWIR contract

read current version

write and increment version

later read observes write

Register a
READ capability

Register a_out
WRITE capability

Alias Rule
MUST_ALIAS read 0 and write 0

Read Binding

Write Binding

Canonical Cell
value and mutation version

array.get
Read a and i; Write x

array.set
Read j and x; Write a_out

array.get
Read a and j; Write y

\ No newline at end of file +

Execution binding

Top-level canonical BinRWIR

Specification identity

explicit alias permission

explicit alias permission

later Read observes ordered Write

one myrwircap record

explicit stable RWIR operation identifier

one canonical BinRWIR operation identifier

Read and Write signature plus alias policy

vmkv equivalent emission

instruction operation_code
stable canonical identifier

Read reference

Write reference

Read Binding

Write Binding

Canonical Cell
value and mutation version

BinRWIR Compiler
plan preserves dependencies

vmjit_execute or vmbin_execute
same observable ordering

\ No newline at end of file diff --git a/runtimec/engine/compilation_repository.c b/runtimec/engine/compilation_repository.c new file mode 100644 index 00000000..cad936b5 --- /dev/null +++ b/runtimec/engine/compilation_repository.c @@ -0,0 +1,90 @@ +/* engine/compilation_repository 的失败封闭骨架。 */ + +#include "engine/compilation_repository.h" + +runtimec_status_t runtimec_compilation_repository_create( + runtimec_allocator_t allocator, + size_t capacity, + runtimec_compilation_repository_t **output_repository, + runtimec_error_t *error) { + (void)error; + if (output_repository != NULL) { + *output_repository = NULL; + } + if (!runtimec_allocator_is_valid(&allocator) || capacity == 0U || + output_repository == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t runtimec_compilation_repository_destroy( + runtimec_compilation_repository_t *repository) { + if (repository == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t runtimec_compilation_repository_find( + runtimec_compilation_repository_t *repository, + const runtimec_compilation_repository_key_t *key, + runtimec_compilation_repository_lookup_result_t *output_lookup_result, + runtimec_compilation_repository_lease_t *output_lease, + runtimec_error_t *error) { + (void)error; + if (output_lookup_result != NULL) { + *output_lookup_result = RUNTIMEC_COMPILATION_REPOSITORY_LOOKUP_INVALID; + } + if (output_lease != NULL) { + *output_lease = (runtimec_compilation_repository_lease_t){0}; + } + if (repository == NULL || key == NULL || output_lookup_result == NULL || + output_lease == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t runtimec_compilation_repository_insert( + runtimec_compilation_repository_t *repository, + const runtimec_compilation_repository_key_t *key, + binrwir_compilation_t *compilation, + runtimec_compilation_repository_lease_t *output_lease, + runtimec_error_t *error) { + (void)error; + if (output_lease != NULL) { + *output_lease = (runtimec_compilation_repository_lease_t){0}; + } + if (repository == NULL || key == NULL || compilation == NULL || + output_lease == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t runtimec_compilation_repository_release( + runtimec_compilation_repository_t *repository, + runtimec_compilation_repository_lease_t *lease) { + if (repository == NULL || lease == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t runtimec_compilation_repository_invalidate( + runtimec_compilation_repository_t *repository, + const runtimec_snapshot_t *snapshot) { + if (repository == NULL || snapshot == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t runtimec_compilation_repository_clear( + runtimec_compilation_repository_t *repository) { + if (repository == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/engine/compilation_repository.h b/runtimec/engine/compilation_repository.h new file mode 100644 index 00000000..b5607144 --- /dev/null +++ b/runtimec/engine/compilation_repository.h @@ -0,0 +1,92 @@ +#ifndef RUNTIMEC_ENGINE_COMPILATION_REPOSITORY_H +#define RUNTIMEC_ENGINE_COMPILATION_REPOSITORY_H + +/* + * 组件:engine/compilation_repository + * 作用:缓存完整 BinRWIR compilation 并提供租约。find 只查询不可变 + * compilation;insert 只接收 BinRWIR Compiler 已完成的 compilation; + * release 归还 lease;invalidate/clear 撤销新获取资格,但不得释放仍被 + * lease 持有的 compilation。 + * 联系:route 在编码和编译前查询,在 BinRWIR Compiler 完成后插入;lease + * 保证 canonical Program、执行计划与可选机器码在执行期间同时有效。 + * 约束:repository 只持有 compilation 的所有权、租约与索引,不调用 vmkv、 + * vmbin 或 vmjit,也不改变已确定的执行目标。 + */ + +#include "compiler/compiler.h" +#include "contract/allocator.h" +#include "contract/snapshot.h" +#include "contract/status.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct runtimec_compilation_repository_t + runtimec_compilation_repository_t; + +typedef struct runtimec_compilation_repository_key_t { + runtimec_snapshot_t snapshot; + uint32_t rwir_manifest_version; + uint32_t canonical_encoding_revision; + uint32_t binrwir_binary_interface_generation; + uint32_t compiler_revision; +} runtimec_compilation_repository_key_t; + +/* + * find 只在调用期间借用 key 中的视图。insert 必须深拷贝 function key 与 + * logical program counter 字节;lease.snapshot 的视图指向 repository + * 拥有的不可变副本,并只在 lease 释放前有效。 + */ + +typedef enum runtimec_compilation_repository_lookup_result_t { + RUNTIMEC_COMPILATION_REPOSITORY_LOOKUP_INVALID = 0, + RUNTIMEC_COMPILATION_REPOSITORY_LOOKUP_FOUND = 1, + RUNTIMEC_COMPILATION_REPOSITORY_LOOKUP_NOT_FOUND = 2 +} runtimec_compilation_repository_lookup_result_t; + +typedef struct runtimec_compilation_repository_lease_t { + const binrwir_compilation_t *compilation; + runtimec_snapshot_t snapshot; + void *token; +} runtimec_compilation_repository_lease_t; + +runtimec_status_t runtimec_compilation_repository_create( + runtimec_allocator_t allocator, + size_t capacity, + runtimec_compilation_repository_t **output_repository, + runtimec_error_t *error); + +runtimec_status_t runtimec_compilation_repository_destroy( + runtimec_compilation_repository_t *repository); + +runtimec_status_t runtimec_compilation_repository_find( + runtimec_compilation_repository_t *repository, + const runtimec_compilation_repository_key_t *key, + runtimec_compilation_repository_lookup_result_t *output_lookup_result, + runtimec_compilation_repository_lease_t *output_lease, + runtimec_error_t *error); + +runtimec_status_t runtimec_compilation_repository_insert( + runtimec_compilation_repository_t *repository, + const runtimec_compilation_repository_key_t *key, + binrwir_compilation_t *compilation, + runtimec_compilation_repository_lease_t *output_lease, + runtimec_error_t *error); + +runtimec_status_t runtimec_compilation_repository_release( + runtimec_compilation_repository_t *repository, + runtimec_compilation_repository_lease_t *lease); + +runtimec_status_t runtimec_compilation_repository_invalidate( + runtimec_compilation_repository_t *repository, + const runtimec_snapshot_t *snapshot); + +runtimec_status_t runtimec_compilation_repository_clear( + runtimec_compilation_repository_t *repository); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/engine/engine.c b/runtimec/engine/engine.c deleted file mode 100644 index 9eaf4cda..00000000 --- a/runtimec/engine/engine.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - * 组件:engine 的 scaffold 实现 - * 作用:session 与 Program repository 的 fail-closed 入口;输出指针 - * 一律先置 NULL,不伪造空 session/空 lease。 - * 联系:公共接口的 Connect/Bootstrap 调用;真实实现建立显式 owner graph - * 与 lease/generation 语义。 - */ - -#include "engine/program_repository.h" -#include "engine/session.h" - -runtimec_status_t runtimec_session_create( - const runtimec_host_services_t *host_services, - const runtimec_session_options_t *options, - runtimec_session_t **output_session, - runtimec_error_t *error) { - (void)host_services; - (void)options; - (void)error; - if (output_session != NULL) { - *output_session = NULL; - } - if (host_services == NULL || options == NULL || output_session == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} -runtimec_status_t runtimec_session_destroy(runtimec_session_t *session) { - if (session == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} -runtimec_status_t runtimec_session_get_host_services( - runtimec_session_t *session, - const runtimec_host_services_t **output_host_services) { - if (output_host_services != NULL) { - *output_host_services = NULL; - } - if (session == NULL || output_host_services == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} -runtimec_status_t runtimec_session_clear_derived_state( - runtimec_session_t *session) { - if (session == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} -runtimec_status_t runtimec_program_repository_create( - runtimec_allocator_t allocator, - size_t capacity, - runtimec_program_repository_t **output_repository, - runtimec_error_t *error) { - (void)allocator; - (void)capacity; - (void)error; - if (output_repository != NULL) { - *output_repository = NULL; - } - if (output_repository == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} -runtimec_status_t runtimec_program_repository_destroy( - runtimec_program_repository_t *repository) { - if (repository == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} -runtimec_status_t runtimec_program_repository_find( - runtimec_program_repository_t *repository, - const runtimec_program_repository_key_t *key, - runtimec_program_lookup_result_t *output_lookup_result, - runtimec_program_lease_t *output_lease, - runtimec_error_t *error) { - (void)repository; - (void)key; - (void)error; - if (output_lookup_result != NULL) { - *output_lookup_result = RUNTIMEC_PROGRAM_LOOKUP_INVALID; - } - if (output_lease != NULL) { - *output_lease = (runtimec_program_lease_t){0}; - } - if (repository == NULL || key == NULL || output_lookup_result == NULL || - output_lease == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} -runtimec_status_t runtimec_program_repository_insert( - runtimec_program_repository_t *repository, - const runtimec_program_repository_key_t *key, - vmbin_program_t *program, - runtimec_program_lease_t *output_lease, - runtimec_error_t *error) { - (void)error; - if (output_lease != NULL) { - *output_lease = (runtimec_program_lease_t){0}; - } - if (repository == NULL || key == NULL || program == NULL || - output_lease == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} -runtimec_status_t runtimec_program_repository_release( - runtimec_program_repository_t *repository, - runtimec_program_lease_t *lease) { - if (repository == NULL || lease == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} -runtimec_status_t runtimec_program_repository_invalidate( - runtimec_program_repository_t *repository, - const runtimec_snapshot_t *snapshot) { - if (repository == NULL || snapshot == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} -runtimec_status_t runtimec_program_repository_clear( - runtimec_program_repository_t *repository) { - if (repository == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} diff --git a/runtimec/engine/program_repository.h b/runtimec/engine/program_repository.h deleted file mode 100644 index c0ee1032..00000000 --- a/runtimec/engine/program_repository.h +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef RUNTIMEC_ENGINE_PROGRAM_REPOSITORY_H -#define RUNTIMEC_ENGINE_PROGRAM_REPOSITORY_H - -/* - * 组件:engine/program_repository - * 作用:Program 缓存与租约:find 只查询不可变 Program;insert 只接收 - * route 已完成编译的 Program;release 归还 lease;invalidate/clear 按统一失效 - * 模型撤销新获取资格,但不得释放仍被 lease pin 的 Program。cache key - * 至少含 store 实例、函数、source revision、 - * schema、instruction set architecture、compiler revision 与 - * BinRWIR binary interface 世代。 - * 联系:route 在编译前查询,并在 vmkv 编译后插入;lease 保证解释、vmjit、 - * call binding 期间 Program 不被回收。 - * 约束:Program 内容归 vmbin;repository 只持有 lease 与索引,绝不调用 vmkv。 - */ - -#include "contract/allocator.h" -#include "contract/snapshot.h" -#include "contract/status.h" -#include "vmbin/program.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct runtimec_program_repository_t runtimec_program_repository_t; -typedef struct runtimec_program_repository_key_t { - runtimec_snapshot_t snapshot; - uint32_t rwir_manifest_version; - uint32_t binrwir_binary_interface_generation; - uint32_t compiler_revision; - uint32_t reserved; -} runtimec_program_repository_key_t; -typedef enum runtimec_program_lookup_result_t { - RUNTIMEC_PROGRAM_LOOKUP_INVALID = 0, - RUNTIMEC_PROGRAM_LOOKUP_FOUND = 1, - RUNTIMEC_PROGRAM_LOOKUP_NOT_FOUND = 2 -} runtimec_program_lookup_result_t; -typedef struct runtimec_program_lease_t { - const vmbin_program_t *program; - runtimec_snapshot_t snapshot; - void *token; -} runtimec_program_lease_t; -runtimec_status_t runtimec_program_repository_create( - runtimec_allocator_t allocator, - size_t capacity, - runtimec_program_repository_t **output_repository, - runtimec_error_t *error); -runtimec_status_t runtimec_program_repository_destroy( - runtimec_program_repository_t *repository); -runtimec_status_t runtimec_program_repository_find( - runtimec_program_repository_t *repository, - const runtimec_program_repository_key_t *key, - runtimec_program_lookup_result_t *output_lookup_result, - runtimec_program_lease_t *output_lease, - runtimec_error_t *error); -runtimec_status_t runtimec_program_repository_insert( - runtimec_program_repository_t *repository, - const runtimec_program_repository_key_t *key, - vmbin_program_t *program, - runtimec_program_lease_t *output_lease, - runtimec_error_t *error); -runtimec_status_t runtimec_program_repository_release( - runtimec_program_repository_t *repository, - runtimec_program_lease_t *lease); -runtimec_status_t runtimec_program_repository_invalidate( - runtimec_program_repository_t *repository, - const runtimec_snapshot_t *snapshot); -runtimec_status_t runtimec_program_repository_clear( - runtimec_program_repository_t *repository); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/runtimec/engine/route.c b/runtimec/engine/route.c index 52a1448a..e5fb76b7 100644 --- a/runtimec/engine/route.c +++ b/runtimec/engine/route.c @@ -1,15 +1,17 @@ /* * 组件:engine/route 的实现 * 作用:唯一执行策略入口;当前 fail-closed,返回 NOT_IMPLEMENTED 并 - * 把结构化 exit 标为 ERROR。 + * 把结构化 execution exit 标为 ERROR。 * 联系:这是唯一同时看到 vmkv、vmbin 与 vmjit 的文件,并且只有这里 - * 可以选择执行路径和提交 checkpoint。 + * 可以读取 BinRWIR Compiler 已确定的执行目标和提交 checkpoint。 */ +#include "compiler/compiler.h" +#include "engine/compilation_repository.h" #include "engine/route.h" #include "vmbin/interpreter.h" #include "vmjit/vmjit.h" -#include "vmkv/compiler.h" +#include "vmkv/encoder.h" runtimec_status_t runtimec_route_execute( runtimec_session_t *session, @@ -22,13 +24,13 @@ runtimec_status_t runtimec_route_execute( if (output_result != NULL) { *output_result = (runtimec_route_result_t){0}; output_result->status = RUNTIMEC_STATUS_INVALID; - output_result->exit.status = RUNTIMEC_STATUS_INVALID; - output_result->exit.kind = VMBIN_EXIT_ERROR; + output_result->execution_exit.status = RUNTIMEC_STATUS_INVALID; + output_result->execution_exit.kind = BINRWIR_EXECUTION_EXIT_ERROR; } if (session == NULL || request == NULL || output_result == NULL) { return RUNTIMEC_STATUS_INVALID; } output_result->status = RUNTIMEC_STATUS_NOT_IMPLEMENTED; - output_result->exit.status = RUNTIMEC_STATUS_NOT_IMPLEMENTED; + output_result->execution_exit.status = RUNTIMEC_STATUS_NOT_IMPLEMENTED; return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } diff --git a/runtimec/engine/route.h b/runtimec/engine/route.h index bac3b5c0..cd83d53d 100644 --- a/runtimec/engine/route.h +++ b/runtimec/engine/route.h @@ -3,14 +3,17 @@ /* * 组件:engine/route - * 作用:唯一执行策略所有者:取权威快照 -> 查 Program repository -> - * 未命中则 vmkv 编译 -> 构建/恢复 vmbin frame -> vmjit 尝试执行 -> - * EXECUTED 处理退出 / FALLBACK 走 vmbin -> 只提交成功指令的 + * 作用:唯一执行策略所有者:取权威快照 -> 查 compilation repository -> + * 未命中则 vmkv 等价编码 canonical BinRWIR -> BinRWIR Compiler 编译 -> + * 执行前读取 binrwir_execution_target_t -> VMJIT 目标只调用 + * vmjit_execute,VMBIN 目标只调用 vmbin_execute -> 只提交成功指令的 * effects/checkpoint -> 观察 status/source generation -> 继续、暂停、 * handoff、done、invalidate 或 error。 * 联系:只有 route.c 同时包含 vmkv、vmbin 与 vmjit;host port 只经本层 * 提交 durable effect;公共接口层把请求翻译成本层请求。 - * 约束:其它文件不得绕过 route 自行选择执行器或提交 checkpoint。 + * 约束:NOT_COMPILABLE 是已完成的编译判定并选择 VMBIN;ERROR 直接失败。 + * 执行期不重新选择目标。其它文件不得绕过 route 自行选择执行器或 + * 提交 checkpoint。 */ #include @@ -18,7 +21,7 @@ #include "contract/status.h" #include "contract/view.h" #include "engine/session.h" -#include "vmbin/exit.h" +#include "binrwir/execution_exit.h" #ifdef __cplusplus extern "C" { @@ -39,7 +42,7 @@ typedef struct runtimec_route_request_t { } runtimec_route_request_t; typedef struct runtimec_route_result_t { runtimec_status_t status; - vmbin_exit_t exit; + binrwir_execution_exit_t execution_exit; runtimec_string_view_t return_value; } runtimec_route_result_t; runtimec_status_t runtimec_route_execute( diff --git a/runtimec/engine/session.c b/runtimec/engine/session.c new file mode 100644 index 00000000..173edca4 --- /dev/null +++ b/runtimec/engine/session.c @@ -0,0 +1,65 @@ +/* engine/session 的失败封闭骨架。 */ + +#include "engine/session.h" + +#include "compiler/compiler.h" +#include "engine/compilation_repository.h" +#include "vmkv/encoder.h" + +struct runtimec_session_t { + runtimec_host_services_t host_services; + runtimec_session_options_t options; + vmkv_encoder_t *vmkv_encoder; + binrwir_compiler_t *binrwir_compiler; + runtimec_compilation_repository_t *compilation_repository; +}; + +runtimec_status_t runtimec_session_create( + const runtimec_host_services_t *host_services, + const runtimec_session_options_t *options, + runtimec_session_t **output_session, + runtimec_error_t *error) { + (void)host_services; + (void)options; + (void)error; + if (output_session != NULL) { + *output_session = NULL; + } + if (!runtimec_host_services_is_valid(host_services) || options == NULL || + options->structure_size != sizeof(*options) || + !runtimec_allocator_is_valid(&options->allocator) || + options->compilation_cache_capacity == 0U || + (options->enable_vmjit && options->machine_code_capacity == 0U) || + (!options->enable_vmjit && options->machine_code_capacity != 0U) || + output_session == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t runtimec_session_destroy(runtimec_session_t *session) { + if (session == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t runtimec_session_get_host_services( + runtimec_session_t *session, + const runtimec_host_services_t **output_host_services) { + if (output_host_services != NULL) { + *output_host_services = NULL; + } + if (session == NULL || output_host_services == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t runtimec_session_clear_derived_state( + runtimec_session_t *session) { + if (session == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/engine/session.h b/runtimec/engine/session.h index 9df1e69f..f2225489 100644 --- a/runtimec/engine/session.h +++ b/runtimec/engine/session.h @@ -3,9 +3,10 @@ /* * 组件:engine/session - * 作用:显式 owner graph 的根:host、vmkv compiler、Program repository、 - * frame/register/view 池、vmjit compiler 与 code cache、configuration、 - * generation 与 quiescent point。禁止用 + * 作用:显式 owner graph 的根:host、vmkv encoder、BinRWIR Compiler、 + * compilation repository、frame/register/view 池、configuration、 + * generation 与 quiescent point。vmjit compiler 与机器码存储完全封装在 + * BinRWIR Compiler 内,不是 session 的直接 owner。禁止用 * function-static、global 或 thread-local storage 隐藏这些 owner。 * 联系:公共接口层创建 session;route 在 session 上执行;多 * session/测试隔离都从本对象出发。 @@ -28,8 +29,8 @@ typedef struct runtimec_session_t runtimec_session_t; typedef struct runtimec_session_options_t { uint32_t structure_size; runtimec_allocator_t allocator; - size_t program_cache_capacity; - size_t code_cache_limit; + size_t compilation_cache_capacity; + size_t machine_code_capacity; bool enable_vmjit; bool observe_every_instruction; } runtimec_session_options_t; diff --git a/runtimec/include/kvlang/runtimec.h b/runtimec/include/kvlang/runtimec.h index dba4705e..0e7f5250 100644 --- a/runtimec/include/kvlang/runtimec.h +++ b/runtimec/include/kvlang/runtimec.h @@ -33,13 +33,12 @@ typedef enum runtimec_status { RUNTIMEC_STATUS_SUCCESS = 0, RUNTIMEC_STATUS_YIELD = 1, RUNTIMEC_STATUS_WAIT = 2, - RUNTIMEC_STATUS_FALLBACK = 3, - RUNTIMEC_STATUS_UNSUPPORTED = 4, - RUNTIMEC_STATUS_NOT_IMPLEMENTED = 5, - RUNTIMEC_STATUS_INVALID = 6, - RUNTIMEC_STATUS_OUT_OF_MEMORY = 7, - RUNTIMEC_STATUS_ERROR = 8, - RUNTIMEC_STATUS_INSUFFICIENT_CAPACITY = 9 + RUNTIMEC_STATUS_UNSUPPORTED = 3, + RUNTIMEC_STATUS_NOT_IMPLEMENTED = 4, + RUNTIMEC_STATUS_INVALID = 5, + RUNTIMEC_STATUS_OUT_OF_MEMORY = 6, + RUNTIMEC_STATUS_ERROR = 7, + RUNTIMEC_STATUS_INSUFFICIENT_CAPACITY = 8 } runtimec_status_t; typedef struct kvlang_runtime kvlang_runtime_t; diff --git a/runtimec/specification/README.md b/runtimec/specification/README.md index 2d0bf7fb..b1c901f5 100644 --- a/runtimec/specification/README.md +++ b/runtimec/specification/README.md @@ -1,18 +1,29 @@ # runtimec specification -本目录是 runtimec 语言行为与 RWIR 结构事实的唯一入口,不保存执行策略,也不把 -当前 C 结构、BinRWIR 编码或机器二进制接口冻结为长期格式。 +本目录是 runtimec 语言行为、RWIR operation facts 与 myrwircap 到 canonical BinRWIR +映射的唯一入口。它不保存执行策略,也不把当前 C 结构、内存布局或机器二进制接口冻结 +为长期格式。 - `five-language-behavior-matrix.md`:语言行为决策的唯一事实源。 -- `rwir_catalog.def`:RWIR 操作标识符、参数结构与行为决策引用。 -- `scalar_operations.def`:已裁决行为到标量执行族的映射。 +- `myrwircap-binrwir-mapping.md`:每个 capability 到 canonical operation 的规范合同。 +- `rwir_catalog.def`:稳定 operation identifier、规范名称、参数结构、canonical 映射与 + 行为决策引用的唯一 manifest 输入。 +- `scalar_operations.def`:已裁决行为到标量 execution family 的派生映射输入。 -新增语言行为时,必须先在五语言矩阵的一行中完整写明 C、Python、Rust、Go、 -V8/TypeScript 的行为、kvlang 选择、理由、边界测试数据与错误规则。随后, -`rwir_catalog.def` 或 `scalar_operations.def` 条目用 -`behavior-decision: ` 引用该行;manifest 不得复制行为正文。 +## Required order -没有完整矩阵决策的行为不得进入 manifest、vmkv、vmbin 或 vmjit。矩阵、引用和 -边界测试数据必须在同一变更中完成,`check_behavior_matrix.py` 对此失败封闭。 +1. 在五语言矩阵中记录 C、Python、Rust、Go、V8/TypeScript 行为、kvlang 选择、边界 + fixture 与非法输入规则。 +2. 为 myrwircap 分配显式稳定 operation identifier。identifier 不得来自数组下标、文件 + 顺序、声明顺序或生成顺序。 +3. 在 `rwir_catalog.def` 中写入唯一 canonical BinRWIR operation 映射与 + `behavior-decision` 引用。 +4. 由 vmkv 生成器消费该 manifest,验证 RWIR 并等价生成 canonical BinRWIR。 +5. 由顶层 BinRWIR Compiler 从 canonical Program 生成 execution plan 和 compilation。 -当前两个 manifest 不含操作记录。未来生成表必须来自它们,禁止复制第二张手写表。 +每个 myrwircap 必须恰好出现一次。缺失映射、重复 capability、重复稳定 identifier、参数 +方向不一致、行为引用不存在或任何歧义都必须成为编译错误。禁止默认 operation、顺序推导、 +兼容别名和静默修复。 + +当前两个 `.def` manifest 不含 operation 记录。未来所有生成表必须来自这两个输入,禁止 +复制第二张手写表。 diff --git a/runtimec/specification/five-language-behavior-matrix.md b/runtimec/specification/five-language-behavior-matrix.md index 6c829289..ce794e9b 100644 --- a/runtimec/specification/five-language-behavior-matrix.md +++ b/runtimec/specification/five-language-behavior-matrix.md @@ -11,6 +11,10 @@ `behavior-decision: ` 标记引用本表已有决策。没有标记的非占位 specification manifest 条目直接失败。 +一个完整 decision 只能通过 `rwir_catalog.def` 中恰好一条 myrwircap mapping 进入 +canonical BinRWIR。mapping 必须使用显式稳定 operation identifier;数组下标、文件顺序、 +声明顺序和生成顺序都不能定义 operation identity。缺失、重复或歧义 mapping 是编译错误。 + | Decision | Behavior | C | Python | Rust | Go | V8/TypeScript | Agreement | kvlang decision | Boundary fixture | Invalid input | Design record | |---|---|---|---|---|---|---|---|---|---|---|---| | integer-no-float-roundtrip | Integer calculation does not pass through floating point | integer operators stay in integer domains | integer operators stay in integer domains | integer operators stay in integer domains | integer operators stay in integer domains | BigInt operators stay in the BigInt domain | consensus | Keep integer calculation in an integer representation from input through result | values above 2^53 retain exact integer results | reject mixed representations unless that operation has its own matrix row | runtimec principle 7 | @@ -29,5 +33,8 @@ specification manifest 条目直接失败。 5. Add `behavior-decision: ` beside the specification or implementation. 6. Only then add executable semantics. +进入 executable semantics 前,还必须通过 +`myrwircap-binrwir-mapping.md` 定义的集合覆盖、identifier 唯一性和签名等价检查。 + Changing an established row is a language change. The same change must update fixtures and its issue or design record; silent reinterpretation is forbidden. diff --git a/runtimec/specification/myrwircap-binrwir-mapping.md b/runtimec/specification/myrwircap-binrwir-mapping.md new file mode 100644 index 00000000..b41a5039 --- /dev/null +++ b/runtimec/specification/myrwircap-binrwir-mapping.md @@ -0,0 +1,98 @@ +# myrwircap to canonical BinRWIR mapping + +本规范定义 runtimec 从 `myrwircaps` 与 RWIR specification 进入 canonical BinRWIR 的 +唯一映射。这里的 mapping 是编译合同,不是执行器派发表。 + +## 1. Authority chain + +```text +five-language behavior decision + -> one myrwircap specification record + -> one canonical BinRWIR operation identifier + -> vmkv equivalent emission + -> BinRWIR Compiler execution plan +``` + +前一层不完整时,后一层不得产生输出。 + +## 2. Required record + +每个 myrwircap 必须在 `rwir_catalog.def` 中拥有一条且只有一条记录。每条记录至少包含: + +| Field | Requirement | +|---|---| +| Stable RWIR operation identifier | 显式分配,长期稳定,不依赖任何容器位置 | +| Canonical capability name | 与 RWIR specification 和 `myrwircaps` 中的名称完全一致 | +| Canonical BinRWIR operation identifier | 显式分配,并写入 BinRWIR instruction 的 `operation_code` | +| Read parameter contract | 参数数量规则、顺序、类型与读取权限 | +| Write parameter contract | 参数数量规则、顺序、类型与写入权限 | +| Alias policy | Read 与 Write 是否允许、要求或禁止绑定同一 canonical Cell | +| Behavior decision | 引用五语言矩阵中已存在的稳定 decision | + +record 是 operation identity 的唯一来源。生成器可以建立查找表,但查找表位置不是 identity。 + +## 3. Exact mapping rules + +1. **Total**:runtimec `myrwircaps` 中的每个 capability 都必须有记录。 +2. **Single-valued**:一个 capability 只能产生一个 canonical BinRWIR operation。 +3. **Unique identity**:stable RWIR identifier 与 canonical BinRWIR identifier 都不得重复。 +4. **Order independent**:重排、插入或删除其它记录不能改变既有 identifier。 +5. **Signature preserving**:Read/Write 数量、顺序、类型约束和 alias policy 必须等价。 +6. **Behavior preserving**:canonical operation 必须引用同一个行为决策,不得近似替换。 +7. **No aliases**:旧名称、第二名称、兼容 identifier 与自动名称归一化都不建立映射。 + +已删除 identifier 永久保留为不可复用。语义发生不兼容变化时必须分配新 identifier,并更新 +manifest version;不能在旧 identifier 下静默改变语义。 + +## 4. vmkv obligations + +vmkv 对每条 RWIR instruction 执行以下固定流程: + +1. 读取 source operation identity 与 Read/Write operands。 +2. 在生成的 specification table 中按稳定 identity 找到唯一 record。 +3. 验证 capability name、参数数量、参数方向、类型约束与 alias declaration。 +4. 使用 record 指定的 canonical operation identifier 构造 BinRWIR instruction。 +5. 保留 source logical program counter,并按 `[ReadReference ...][WriteReference ...]` + 写入完整 reference 分区。 +6. finalize 前验证 Program 中每条 instruction 都可追溯到唯一 specification record。 + +vmkv 不能进行类型固化、KV 寻址优化、融合、虚拟寄存器分配、控制流优化、机器码生成或 +execution target 选择。这些工作只属于 BinRWIR Compiler 的 execution plan 阶段。 + +## 5. Compile errors + +下列情况必须立即产生编译错误,不得生成可执行 canonical Program 或 compilation: + +- capability 存在但 mapping 缺失; +- 同一个 capability 有零条或多条 mapping; +- stable RWIR identifier 重复或与名称不一致; +- canonical BinRWIR identifier 重复或无法唯一解析; +- identifier 来自数组下标、文件偏移、声明次序或运行时注册次序; +- Read/Write 参数数量、顺序、类型或 alias policy 不一致; +- `behavior-decision` 缺失或引用不存在; +- source operation 不属于当前 specification generation; +- manifest version 与 Program identity 不一致。 + +这些都是 `ERROR`,不是 `NOT_COMPILABLE`。`NOT_COMPILABLE` 只表示合法 canonical +BinRWIR 已成功完成 vmjit eligibility 判定,并应建立 VMBIN compilation。 + +## 6. Compiler boundary + +BinRWIR Compiler 只接收已经 finalize 且通过 mapping validation 的 canonical Program。 +Compiler 生成 execution plan,并在编译阶段决定: + +- `COMPILED`:建立 VMJIT compilation,包含机器码; +- `NOT_COMPILABLE`:建立 VMBIN compilation,不包含机器码; +- `ERROR`:不建立可执行 compilation,立即返回真实错误。 + +repository 缓存最终 compilation。route 在执行前只读取已经决定的 target,并调用 +`vmjit_execute` 或 `vmbin_execute` 中的一个。 + +## 7. Acceptance checks + +- 对 `myrwircaps` 与 `rwir_catalog.def` 做集合相等检查。 +- 对 stable RWIR identifier 和 canonical identifier 分别做唯一性检查。 +- 随机重排 manifest 后,生成 identifier 与 canonical Program 保持不变。 +- 每条 mapping 都能解析到存在的五语言 behavior decision。 +- 每条 generated BinRWIR instruction 都能反查唯一 mapping record。 +- 删除、重复或歧义 mapping 的 fixture 必须编译失败。 diff --git a/runtimec/specification/rwir_catalog.def b/runtimec/specification/rwir_catalog.def index 667ec8de..e9d52ea4 100644 --- a/runtimec/specification/rwir_catalog.def +++ b/runtimec/specification/rwir_catalog.def @@ -1,13 +1,17 @@ /* * 组件:specification/rwir_catalog.def - * 作用:RWIR 操作结构的唯一 manifest 输入。 - * 联系:每条操作只能引用 five-language-behavior-matrix.md 已裁决的行为; - * vmkv、vmbin 与 vmjit 的生成表必须来自本文件。 - * 约束:本文件不重新定义语言行为,不保存执行策略,不冻结 BinRWIR 编码。 - * 每条记录前必须写 behavior-decision 标记;当前 scaffold 不定义记录。 + * 作用:myrwircap 到 canonical BinRWIR operation 的唯一 manifest 输入。 + * 联系:每条记录显式保存稳定 RWIR operation identifier、规范 capability 名称、 + * canonical BinRWIR operation identifier、Read/Write 参数结构与 + * five-language-behavior-matrix.md 的行为决策引用;vmkv 只从本文件生成 + * 等价编码表,BinRWIR Compiler 再生成 execution plan。 + * 约束:每个 myrwircap 必须恰好一条记录。identifier 不得来自数组下标、文件顺序、 + * 声明顺序或生成顺序。缺失、重复、歧义、签名不等价和无效行为引用必须成为 + * 编译错误。本文件不保存执行策略,不冻结 BinRWIR 内存布局。 + * 当前 scaffold 不定义记录。 */ #ifndef RUNTIMEC_RWIR_OPERATION #error "Define RUNTIMEC_RWIR_OPERATION before including rwir_catalog.def" #endif -/* The scaffold defines no RWIR operation records. */ +/* The scaffold defines no myrwircap mapping records. */ diff --git a/runtimec/specification/scalar_operations.def b/runtimec/specification/scalar_operations.def index 6ce36b9a..be0940e1 100644 --- a/runtimec/specification/scalar_operations.def +++ b/runtimec/specification/scalar_operations.def @@ -1,7 +1,9 @@ /* * 组件:specification/scalar_operations.def - * 作用:已裁决语义规则到标量执行族的唯一映射输入。 - * 联系:vmbin 解释器与 vmjit 必须从同一份生成结果消费此映射。 + * 作用:已裁决语义规则到标量 execution family 的唯一派生映射输入。 + * 联系:本映射只能引用 rwir_catalog.def 中已经拥有稳定 identifier 与 canonical + * BinRWIR operation 的记录;BinRWIR Compiler 由此生成 execution plan, + * vmbin 与 vmjit 消费同一个 compilation 合同。 * 约束:不得在此文件发明语言行为;five-language-behavior-matrix.md 是唯一 * 行为事实源。每条记录前必须写 behavior-decision 标记;当前 scaffold * 不定义标量操作记录。 diff --git a/runtimec/tests/CMakeLists.txt b/runtimec/tests/CMakeLists.txt index ce99c298..831df866 100644 --- a/runtimec/tests/CMakeLists.txt +++ b/runtimec/tests/CMakeLists.txt @@ -24,12 +24,26 @@ target_include_directories(runtimec_contracts_test PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/.." "${RUNTIMEC_INCLUDE_DIRECTORY}") target_link_libraries(runtimec_contracts_test PRIVATE - runtimec_contract runtimec_binrwir runtimec_vmbin) + runtimec_contract runtimec_binrwir) runtimec_test_warnings(runtimec_contracts_test) add_test(NAME runtimec.contracts COMMAND runtimec_contracts_test) set_tests_properties(runtimec.contracts PROPERTIES LABELS "runtimec;scaffold;contracts") +add_executable(runtimec_compiler_contracts_test compiler_contracts_test.c) +target_compile_features(runtimec_compiler_contracts_test PRIVATE c_std_11) +target_include_directories(runtimec_compiler_contracts_test PRIVATE + "${CMAKE_CURRENT_SOURCE_DIR}/.." + "${RUNTIMEC_INCLUDE_DIRECTORY}") +target_link_libraries(runtimec_compiler_contracts_test PRIVATE + runtimec_contract runtimec_binrwir runtimec_vmkv runtimec_vmjit + runtimec_compiler) +runtimec_test_warnings(runtimec_compiler_contracts_test) +add_test(NAME runtimec.compiler.contracts + COMMAND runtimec_compiler_contracts_test) +set_tests_properties(runtimec.compiler.contracts PROPERTIES + LABELS "runtimec;scaffold;compiler;contracts") + add_executable(runtimec_fail_closed_test stub_fail_closed_test.c) target_compile_features(runtimec_fail_closed_test PRIVATE c_std_11) target_include_directories(runtimec_fail_closed_test PRIVATE diff --git a/runtimec/tests/compiler_contracts_test.c b/runtimec/tests/compiler_contracts_test.c new file mode 100644 index 00000000..01a57055 --- /dev/null +++ b/runtimec/tests/compiler_contracts_test.c @@ -0,0 +1,215 @@ +/* Verify BinRWIR Compiler and vmjit compile-versus-execute boundaries. */ + +#include +#include + +#include "compiler/compiler.h" +#include "compiler/optimization.h" +#include "vmjit/compiler.h" +#include "vmjit/vmjit.h" +#include "vmkv/encoder.h" + +#define RUNTIMEC_ASSERT_FUNCTION_TYPE(function_name, function_pointer_type) \ + _Static_assert(_Generic(&(function_name), function_pointer_type: 1, \ + default: 0), \ + "unexpected declaration for " #function_name) + +#define RUNTIMEC_EXPECT(condition) \ + do { \ + if (!(condition)) { \ + fprintf(stderr, "%s:%d: expectation failed: %s\n", __FILE__, \ + __LINE__, #condition); \ + ++failures; \ + } \ + } while (0) + +typedef runtimec_status_t (*binrwir_compile_function_t)( + binrwir_compiler_t *, const binrwir_program_t *, + binrwir_compilation_t **, runtimec_error_t *); +typedef runtimec_status_t (*binrwir_compiler_revision_function_t)( + const binrwir_compiler_t *, uint32_t *); +typedef runtimec_status_t (*binrwir_build_execution_plan_function_t)( + const runtimec_allocator_t *, const binrwir_program_t *, uint64_t, + uint32_t, binrwir_execution_plan_t **, runtimec_error_t *); +typedef runtimec_status_t (*vmjit_compile_function_t)( + vmjit_compiler_t *, const binrwir_program_t *, + const binrwir_execution_plan_t *, + vmjit_compilation_result_t *, runtimec_error_t *); +typedef runtimec_status_t (*vmjit_execute_function_t)( + const vmjit_code_t *, binrwir_execution_frame_t *, + binrwir_execution_exit_t *, runtimec_error_t *); +typedef runtimec_status_t (*vmkv_encoder_revision_function_t)( + const vmkv_encoder_t *, uint32_t *); + +RUNTIMEC_ASSERT_FUNCTION_TYPE( + binrwir_compiler_compile, binrwir_compile_function_t); +RUNTIMEC_ASSERT_FUNCTION_TYPE( + binrwir_compiler_get_revision, binrwir_compiler_revision_function_t); +RUNTIMEC_ASSERT_FUNCTION_TYPE( + binrwir_compiler_build_execution_plan, + binrwir_build_execution_plan_function_t); +RUNTIMEC_ASSERT_FUNCTION_TYPE(vmjit_compile, vmjit_compile_function_t); +RUNTIMEC_ASSERT_FUNCTION_TYPE(vmjit_execute, vmjit_execute_function_t); +RUNTIMEC_ASSERT_FUNCTION_TYPE( + vmkv_encoder_get_canonical_encoding_revision, + vmkv_encoder_revision_function_t); + +_Static_assert(BINRWIR_EXECUTION_TARGET_INVALID == 0, + "invalid execution target changed"); +_Static_assert(BINRWIR_EXECUTION_TARGET_VMBIN == 1, + "vmbin execution target changed"); +_Static_assert(BINRWIR_EXECUTION_TARGET_VMJIT == 2, + "vmjit execution target changed"); + +_Static_assert(VMJIT_COMPILATION_OUTCOME_INVALID == 0, + "invalid vmjit compilation outcome changed"); +_Static_assert(VMJIT_COMPILATION_OUTCOME_COMPILED == 1, + "compiled vmjit outcome changed"); +_Static_assert(VMJIT_COMPILATION_OUTCOME_NOT_COMPILABLE == 2, + "not-compilable vmjit outcome changed"); +_Static_assert(VMJIT_COMPILATION_OUTCOME_ERROR == 3, + "error vmjit outcome changed"); + +static int failures; + +static void *test_allocate(void *context, size_t size, size_t alignment) { + (void)context; + (void)size; + (void)alignment; + return NULL; +} + +static void test_deallocate( + void *context, void *allocation, size_t size, size_t alignment) { + (void)context; + (void)allocation; + (void)size; + (void)alignment; +} + +static void test_compiler_configuration(void) { + const runtimec_allocator_t allocator = { + .context = NULL, + .allocate = test_allocate, + .deallocate = test_deallocate, + }; + binrwir_compiler_t *compiler = + (binrwir_compiler_t *)(uintptr_t)1U; + binrwir_compiler_configuration_t configuration = { + .structure_size = sizeof(configuration), + .compiler_revision = 1U, + .enable_vmjit = false, + .vmjit_compiler = NULL, + }; + + RUNTIMEC_EXPECT(binrwir_compiler_create( + &allocator, &configuration, &compiler, NULL) == + RUNTIMEC_STATUS_NOT_IMPLEMENTED); + RUNTIMEC_EXPECT(compiler == NULL); + + configuration.compiler_revision = 0U; + RUNTIMEC_EXPECT(binrwir_compiler_create( + &allocator, &configuration, &compiler, NULL) == + RUNTIMEC_STATUS_INVALID); + RUNTIMEC_EXPECT(compiler == NULL); + configuration.compiler_revision = 1U; + + configuration.vmjit_compiler = (vmjit_compiler_t *)(uintptr_t)1U; + RUNTIMEC_EXPECT(binrwir_compiler_create( + &allocator, &configuration, &compiler, NULL) == + RUNTIMEC_STATUS_INVALID); + RUNTIMEC_EXPECT(compiler == NULL); + + configuration.enable_vmjit = true; + configuration.vmjit_compiler = NULL; + RUNTIMEC_EXPECT(binrwir_compiler_create( + &allocator, &configuration, &compiler, NULL) == + RUNTIMEC_STATUS_INVALID); + RUNTIMEC_EXPECT(compiler == NULL); +} + +static void test_compiler_revision_failure_shape(void) { + uint32_t compiler_revision = 0U; + + RUNTIMEC_EXPECT(binrwir_compiler_get_revision( + NULL, &compiler_revision) == RUNTIMEC_STATUS_INVALID); + RUNTIMEC_EXPECT(compiler_revision == UINT32_MAX); +} + +static void test_encoder_revision_failure_shape(void) { + uint32_t canonical_encoding_revision = 0U; + + RUNTIMEC_EXPECT(vmkv_encoder_get_canonical_encoding_revision( + NULL, &canonical_encoding_revision) == RUNTIMEC_STATUS_INVALID); + RUNTIMEC_EXPECT(canonical_encoding_revision == UINT32_MAX); +} + +static void test_compilation_shapes(void) { + const vmjit_compilation_result_t not_compilable = { + .outcome = VMJIT_COMPILATION_OUTCOME_NOT_COMPILABLE, + .code = NULL, + .refusal = {.reason = VMJIT_REFUSAL_UNSUPPORTED_PROGRAM}, + }; + binrwir_compilation_view_t view = { + .execution_target = BINRWIR_EXECUTION_TARGET_VMJIT, + .canonical_program = (const binrwir_program_t *)(uintptr_t)1U, + .execution_plan = (const binrwir_execution_plan_t *)(uintptr_t)1U, + .vmjit_code = (const vmjit_code_t *)(uintptr_t)1U, + }; + + RUNTIMEC_EXPECT(not_compilable.outcome == + VMJIT_COMPILATION_OUTCOME_NOT_COMPILABLE); + RUNTIMEC_EXPECT(not_compilable.code == NULL); + RUNTIMEC_EXPECT(binrwir_compilation_get_view(NULL, &view, NULL) == + RUNTIMEC_STATUS_INVALID); + RUNTIMEC_EXPECT(view.execution_target == BINRWIR_EXECUTION_TARGET_INVALID); + RUNTIMEC_EXPECT(view.canonical_program == NULL); + RUNTIMEC_EXPECT(view.execution_plan == NULL); + RUNTIMEC_EXPECT(view.vmjit_code == NULL); +} + +static void test_optimization_failure_shape(void) { + binrwir_execution_plan_t *execution_plan = + (binrwir_execution_plan_t *)(uintptr_t)1U; + + RUNTIMEC_EXPECT(binrwir_compiler_build_execution_plan( + NULL, NULL, 0U, 0U, &execution_plan, NULL) == + RUNTIMEC_STATUS_INVALID); + RUNTIMEC_EXPECT(execution_plan == NULL); +} + +static void test_vmjit_failure_shapes(void) { + vmjit_compilation_result_t compilation_result = { + .outcome = VMJIT_COMPILATION_OUTCOME_NOT_COMPILABLE, + .code = (vmjit_code_t *)(uintptr_t)1U, + }; + binrwir_execution_exit_t execution_exit = { + .kind = BINRWIR_EXECUTION_EXIT_DONE, + .status = RUNTIMEC_STATUS_SUCCESS, + }; + + RUNTIMEC_EXPECT(vmjit_compile(NULL, NULL, NULL, &compilation_result, NULL) == + RUNTIMEC_STATUS_INVALID); + RUNTIMEC_EXPECT(compilation_result.outcome == + VMJIT_COMPILATION_OUTCOME_INVALID); + RUNTIMEC_EXPECT(compilation_result.code == NULL); + + RUNTIMEC_EXPECT(vmjit_execute(NULL, NULL, &execution_exit, NULL) == + RUNTIMEC_STATUS_INVALID); + RUNTIMEC_EXPECT(execution_exit.kind == BINRWIR_EXECUTION_EXIT_ERROR); + RUNTIMEC_EXPECT(execution_exit.status == RUNTIMEC_STATUS_INVALID); +} + +int main(void) { + test_compiler_configuration(); + test_compiler_revision_failure_shape(); + test_encoder_revision_failure_shape(); + test_compilation_shapes(); + test_optimization_failure_shape(); + test_vmjit_failure_shapes(); + if (failures != 0) { + fprintf(stderr, "compiler_contracts_test: %d failure(s)\n", failures); + return 1; + } + return 0; +} diff --git a/runtimec/tests/contracts_test.c b/runtimec/tests/contracts_test.c index 26e1d77f..8530270c 100644 --- a/runtimec/tests/contracts_test.c +++ b/runtimec/tests/contracts_test.c @@ -1,58 +1,57 @@ -/* Freeze only the compact cross-component contracts chosen by the design. */ +/* Freeze only compact cross-component contracts selected by the design. */ #include #include #include -#include "vmbin/binding.h" -#include "vmbin/exit.h" -#include "vmbin/instruction.h" -#include "vmbin/program.h" -#include "vmbin/reference.h" -#include "vmbin/signature.h" -#include "vmbin/value.h" +#include "binrwir/execution_binding.h" +#include "binrwir/execution_exit.h" +#include "binrwir/instruction.h" +#include "binrwir/program.h" +#include "binrwir/reference.h" +#include "binrwir/signature.h" +#include "binrwir/value.h" _Static_assert(RUNTIMEC_STATUS_SUCCESS == 0, "success must remain zero"); _Static_assert(RUNTIMEC_STATUS_YIELD == 1, "yield status changed"); _Static_assert(RUNTIMEC_STATUS_WAIT == 2, "wait status changed"); -_Static_assert(RUNTIMEC_STATUS_FALLBACK == 3, "fallback status changed"); -_Static_assert(RUNTIMEC_STATUS_UNSUPPORTED == 4, "unsupported status changed"); -_Static_assert(RUNTIMEC_STATUS_NOT_IMPLEMENTED == 5, +_Static_assert(RUNTIMEC_STATUS_UNSUPPORTED == 3, "unsupported status changed"); +_Static_assert(RUNTIMEC_STATUS_NOT_IMPLEMENTED == 4, "not-implemented status changed"); -_Static_assert(RUNTIMEC_STATUS_INVALID == 6, "invalid status changed"); -_Static_assert(RUNTIMEC_STATUS_OUT_OF_MEMORY == 7, +_Static_assert(RUNTIMEC_STATUS_INVALID == 5, "invalid status changed"); +_Static_assert(RUNTIMEC_STATUS_OUT_OF_MEMORY == 6, "out-of-memory status changed"); -_Static_assert(RUNTIMEC_STATUS_ERROR == 8, "error status changed"); -_Static_assert(RUNTIMEC_STATUS_INSUFFICIENT_CAPACITY == 9, +_Static_assert(RUNTIMEC_STATUS_ERROR == 7, "error status changed"); +_Static_assert(RUNTIMEC_STATUS_INSUFFICIENT_CAPACITY == 8, "insufficient-capacity status changed"); -_Static_assert(sizeof(vmbin_reference_t) == 4U, +_Static_assert(sizeof(binrwir_reference_t) == 4U, "BinRWIR references must remain four bytes"); -_Static_assert(sizeof(vmbin_alias_rule_t) == 8U, +_Static_assert(sizeof(binrwir_alias_rule_t) == 8U, "alias rules must remain eight bytes"); -_Static_assert(sizeof(vmbin_instruction_t) == 16U, +_Static_assert(sizeof(binrwir_instruction_t) == 16U, "BinRWIR instructions must remain sixteen bytes"); -_Static_assert(sizeof(vmbin_register_descriptor_t) == 16U, +_Static_assert(sizeof(binrwir_register_descriptor_t) == 16U, "register descriptors must remain sixteen bytes"); -_Static_assert(sizeof(vmbin_literal_descriptor_t) == 16U, +_Static_assert(sizeof(binrwir_literal_descriptor_t) == 16U, "literal descriptors must remain sixteen bytes"); -_Static_assert(sizeof(vmbin_callsite_t) == 16U, +_Static_assert(sizeof(binrwir_callsite_t) == 16U, "callsites must remain sixteen bytes"); -_Static_assert(sizeof(vmbin_call_alias_mapping_t) == 8U, +_Static_assert(sizeof(binrwir_call_alias_mapping_t) == 8U, "call alias mappings must remain eight bytes"); -_Static_assert(sizeof(vmbin_value_slot_t) == 32U, +_Static_assert(sizeof(binrwir_value_slot_t) == 32U, "value slots must remain thirty-two bytes"); -_Static_assert(sizeof(vmbin_cell_t) == 64U, +_Static_assert(sizeof(binrwir_cell_t) == 64U, "canonical cells must remain sixty-four bytes"); -_Static_assert(sizeof(vmbin_exit_t) == 48U, +_Static_assert(sizeof(binrwir_execution_exit_t) == 48U, "structured exits must remain forty-eight bytes"); static int plain_data_copy_round_trip(void) { - const vmbin_value_slot_t initial_value = {0}; - const vmbin_exit_t initial_exit = {0}; - vmbin_value_slot_t copied_value; - vmbin_exit_t copied_exit; + const binrwir_value_slot_t initial_value = {0}; + const binrwir_execution_exit_t initial_exit = {0}; + binrwir_value_slot_t copied_value; + binrwir_execution_exit_t copied_exit; memcpy(&copied_value, &initial_value, sizeof(copied_value)); memcpy(&copied_exit, &initial_exit, sizeof(copied_exit)); diff --git a/runtimec/tools/architecture/check_behavior_matrix.py b/runtimec/tools/architecture/check_behavior_matrix.py index 307fdc38..6f9ae086 100644 --- a/runtimec/tools/architecture/check_behavior_matrix.py +++ b/runtimec/tools/architecture/check_behavior_matrix.py @@ -21,7 +21,9 @@ r"^\s*RUNTIMEC_[A-Z0-9_]*(?:OP|OPERATION)\s*\(" ) PLACEHOLDER_PATTERN = re.compile(r"\b(?:todo|tbd|unknown|placeholder)\b", re.IGNORECASE) -SCANNED_PRODUCT_DIRECTORIES = ("specification", "vmkv", "vmbin", "vmjit") +SCANNED_PRODUCT_DIRECTORIES = ( + "specification", "binrwir", "vmkv", "compiler", "vmbin", "vmjit", +) @dataclass(frozen=True, order=True) diff --git a/runtimec/tools/architecture/check_layers.py b/runtimec/tools/architecture/check_layers.py index bba4abd4..e76d4f17 100644 --- a/runtimec/tools/architecture/check_layers.py +++ b/runtimec/tools/architecture/check_layers.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""Enforce the single runtimec dependency trunk.""" +"""Enforce the runtimec component graph and its single execution-policy merge.""" from __future__ import annotations @@ -11,37 +11,76 @@ SOURCE_SUFFIXES = {".c", ".h"} -BINRWIR_CONTRACT_FILES = { - "value.h", "reference.h", "signature.h", "instruction.h", "program.h", - "program.c", "binding.h", "frame.h", "frame.c", "exit.h", -} PRODUCT_DIRECTORIES = ( - "include", "interface", "contract", "host", "vmbin", "vmkv", - "vmjit", "engine", "generated", + "include", "interface", "contract", "host", "binrwir", "vmkv", + "vmjit", "compiler", "vmbin", "engine", "generated", ) KNOWN_LAYERS = { - "public", "contract", "host", "binrwir", "vmbin", "vmkv", "vmjit", - "engine", "interface", + "public", "interface", "contract", "host", "binrwir", "vmkv", + "vmjit", "compiler", "vmbin", "engine", } ALLOWED_DEPENDENCIES = { "public": {"public"}, "contract": {"public", "contract"}, "host": {"contract", "host"}, "binrwir": {"contract", "binrwir"}, - "vmbin": {"contract", "binrwir", "vmbin"}, "vmkv": {"contract", "binrwir", "vmkv"}, "vmjit": {"contract", "binrwir", "vmjit"}, + "compiler": {"contract", "binrwir", "vmjit", "compiler"}, + "vmbin": {"contract", "binrwir", "vmbin"}, "engine": { - "contract", "host", "binrwir", "vmbin", "vmkv", "vmjit", "engine", + "contract", "host", "binrwir", "vmkv", "vmjit", "compiler", + "vmbin", "engine", }, "interface": {"public", "contract", "engine", "interface"}, } +EXPECTED_COMPONENT_ORDER = ( + ("runtimec_contract", "contract"), + ("runtimec_host", "host"), + ("runtimec_binrwir", "binrwir"), + ("runtimec_vmkv", "vmkv"), + ("runtimec_vmjit", "vmjit"), + ("runtimec_compiler", "compiler"), + ("runtimec_vmbin", "vmbin"), + ("runtimec_engine", "engine"), +) +EXPECTED_TARGET_DEPENDENCIES = { + "runtimec_contract": set(), + "runtimec_host": {"runtimec_contract"}, + "runtimec_binrwir": {"runtimec_contract"}, + "runtimec_vmkv": {"runtimec_contract", "runtimec_binrwir"}, + "runtimec_vmjit": {"runtimec_contract", "runtimec_binrwir"}, + "runtimec_compiler": { + "runtimec_contract", "runtimec_binrwir", "runtimec_vmjit", + }, + "runtimec_vmbin": {"runtimec_contract", "runtimec_binrwir"}, + "runtimec_engine": { + "runtimec_contract", "runtimec_host", "runtimec_binrwir", + "runtimec_vmkv", "runtimec_compiler", "runtimec_vmjit", + "runtimec_vmbin", + }, + "runtimec_interface": {"runtimec_contract", "runtimec_engine"}, +} INCLUDE_PATTERN = re.compile(r'^\s*#\s*include\s*([<"])([^>"]+)[>"]') FORBIDDEN_TREE_PATTERN = re.compile(r"(?:^|/)(?:runtime|runtimec2)(?:/|$)") +COMPONENT_PATTERN = re.compile( + r"runtimec_add_component\(\s*(runtimec_[a-z0-9_]+)\s+([a-z0-9_]+)\s*\)" +) +LINK_PATTERN = re.compile( + r"target_link_libraries\(\s*(runtimec_[a-z0-9_]+)\s+(.*?)\)", + re.DOTALL, +) INTERNAL_PREFIXES = { - "contract", "host", "vmbin", "vmkv", "vmjit", "engine", "interface", + "contract", "host", "binrwir", "vmkv", "vmjit", "compiler", + "vmbin", "engine", "interface", +} +POLICY_LAYERS = {"compiler", "vmbin", "vmjit"} +ROUTE_FILES = {"engine/route.c", "engine/route.h"} +BINRWIR_NEUTRAL_FILE_NAMES = { + "value.c", "value.h", "reference.c", "reference.h", "signature.c", + "signature.h", "instruction.c", "instruction.h", "program.c", + "program.h", "execution_plan.c", "execution_plan.h", } -EXECUTION_LAYERS = {"vmkv", "vmbin", "vmjit"} @dataclass(frozen=True, order=True) @@ -80,19 +119,13 @@ def relative_display(path: Path, repository_root: Path) -> str: def layer_for_relative(relative: PurePosixPath) -> str | None: - parts = relative.parts - if not parts: + if not relative.parts: return None - if parts[0] == "include": + if relative.parts[0] == "include": return "public" - if parts[0] == "interface": - return "interface" - if parts[0] == "generated": + if relative.parts[0] == "generated": return "contract" - if parts[0] == "vmbin" and len(parts) >= 2: - if parts[1] == "binrwir" or parts[-1] in BINRWIR_CONTRACT_FILES: - return "binrwir" - return parts[0] if parts[0] in KNOWN_LAYERS else None + return relative.parts[0] if relative.parts[0] in KNOWN_LAYERS else None def inferred_include_layer(token: str) -> str | None: @@ -105,9 +138,6 @@ def inferred_include_layer(token: str) -> str | None: parts = parts[1:] if not parts: return None - if parts[0] == "vmbin" and len(parts) > 1: - if parts[1] == "binrwir" or parts[-1] in BINRWIR_CONTRACT_FILES: - return "binrwir" return parts[0] if parts[0] in INTERNAL_PREFIXES else None @@ -115,11 +145,10 @@ def resolve_include( token: str, source: Path, runtimec_root: Path, repository_root: Path, ) -> Path | None: candidates = [ - source.parent / token, runtimec_root / token, - runtimec_root / "include" / token, runtimec_root / "contract" / token, - runtimec_root / "host" / token, runtimec_root / "vmbin" / token, - runtimec_root / "vmkv" / token, runtimec_root / "vmjit" / token, - runtimec_root / "engine" / token, runtimec_root / "interface" / token, + source.parent / token, + runtimec_root / token, + runtimec_root / "include" / token, + *(runtimec_root / directory / token for directory in INTERNAL_PREFIXES), repository_root / token, ] return next((candidate.resolve() for candidate in candidates if candidate.is_file()), None) @@ -134,8 +163,48 @@ def iter_product_sources(runtimec_root: Path): yield path -def audit(repository_root: Path, runtimec_root: Path) -> tuple[list[Finding], int]: +def cmake_target_dependencies(cmake_text: str) -> dict[str, set[str]]: + dependencies: dict[str, set[str]] = {} + for match in LINK_PATTERN.finditer(cmake_text): + target, body = match.groups() + tokens = set(re.findall(r"\bruntimec_[a-z0-9_]+\b", body)) + dependencies.setdefault(target, set()).update(tokens) + return dependencies + + +def audit_build_graph( + runtimec_root: Path, repository_root: Path, +) -> list[Finding]: + cmake_path = runtimec_root / "CMakeLists.txt" + display = relative_display(cmake_path, repository_root) + if not cmake_path.is_file(): + return [Finding(display, 1, "missing-build-file", "CMakeLists.txt is required")] + text = cmake_path.read_text(encoding="utf-8") findings: list[Finding] = [] + actual_order = tuple(COMPONENT_PATTERN.findall(text)) + if actual_order != EXPECTED_COMPONENT_ORDER: + findings.append(Finding( + display, 1, "component-order", + f"expected {EXPECTED_COMPONENT_ORDER!r}, found {actual_order!r}", + )) + if not re.search(r"add_library\(\s*runtimec_interface\s+STATIC\b", text): + findings.append(Finding( + display, 1, "missing-interface-component", + "runtimec_interface static component is required", + )) + actual_dependencies = cmake_target_dependencies(text) + for target, expected in EXPECTED_TARGET_DEPENDENCIES.items(): + actual = actual_dependencies.get(target, set()) + if actual != expected: + findings.append(Finding( + display, 1, "target-dependencies", + f"{target} expected {sorted(expected)!r}, found {sorted(actual)!r}", + )) + return findings + + +def audit(repository_root: Path, runtimec_root: Path) -> tuple[list[Finding], int]: + findings = audit_build_graph(runtimec_root, repository_root) scanned = 0 for source in iter_product_sources(runtimec_root): scanned += 1 @@ -146,12 +215,19 @@ def audit(repository_root: Path, runtimec_root: Path) -> tuple[list[Finding], in findings.append(Finding(display, 1, "unknown-source-layer", "product source has no owner")) continue + if (source_layer == "vmbin" and + relative.name in BINRWIR_NEUTRAL_FILE_NAMES): + findings.append(Finding( + display, 1, "binrwir-owned-by-vmbin", + "neutral BinRWIR file must live under binrwir", + )) try: lines = source.read_text(encoding="utf-8").splitlines() except (OSError, UnicodeError) as error: findings.append(Finding(display, 1, "read-error", str(error))) continue + included_layers: set[str] = set() for line_number, line in enumerate(lines, 1): match = INCLUDE_PATTERN.match(line) if not match: @@ -183,17 +259,20 @@ def audit(repository_root: Path, runtimec_root: Path) -> tuple[list[Finding], in )) if target_layer is None: continue + included_layers.add(target_layer) if target_layer not in ALLOWED_DEPENDENCIES[source_layer]: findings.append(Finding( display, line_number, "forbidden-layer-edge", f"{source_layer} -> {target_layer} via {token!r}", )) - if (source_layer == "engine" and target_layer in EXECUTION_LAYERS - and relative.as_posix() not in {"engine/route.c", "engine/route.h"}): - findings.append(Finding( - display, line_number, "route-bypass", - f"only engine/route may depend on {target_layer}", - )) + + merged_policy_layers = included_layers & POLICY_LAYERS + if (source_layer == "engine" and len(merged_policy_layers) > 1 and + relative.as_posix() not in ROUTE_FILES): + findings.append(Finding( + display, 1, "route-bypass", + "only engine/route may merge compiler, vmbin, and vmjit", + )) return sorted(set(findings)), scanned diff --git a/runtimec/tools/architecture/check_names.py b/runtimec/tools/architecture/check_names.py index dd6039bb..21d4ae9e 100644 --- a/runtimec/tools/architecture/check_names.py +++ b/runtimec/tools/architecture/check_names.py @@ -11,8 +11,9 @@ PRODUCT_DIRECTORIES = ( - "include", "interface", "contract", "host", "vmbin", "vmkv", - "vmjit", "engine", "generated", "specification", + "include", "interface", "contract", "host", "binrwir", "vmkv", + "vmjit", "compiler", "vmbin", "engine", "generated", + "specification", "tests", ) TEXT_SUFFIXES = {".c", ".h", ".cmake", ".in", ".map", ".exports", ".def"} FORBIDDEN_PATH_PARTS = { @@ -26,6 +27,24 @@ ("old-runtimec2-name", re.compile(r"\bruntimec2\b")), ("old-runtime-tree", re.compile(r"(?:^|[\"<])runtime/")), ("old-success-name", re.compile(r"\bRUNTIMEC_STATUS_OK\b")), + ("removed-fallback-status", re.compile(r"\bRUNTIMEC_STATUS_FALLBACK\b")), + ("removed-vmjit-execution-entry", re.compile(r"\bvmjit_try_execute\b")), + ("alternate-vmjit-compilation-cache", re.compile( + r"\b(?:vmjit_code_cache|vmjit_cache_key|vmjit_code_cache_get_or_compile)\b", + )), + ("binrwir-owned-plan-builder", re.compile( + r"\bbinrwir_execution_plan_build\b", + )), + ("second-vmjit-plan", re.compile(r"\bvmjit_plan_[A-Za-z0-9_]*\b")), + ("unobservable-compilation-state", re.compile( + r"\bBINRWIR_COMPILATION_STATE_[A-Za-z0-9_]*\b", + )), + ("execution-time-fallback", re.compile(r"fallback", re.IGNORECASE)), + ("binrwir-under-vmbin", re.compile( + r"(?:^|/)vmbin/(?:value|reference|signature|instruction|program|execution_plan)" + r"\.(?:c|h)$", + re.IGNORECASE, + )), ("compatibility-language", re.compile( r"\b(?:backward|compat|compatibility|legacy|forwarding)[ _-]?(?:header|layer|path|support)?\b", re.IGNORECASE, diff --git a/runtimec/vmbin/binding.h b/runtimec/vmbin/binding.h deleted file mode 100644 index 156179e7..00000000 --- a/runtimec/vmbin/binding.h +++ /dev/null @@ -1,90 +0,0 @@ -#ifndef VMBIN_BINDING_H -#define VMBIN_BINDING_H - -/* - * 组件:vmbin/binding - * 作用:Binding 将一个有方向的寄存器映射到 canonical Cell。 - * 联系:Frame 持有 Cell 与 Binding;call 按签名检查显式别名。 - * 约束:不同读写寄存器可以指向同一 Cell;Cell 可从 kvspace 重建。 - */ - -#include - -#include "contract/status.h" -#include "vmbin/value.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define VMBIN_CELL_IDENTIFIER_NONE UINT32_MAX -#define VMBIN_REGISTER_IDENTIFIER_NONE UINT32_MAX - -typedef enum vmbin_cell_state { - VMBIN_CELL_UNKNOWN = 0, - VMBIN_CELL_ABSENT = 1, - VMBIN_CELL_PRESENT = 2, - VMBIN_CELL_INVALID = 3 -} vmbin_cell_state_t; - -typedef enum vmbin_cell_flags { - VMBIN_CELL_FLAG_NONE = 0, - VMBIN_CELL_FLAG_DIRTY = 1U << 0, - VMBIN_CELL_FLAG_MATERIALIZED = 1U << 1, - VMBIN_CELL_FLAG_PINNED = 1U << 2, - VMBIN_CELL_FLAG_BORROWED = 1U << 3 -} vmbin_cell_flags_t; - -typedef enum vmbin_binding_access { - VMBIN_BINDING_ACCESS_NONE = 0, - VMBIN_BINDING_ACCESS_READ = 1U << 0, - VMBIN_BINDING_ACCESS_WRITE = 1U << 1 -} vmbin_binding_access_t; - -typedef enum vmbin_binding_flags { - VMBIN_BINDING_FLAG_NONE = 0, - VMBIN_BINDING_FLAG_PARAMETER = 1U << 0, - VMBIN_BINDING_FLAG_LOCAL = 1U << 1 -} vmbin_binding_flags_t; - -typedef struct vmbin_cell { - vmbin_value_slot_t value; /* staged 值(32 字节目标中立槽) */ - uint64_t storage_identifier; /* canonical logical storage 身份 */ - uint64_t storage_generation; /* 外部写/relocation 后变化 */ - uint64_t mutation_version; /* 写后递增,读缓存据此失效 */ - uint16_t state; /* vmbin_cell_state_t */ - uint16_t flags; /* vmbin_cell_flags_t(dirty/pinned 等) */ - uint32_t reserved_32_bits; -} vmbin_cell_t; - -typedef struct vmbin_binding { - vmbin_cell_t *cell; /* canonical Cell;可被多个 Binding 共享 */ - uint64_t observed_version; /* 上次读到的 mutation_version */ - uint32_t register_identifier; /* 程序中有方向的寄存器标识符 */ - uint16_t access; /* vmbin_binding_access_t */ - uint16_t flags; /* vmbin_binding_flags_t */ -} vmbin_binding_t; - -runtimec_status_t vmbin_cell_reset(vmbin_cell_t *cell); -runtimec_status_t vmbin_cell_invalidate(vmbin_cell_t *cell); -runtimec_status_t vmbin_cell_query(const vmbin_cell_t *cell, - vmbin_value_slot_t *output_value, - uint64_t *output_mutation_version); -runtimec_status_t vmbin_binding_reset(vmbin_binding_t *binding); -runtimec_status_t vmbin_binding_bind(vmbin_binding_t *binding, - uint32_t register_identifier, - vmbin_binding_access_t access, - vmbin_cell_t *cell); -runtimec_status_t vmbin_binding_read(vmbin_binding_t *binding, - vmbin_value_slot_t *output_value); -runtimec_status_t vmbin_binding_write(vmbin_binding_t *binding, - const vmbin_value_slot_t *value); -runtimec_status_t vmbin_binding_invalidate(vmbin_binding_t *binding); -_Static_assert(sizeof(vmbin_cell_t) == 64U, - "vmbin cells must remain 64 bytes"); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/runtimec/vmbin/builtin/registry.c b/runtimec/vmbin/builtin/registry.c index 4e5748e2..81aceee2 100644 --- a/runtimec/vmbin/builtin/registry.c +++ b/runtimec/vmbin/builtin/registry.c @@ -46,7 +46,7 @@ vmbin_builtin_registry_find(const vmbin_builtin_registry_t *registry, if (output_entry != NULL) { *output_entry = NULL; } - if (registry == NULL || builtin_identifier == VMBIN_IDENTIFIER_NONE || + if (registry == NULL || builtin_identifier == BINRWIR_IDENTIFIER_NONE || output_entry == NULL) { return RUNTIMEC_STATUS_INVALID; } diff --git a/runtimec/vmbin/builtin/registry.h b/runtimec/vmbin/builtin/registry.h index 862ee86d..d431285b 100644 --- a/runtimec/vmbin/builtin/registry.h +++ b/runtimec/vmbin/builtin/registry.h @@ -4,17 +4,17 @@ /* * 组件:vmbin/builtin/registry * 作用:将 builtin 标识符映射到唯一处理函数。 - * 联系:interpreter 调用;vmjit 可以内联或退出,但不另建语义实现。 + * 联系:interpreter 调用;处理函数消费中立执行合同。 * 约束:Registry 不拥有条目或处理函数,生命周期属于 session。 */ #include #include +#include "binrwir/execution_exit.h" +#include "binrwir/execution_frame.h" +#include "binrwir/instruction.h" #include "contract/status.h" -#include "vmbin/exit.h" -#include "vmbin/frame.h" -#include "vmbin/instruction.h" #ifdef __cplusplus extern "C" { @@ -22,9 +22,9 @@ extern "C" { typedef runtimec_status_t (*vmbin_builtin_handler_function_t)( - vmbin_frame_t *frame, - const vmbin_instruction_view_t *instruction, - vmbin_exit_t *output_exit); + binrwir_execution_frame_t *frame, + const binrwir_instruction_view_t *instruction, + binrwir_execution_exit_t *output_exit); typedef enum vmbin_builtin_flags { VMBIN_BUILTIN_FLAG_NONE = 0, diff --git a/runtimec/vmbin/call.c b/runtimec/vmbin/call.c index bcd88fbe..b1fb5cd2 100644 --- a/runtimec/vmbin/call.c +++ b/runtimec/vmbin/call.c @@ -6,22 +6,20 @@ #include "vmbin/call.h" -static runtimec_status_t vmbin_call_unimplemented( - vmbin_exit_t *output_exit) { - if (output_exit != NULL) { - *output_exit = (vmbin_exit_t){0}; - output_exit->kind = VMBIN_EXIT_ERROR; - output_exit->status = RUNTIMEC_STATUS_NOT_IMPLEMENTED; - output_exit->logical_program_counter = VMBIN_PROGRAM_COUNTER_NONE; - output_exit->resume_logical_program_counter = - VMBIN_PROGRAM_COUNTER_NONE; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +static void vmbin_call_initialize_error_exit( + binrwir_execution_exit_t *output_exit, runtimec_status_t status) { + *output_exit = (binrwir_execution_exit_t){0}; + output_exit->kind = BINRWIR_EXECUTION_EXIT_ERROR; + output_exit->status = status; + output_exit->logical_program_counter = + BINRWIR_EXECUTION_PROGRAM_COUNTER_NONE; + output_exit->resume_logical_program_counter = + BINRWIR_EXECUTION_PROGRAM_COUNTER_NONE; } runtimec_status_t vmbin_call_binding_create( - const vmbin_frame_t *caller, - const vmbin_program_t *callee, + const binrwir_execution_frame_t *caller, + const binrwir_program_t *callee, const vmbin_call_request_t *request, const runtimec_allocator_t *allocator, vmbin_call_binding_t **output_binding) { @@ -33,7 +31,7 @@ runtimec_status_t vmbin_call_binding_create( *output_binding = NULL; } if (caller == NULL || callee == NULL || request == NULL || - request->callsite_identifier == VMBIN_IDENTIFIER_NONE || + request->callsite_identifier == BINRWIR_IDENTIFIER_NONE || allocator == NULL || output_binding == NULL) { return RUNTIMEC_STATUS_INVALID; } @@ -46,26 +44,36 @@ runtimec_status_t vmbin_call_binding_destroy(vmbin_call_binding_t *binding) { return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } runtimec_status_t vmbin_call_enter( - vmbin_frame_t *caller, - vmbin_frame_t *callee, + binrwir_execution_frame_t *caller, + binrwir_execution_frame_t *callee, const vmbin_call_binding_t *binding, - vmbin_exit_t *output_exit) { - runtimec_status_t status = vmbin_call_unimplemented(output_exit); + binrwir_execution_exit_t *output_exit) { + if (output_exit != NULL) { + vmbin_call_initialize_error_exit(output_exit, + RUNTIMEC_STATUS_INVALID); + } if (caller == NULL || callee == NULL || binding == NULL || output_exit == NULL) { return RUNTIMEC_STATUS_INVALID; } - return status; + vmbin_call_initialize_error_exit(output_exit, + RUNTIMEC_STATUS_NOT_IMPLEMENTED); + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } runtimec_status_t vmbin_call_return( - vmbin_frame_t *caller, - const vmbin_frame_t *callee, + binrwir_execution_frame_t *caller, + const binrwir_execution_frame_t *callee, const vmbin_call_binding_t *binding, - vmbin_exit_t *output_exit) { - runtimec_status_t status = vmbin_call_unimplemented(output_exit); + binrwir_execution_exit_t *output_exit) { + if (output_exit != NULL) { + vmbin_call_initialize_error_exit(output_exit, + RUNTIMEC_STATUS_INVALID); + } if (caller == NULL || callee == NULL || binding == NULL || output_exit == NULL) { return RUNTIMEC_STATUS_INVALID; } - return status; + vmbin_call_initialize_error_exit(output_exit, + RUNTIMEC_STATUS_NOT_IMPLEMENTED); + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } diff --git a/runtimec/vmbin/call.h b/runtimec/vmbin/call.h index bd8257f5..3970cc1c 100644 --- a/runtimec/vmbin/call.h +++ b/runtimec/vmbin/call.h @@ -3,18 +3,18 @@ /* * 组件:vmbin/call - * 作用:按被调用 Program 的签名建立调用绑定并传递读写参数。 + * 作用:按 canonical BinRWIR Program 的签名建立调用绑定并传递读写参数。 * 联系:engine route 驱动调用;签名是别名策略的唯一来源。 * 约束:调用不得重复已经提交的副作用。 */ #include +#include "binrwir/execution_exit.h" +#include "binrwir/execution_frame.h" +#include "binrwir/program.h" #include "contract/allocator.h" #include "contract/status.h" -#include "vmbin/exit.h" -#include "vmbin/frame.h" -#include "vmbin/program.h" #ifdef __cplusplus extern "C" { @@ -27,22 +27,22 @@ typedef struct vmbin_call_request { } vmbin_call_request_t; runtimec_status_t vmbin_call_binding_create( - const vmbin_frame_t *caller, - const vmbin_program_t *callee, + const binrwir_execution_frame_t *caller, + const binrwir_program_t *callee, const vmbin_call_request_t *request, const runtimec_allocator_t *allocator, vmbin_call_binding_t **output_binding); runtimec_status_t vmbin_call_binding_destroy(vmbin_call_binding_t *binding); runtimec_status_t vmbin_call_enter( - vmbin_frame_t *caller, - vmbin_frame_t *callee, + binrwir_execution_frame_t *caller, + binrwir_execution_frame_t *callee, const vmbin_call_binding_t *binding, - vmbin_exit_t *output_exit); + binrwir_execution_exit_t *output_exit); runtimec_status_t vmbin_call_return( - vmbin_frame_t *caller, - const vmbin_frame_t *callee, + binrwir_execution_frame_t *caller, + const binrwir_execution_frame_t *callee, const vmbin_call_binding_t *binding, - vmbin_exit_t *output_exit); + binrwir_execution_exit_t *output_exit); #ifdef __cplusplus } diff --git a/runtimec/vmbin/exit.h b/runtimec/vmbin/exit.h deleted file mode 100644 index 5dd3c824..00000000 --- a/runtimec/vmbin/exit.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef VMBIN_EXIT_H -#define VMBIN_EXIT_H - -/* - * 组件:vmbin/exit - * 作用:表达 interpreter 或 vmjit 离开执行窗口的唯一结构化结果。 - * 联系:engine route 消费退出并决定调用、交接、恢复或报错。 - * 约束:不得携带需要持久化的机器地址或伪造成功状态。 - */ - -#include - -#include "contract/status.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define VMBIN_PROGRAM_COUNTER_NONE UINT32_MAX - -typedef enum vmbin_exit_kind { - VMBIN_EXIT_NONE = 0, - VMBIN_EXIT_DONE, - VMBIN_EXIT_CALL, - VMBIN_EXIT_BUILTIN, - VMBIN_EXIT_HANDOFF, - VMBIN_EXIT_YIELD, - VMBIN_EXIT_DEOPTIMIZATION, - VMBIN_EXIT_ERROR -} vmbin_exit_kind_t; - -typedef enum vmbin_exit_flags { - VMBIN_EXIT_FLAG_NONE = 0, - VMBIN_EXIT_FLAG_FRAME_MATERIALIZED = 1U << 0, - VMBIN_EXIT_FLAG_RETRY_LOGICAL_PROGRAM_COUNTER = 1U << 1 -} vmbin_exit_flags_t; - -typedef struct vmbin_exit { - uint16_t kind; /* vmbin_exit_kind_t:为什么离开窗口 */ - uint16_t flags; /* vmbin_exit_flags_t:物化与重试提示 */ - runtimec_status_t status; /* 组件状态,与结构化退出原因正交 */ - uint32_t logical_program_counter; - uint32_t resume_logical_program_counter; - uint32_t detail_code; /* 结构化细节码(拒绝原因/错误分类) */ - uint32_t target_identifier; - uint32_t value_base; /* 退出携带值的起始槽(如需要) */ - uint32_t value_count; /* 退出携带值的数量 */ - uint64_t payload_low; /* 有限普通数据负载,低 64 位 */ - uint64_t payload_high; /* 有限普通数据负载,高 64 位 */ -} vmbin_exit_t; - -_Static_assert(sizeof(vmbin_exit_t) == 48U, - "vmbin structured exit must remain 48 bytes"); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/runtimec/vmbin/frame.h b/runtimec/vmbin/frame.h deleted file mode 100644 index 5971222a..00000000 --- a/runtimec/vmbin/frame.h +++ /dev/null @@ -1,70 +0,0 @@ -#ifndef VMBIN_FRAME_H -#define VMBIN_FRAME_H - -/* - * 组件:vmbin/frame - * 作用:保存可从 kvspace 重建的执行帧镜像。 - * 联系:engine route 创建 Frame;interpreter 与 vmjit 消费。 - * 约束:Frame 不是持久事实源,每条源指令边界必须可观察。 - */ - -#include -#include - -#include "contract/status.h" -#include "vmbin/binding.h" -#include "vmbin/program.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum vmbin_frame_flags { - VMBIN_FRAME_FLAG_NONE = 0, - VMBIN_FRAME_FLAG_INITIALIZED = 1U << 0, - VMBIN_FRAME_FLAG_OBSERVABLE = 1U << 1, - VMBIN_FRAME_FLAG_RESUMED = 1U << 2 -} vmbin_frame_flags_t; - -typedef struct vmbin_frame { - const vmbin_program_t *program; - struct vmbin_frame *parent; - vmbin_cell_t *cells; - size_t cell_count; - vmbin_binding_t *bindings; - size_t binding_count; - uint64_t snapshot_generation; - uint64_t program_generation; - uint32_t logical_program_counter; - uint32_t flags; -} vmbin_frame_t; - -#define VMBIN_FRAME_ALIGNMENT ((uint32_t)_Alignof(vmbin_frame_t)) - -runtimec_status_t vmbin_frame_initialize( - vmbin_frame_t *frame, const vmbin_program_t *program, - vmbin_frame_t *parent, vmbin_cell_t *cells, size_t cell_count, - vmbin_binding_t *bindings, size_t binding_count, - uint64_t snapshot_generation, uint64_t program_generation, - uint32_t logical_program_counter); -runtimec_status_t vmbin_frame_reset(vmbin_frame_t *frame); -runtimec_status_t vmbin_frame_destroy(vmbin_frame_t *frame); -runtimec_status_t vmbin_frame_lookup_cell(vmbin_frame_t *frame, - uint32_t cell_identifier, - vmbin_cell_t **output_cell); -runtimec_status_t vmbin_frame_lookup_binding( - vmbin_frame_t *frame, uint32_t register_identifier, - vmbin_binding_t **output_binding); -runtimec_status_t vmbin_frame_bind_register( - vmbin_frame_t *frame, uint32_t register_identifier, - uint32_t cell_identifier, - vmbin_binding_access_t access); -runtimec_status_t vmbin_frame_materialize_register( - vmbin_frame_t *frame, uint32_t register_identifier, - vmbin_value_slot_t *output_value); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/runtimec/vmbin/instruction.h b/runtimec/vmbin/instruction.h deleted file mode 100644 index 51fad74f..00000000 --- a/runtimec/vmbin/instruction.h +++ /dev/null @@ -1,85 +0,0 @@ -#ifndef VMBIN_INSTRUCTION_H -#define VMBIN_INSTRUCTION_H - -/* - * 组件:vmbin/instruction - * 作用:热指令的固定宽度表示,以及读取和写入引用的分区视图。 - * 联系:Program 拥有指令和引用池;interpreter 与 vmjit 只读消费。 - * 约束:当前窄式和宽式布局不是冻结的持久格式。 - */ - -#include -#include - -#include "contract/status.h" -#include "vmbin/reference.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define VMBIN_OPERATION_CODE_NONE UINT16_MAX - -typedef enum vmbin_instruction_flags { - VMBIN_INSTRUCTION_FLAG_NONE = 0, - VMBIN_INSTRUCTION_FLAG_CONTROL = 1U << 0, - VMBIN_INSTRUCTION_FLAG_EFFECT = 1U << 1 -} vmbin_instruction_flags_t; - -typedef enum vmbin_instruction_form { - VMBIN_INSTRUCTION_FORM_INVALID = 0, - VMBIN_INSTRUCTION_FORM_NARROW = 1, - VMBIN_INSTRUCTION_FORM_WIDE = 2 -} vmbin_instruction_form_t; - -typedef struct vmbin_instruction { - uint32_t operand_offset; - uint32_t auxiliary; - uint16_t operation_code; - uint16_t flags; - uint8_t read_count; - uint8_t write_count; - uint8_t form; - uint8_t reserved_byte; -} vmbin_instruction_t; - -typedef struct vmbin_reference_span { - const vmbin_reference_t *data; - size_t count; -} vmbin_reference_span_t; - -typedef struct vmbin_instruction_build_request { - uint32_t source_logical_program_counter; - uint32_t auxiliary; - uint16_t operation_code; - uint16_t flags; - uint8_t form; - uint8_t reserved_bytes[3]; - vmbin_reference_span_t reads; - vmbin_reference_span_t writes; -} vmbin_instruction_build_request_t; - -typedef struct vmbin_instruction_view { - const vmbin_instruction_t *instruction; - uint32_t source_logical_program_counter; - uint32_t reserved_32_bits; - vmbin_reference_span_t reads; - vmbin_reference_span_t writes; -} vmbin_instruction_view_t; - -runtimec_status_t vmbin_instruction_validate_build_request( - const vmbin_instruction_build_request_t *request); -runtimec_status_t vmbin_instruction_get_view( - const vmbin_instruction_t *instruction, - uint32_t source_logical_program_counter, - const vmbin_reference_t *references, size_t reference_count, - vmbin_instruction_view_t *output_view); - -_Static_assert(sizeof(vmbin_instruction_t) == 16U, - "vmbin instructions must remain 16 bytes"); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/runtimec/vmbin/interpreter.c b/runtimec/vmbin/interpreter.c index 2953b949..f5acd361 100644 --- a/runtimec/vmbin/interpreter.c +++ b/runtimec/vmbin/interpreter.c @@ -5,26 +5,32 @@ */ #include "interpreter.h" -#include "interpreter_dispatch.h" #include runtimec_status_t -vmbin_execute(vmbin_frame_t *frame, +vmbin_execute(const binrwir_program_t *program, + const binrwir_execution_plan_t *execution_plan, + binrwir_execution_frame_t *frame, const vmbin_builtin_registry_t *builtin_registry, - vmbin_profile_t *profile, vmbin_exit_t *output_exit) { + vmbin_profile_t *profile, + binrwir_execution_exit_t *output_exit) { + (void)execution_plan; (void)profile; if (output_exit != NULL) { memset(output_exit, 0, sizeof(*output_exit)); - output_exit->kind = VMBIN_EXIT_ERROR; - output_exit->status = RUNTIMEC_STATUS_NOT_IMPLEMENTED; - output_exit->logical_program_counter = VMBIN_PROGRAM_COUNTER_NONE; + output_exit->kind = BINRWIR_EXECUTION_EXIT_ERROR; + output_exit->status = RUNTIMEC_STATUS_INVALID; + output_exit->logical_program_counter = + BINRWIR_EXECUTION_PROGRAM_COUNTER_NONE; output_exit->resume_logical_program_counter = - VMBIN_PROGRAM_COUNTER_NONE; + BINRWIR_EXECUTION_PROGRAM_COUNTER_NONE; } - if (frame == NULL || builtin_registry == NULL || output_exit == NULL) { + if (program == NULL || frame == NULL || builtin_registry == NULL || + output_exit == NULL) { return RUNTIMEC_STATUS_INVALID; } + output_exit->status = RUNTIMEC_STATUS_NOT_IMPLEMENTED; return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } diff --git a/runtimec/vmbin/interpreter.h b/runtimec/vmbin/interpreter.h index 476dc2a2..e05b0b0b 100644 --- a/runtimec/vmbin/interpreter.h +++ b/runtimec/vmbin/interpreter.h @@ -4,14 +4,16 @@ /* * 组件:vmbin/interpreter * 作用:定义唯一完整的 BinRWIR 正确性执行入口。 - * 联系:engine route 是唯一调用者;vmjit 拒绝时回到此入口。 - * 约束:generic、typed、fused、continuous 只能是本解释器内部策略。 + * 联系:engine route 是唯一调用者;BinRWIR Compiler 可提供只读执行计划。 + * 约束:执行计划可为空;此时仍须执行全部合法 canonical BinRWIR。 */ +#include "binrwir/execution_exit.h" +#include "binrwir/execution_frame.h" +#include "binrwir/execution_plan.h" +#include "binrwir/program.h" #include "builtin/registry.h" #include "contract/status.h" -#include "exit.h" -#include "frame.h" #include "profile.h" #ifdef __cplusplus @@ -20,9 +22,12 @@ extern "C" { /* 从 Frame 的当前逻辑程序计数器开始执行,直到产生结构化退出。 */ runtimec_status_t -vmbin_execute(vmbin_frame_t *frame, +vmbin_execute(const binrwir_program_t *program, + const binrwir_execution_plan_t *execution_plan, + binrwir_execution_frame_t *frame, const vmbin_builtin_registry_t *builtin_registry, - vmbin_profile_t *profile, vmbin_exit_t *output_exit); + vmbin_profile_t *profile, + binrwir_execution_exit_t *output_exit); #ifdef __cplusplus } diff --git a/runtimec/vmbin/interpreter_dispatch.c b/runtimec/vmbin/interpreter_dispatch.c deleted file mode 100644 index dae57fb3..00000000 --- a/runtimec/vmbin/interpreter_dispatch.c +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 组件:vmbin/interpreter 内部派生 dispatch 的失败桩 - * 作用:保留派生能力边界,但不实现处理函数选择或执行语义。 - */ - -#include "vmbin/interpreter_dispatch.h" - -#include - -runtimec_status_t vmbin_interpreter_dispatch_table_create( - const vmbin_program_t *program, - const runtimec_allocator_t *allocator, - vmbin_interpreter_dispatch_table_t **output_table) { - if (output_table != NULL) { - *output_table = NULL; - } - if (program == NULL || allocator == NULL || output_table == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmbin_interpreter_dispatch_table_destroy( - vmbin_interpreter_dispatch_table_t *table) { - if (table == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmbin_interpreter_dispatch_table_get( - const vmbin_interpreter_dispatch_table_t *table, - uint32_t instruction_identifier, - vmbin_interpreter_dispatch_entry_t *output_entry) { - if (output_entry != NULL) { - memset(output_entry, 0, sizeof(*output_entry)); - output_entry->handler_identifier = UINT16_MAX; - } - if (table == NULL || instruction_identifier == VMBIN_IDENTIFIER_NONE || - output_entry == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} diff --git a/runtimec/vmbin/interpreter_dispatch.h b/runtimec/vmbin/interpreter_dispatch.h deleted file mode 100644 index bc2f50be..00000000 --- a/runtimec/vmbin/interpreter_dispatch.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef VMBIN_INTERPRETER_DISPATCH_H -#define VMBIN_INTERPRETER_DISPATCH_H - -/* - * 组件:vmbin/interpreter 内部派生 dispatch - * 作用:把不可变 Program 派生为解释器私有的处理函数选择表。 - * 联系:只有 interpreter 构造和消费;Program 与 vmjit 均不依赖本表。 - * 约束:可整层丢弃重建,不拥有语义,不构成执行入口或第三执行器。 - */ - -#include - -#include "contract/allocator.h" -#include "contract/status.h" -#include "vmbin/program.h" - -typedef struct vmbin_interpreter_dispatch_table - vmbin_interpreter_dispatch_table_t; - -typedef struct vmbin_interpreter_dispatch_entry { - uint16_t handler_identifier; - uint8_t handler_form; - uint8_t flags; -} vmbin_interpreter_dispatch_entry_t; - -runtimec_status_t vmbin_interpreter_dispatch_table_create( - const vmbin_program_t *program, - const runtimec_allocator_t *allocator, - vmbin_interpreter_dispatch_table_t **output_table); - -runtimec_status_t vmbin_interpreter_dispatch_table_destroy( - vmbin_interpreter_dispatch_table_t *table); - -runtimec_status_t vmbin_interpreter_dispatch_table_get( - const vmbin_interpreter_dispatch_table_t *table, - uint32_t instruction_identifier, - vmbin_interpreter_dispatch_entry_t *output_entry); - -#endif diff --git a/runtimec/vmbin/profile.h b/runtimec/vmbin/profile.h index 816964ee..381d87ff 100644 --- a/runtimec/vmbin/profile.h +++ b/runtimec/vmbin/profile.h @@ -4,7 +4,7 @@ /* * 组件:vmbin/profile * 作用:保存 session 拥有的可丢弃执行统计。 - * 联系:interpreter 更新;engine session 持有;vmjit 可以读取。 + * 联系:interpreter 更新;engine session 持有。 * 约束:统计不是正确性依赖,也不得进入不可变 Program。 */ @@ -20,7 +20,6 @@ extern "C" { typedef struct vmbin_profile_counter { uint64_t instruction_count; uint64_t dispatch_ticks; - uint64_t fallback_count; } vmbin_profile_counter_t; typedef struct vmbin_profile { diff --git a/runtimec/vmbin/program.h b/runtimec/vmbin/program.h deleted file mode 100644 index 95354979..00000000 --- a/runtimec/vmbin/program.h +++ /dev/null @@ -1,216 +0,0 @@ -#ifndef VMBIN_PROGRAM_H -#define VMBIN_PROGRAM_H - -/* - * 组件:vmbin/program - * 作用:定义不可变 BinRWIR Program、构造器和只读视图。 - * 联系:vmkv 构造 Program;interpreter 与 vmjit 只读消费。 - * 约束:可变绑定、统计、缓存和机器码不得进入 Program。 - */ - -#include -#include - -#include "contract/allocator.h" -#include "contract/status.h" -#include "vmbin/instruction.h" -#include "vmbin/reference.h" -#include "vmbin/signature.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define VMBIN_IDENTIFIER_NONE UINT32_MAX - -typedef enum vmbin_program_flags { - VMBIN_PROGRAM_FLAG_NONE = 0, - VMBIN_PROGRAM_FLAG_TYPED = 1U << 0, - VMBIN_PROGRAM_FLAG_HAS_CONTROL_FLOW = 1U << 1, - VMBIN_PROGRAM_FLAG_HAS_EFFECTS = 1U << 2 -} vmbin_program_flags_t; - -typedef enum vmbin_register_derived_access { - VMBIN_REGISTER_DERIVED_ACCESS_NONE = 0, - VMBIN_REGISTER_DERIVED_ACCESS_READ = 1U << 0, - VMBIN_REGISTER_DERIVED_ACCESS_WRITE = 1U << 1 -} vmbin_register_derived_access_t; - -typedef enum vmbin_register_flags { - VMBIN_REGISTER_FLAG_NONE = 0, - VMBIN_REGISTER_FLAG_PARAMETER = 1U << 0, - VMBIN_REGISTER_FLAG_POINTER = 1U << 1, - VMBIN_REGISTER_FLAG_MEMBER = 1U << 2, - VMBIN_REGISTER_FLAG_PINNED = 1U << 3 -} vmbin_register_flags_t; - -typedef enum vmbin_literal_flags { - VMBIN_LITERAL_FLAG_NONE = 0, - VMBIN_LITERAL_FLAG_NULL = 1U << 0, - VMBIN_LITERAL_FLAG_RELOCATABLE = 1U << 1 -} vmbin_literal_flags_t; - -typedef enum vmbin_callsite_flags { - VMBIN_CALLSITE_FLAG_NONE = 0, - VMBIN_CALLSITE_FLAG_TAIL = 1U << 0, - VMBIN_CALLSITE_FLAG_MAY_YIELD = 1U << 1 -} vmbin_callsite_flags_t; - -typedef enum vmbin_call_alias_mapping_flags { - VMBIN_CALL_ALIAS_MAPPING_FLAG_NONE = 0, - VMBIN_CALL_ALIAS_MAPPING_FLAG_PROJECTED = 1U << 0, - VMBIN_CALL_ALIAS_MAPPING_FLAG_INDIRECT = 1U << 1 -} vmbin_call_alias_mapping_flags_t; - -typedef struct vmbin_program_identity { - uint64_t snapshot_generation; - uint64_t program_generation; - uint32_t schema_version; - uint32_t rwir_manifest_version; - uint32_t binrwir_binary_interface_generation; - uint32_t compiler_revision; -} vmbin_program_identity_t; - -typedef struct vmbin_register_descriptor { - uint32_t symbol_identifier; - uint32_t type_identifier; - uint32_t auxiliary; - uint16_t flags; - /* Cache only: validators derive and check this against the signature. */ - uint8_t derived_access; - uint8_t reserved_byte; -} vmbin_register_descriptor_t; - -typedef struct vmbin_literal_descriptor { - uint32_t byte_offset; - uint32_t byte_size; - uint32_t type_identifier; - uint16_t flags; - uint16_t alignment; -} vmbin_literal_descriptor_t; - -typedef struct vmbin_symbol_descriptor { - uint32_t byte_offset; - uint32_t byte_size; -} vmbin_symbol_descriptor_t; - -typedef struct vmbin_callsite { - uint32_t callee_symbol_identifier; - uint32_t binding_offset; - uint32_t alias_mapping_offset; - uint8_t read_count; - uint8_t write_count; - uint8_t alias_mapping_count; - uint8_t flags; -} vmbin_callsite_t; - -typedef struct vmbin_call_alias_mapping { - uint16_t read_argument; - uint16_t write_argument; - uint16_t alias_rule_ordinal; - uint16_t flags; -} vmbin_call_alias_mapping_t; - -typedef struct vmbin_callsite_build_request { - uint32_t callee_symbol_identifier; - uint8_t flags; - uint8_t reserved_bytes[3]; - vmbin_reference_span_t read_bindings; - vmbin_reference_span_t write_bindings; - const vmbin_call_alias_mapping_t *alias_mappings; - size_t alias_mapping_count; -} vmbin_callsite_build_request_t; - -typedef struct vmbin_program vmbin_program_t; -typedef struct vmbin_program_builder vmbin_program_builder_t; - -typedef struct vmbin_program_view { - vmbin_program_identity_t identity; - vmbin_signature_view_t signature; - const vmbin_instruction_t *instructions; - size_t instruction_count; - const uint32_t *source_logical_program_counters; - const vmbin_reference_t *references; - size_t reference_count; - const vmbin_register_descriptor_t *registers; - size_t register_count; - const vmbin_literal_descriptor_t *literals; - size_t literal_count; - const vmbin_symbol_descriptor_t *symbols; - size_t symbol_count; - const vmbin_callsite_t *callsites; - size_t callsite_count; - const vmbin_call_alias_mapping_t *alias_mappings; - size_t alias_mapping_count; - const uint8_t *literal_bytes; - size_t literal_byte_count; - const uint8_t *symbol_bytes; - size_t symbol_byte_count; - uint32_t flags; - uint32_t reserved_32_bits; -} vmbin_program_view_t; - -runtimec_status_t vmbin_program_get_identity( - const vmbin_program_t *program, vmbin_program_identity_t *output_identity); -runtimec_status_t vmbin_program_validate(const vmbin_program_t *program); -runtimec_status_t vmbin_program_get_view(const vmbin_program_t *program, - vmbin_program_view_t *output_view); -runtimec_status_t vmbin_program_get_instruction( - const vmbin_program_t *program, uint32_t instruction_identifier, - vmbin_instruction_view_t *output_instruction); -runtimec_status_t vmbin_program_destroy(vmbin_program_t *program); - -runtimec_status_t vmbin_program_builder_create( - const runtimec_allocator_t *allocator, - const vmbin_program_identity_t *identity, - vmbin_program_builder_t **output_builder); -runtimec_status_t vmbin_program_builder_reset(vmbin_program_builder_t *builder); -runtimec_status_t vmbin_program_builder_destroy( - vmbin_program_builder_t *builder); - -runtimec_status_t vmbin_program_builder_add_parameter( - vmbin_program_builder_t *builder, vmbin_parameter_direction_t direction, - uint32_t register_identifier, uint16_t *output_parameter_ordinal); -runtimec_status_t vmbin_program_builder_add_alias_rule( - vmbin_program_builder_t *builder, const vmbin_alias_rule_t *rule, - uint32_t *output_alias_rule_identifier); -runtimec_status_t vmbin_program_builder_add_register( - vmbin_program_builder_t *builder, - const vmbin_register_descriptor_t *register_descriptor, - uint32_t *output_register_identifier); -runtimec_status_t vmbin_program_builder_add_symbol( - vmbin_program_builder_t *builder, const uint8_t *bytes, size_t byte_count, - uint32_t *output_symbol_identifier); -runtimec_status_t vmbin_program_builder_add_literal( - vmbin_program_builder_t *builder, - const vmbin_literal_descriptor_t *literal_descriptor, - const uint8_t *bytes, size_t byte_count, - uint32_t *output_literal_identifier); -runtimec_status_t vmbin_program_builder_add_callsite( - vmbin_program_builder_t *builder, - const vmbin_callsite_build_request_t *request, - uint32_t *output_callsite_identifier); -runtimec_status_t vmbin_program_builder_add_instruction( - vmbin_program_builder_t *builder, - const vmbin_instruction_build_request_t *request, - uint32_t *output_instruction_identifier); -runtimec_status_t -vmbin_program_builder_finalize(vmbin_program_builder_t *builder, - vmbin_program_t **output_program); - -_Static_assert(sizeof(vmbin_register_descriptor_t) == 16U, - "vmbin register descriptions must remain 16 bytes"); -_Static_assert(sizeof(vmbin_program_identity_t) == 32U, - "vmbin program identity must remain 32 bytes"); -_Static_assert(sizeof(vmbin_literal_descriptor_t) == 16U, - "vmbin literal descriptions must remain 16 bytes"); -_Static_assert(sizeof(vmbin_callsite_t) == 16U, - "vmbin callsites must remain 16 bytes"); -_Static_assert(sizeof(vmbin_call_alias_mapping_t) == 8U, - "vmbin call alias mappings must remain 8 bytes"); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/runtimec/vmbin/reference.c b/runtimec/vmbin/reference.c deleted file mode 100644 index d05c2627..00000000 --- a/runtimec/vmbin/reference.c +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 组件:vmbin/reference 的实现 - * 作用:引用创建、校验与读取入口;业务语义尚未实现。 - * 约束:所有输出先进入明确无效状态,再返回未实现。 - */ - -#include "vmbin/reference.h" - -#include - -runtimec_status_t vmbin_reference_create( - vmbin_reference_kind_t kind, uint32_t identifier, - vmbin_reference_t *output_reference) { - if (output_reference != NULL) { - *output_reference = VMBIN_REFERENCE_INVALID; - } - if (output_reference == NULL || kind <= VMBIN_REFERENCE_KIND_INVALID || - kind > VMBIN_REFERENCE_KIND_SYMBOL || - identifier > VMBIN_REFERENCE_IDENTIFIER_MASK) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmbin_reference_validate(vmbin_reference_t reference) { - if (reference == VMBIN_REFERENCE_INVALID) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmbin_reference_get_kind( - vmbin_reference_t reference, vmbin_reference_kind_t *output_kind) { - if (output_kind != NULL) { - *output_kind = VMBIN_REFERENCE_KIND_INVALID; - } - if (output_kind == NULL || reference == VMBIN_REFERENCE_INVALID) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmbin_reference_get_identifier( - vmbin_reference_t reference, uint32_t *output_identifier) { - if (output_identifier != NULL) { - *output_identifier = UINT32_MAX; - } - if (output_identifier == NULL || reference == VMBIN_REFERENCE_INVALID) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} diff --git a/runtimec/vmbin/reference.h b/runtimec/vmbin/reference.h deleted file mode 100644 index 0d77cc43..00000000 --- a/runtimec/vmbin/reference.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef VMBIN_REFERENCE_H -#define VMBIN_REFERENCE_H - -/* - * 组件:vmbin/reference - * 作用:以 32 位紧凑值表示寄存器、字面量或符号引用。 - * 联系:instruction 按读取区和写入区保存引用,Program 提供只读视图。 - * 约束:引用不重复保存方向;非法引用使用全一位模式。 - */ - -#include - -#include "contract/status.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef uint32_t vmbin_reference_t; - -typedef enum vmbin_reference_kind { - VMBIN_REFERENCE_KIND_INVALID = 0, - VMBIN_REFERENCE_KIND_REGISTER = 1, - VMBIN_REFERENCE_KIND_LITERAL = 2, - VMBIN_REFERENCE_KIND_SYMBOL = 3 -} vmbin_reference_kind_t; - -#define VMBIN_REFERENCE_KIND_SHIFT 30U -#define VMBIN_REFERENCE_KIND_MASK UINT32_C(0xC0000000) -#define VMBIN_REFERENCE_IDENTIFIER_MASK UINT32_C(0x3FFFFFFF) -#define VMBIN_REFERENCE_INVALID UINT32_MAX - -runtimec_status_t vmbin_reference_create( - vmbin_reference_kind_t kind, uint32_t identifier, - vmbin_reference_t *output_reference); -runtimec_status_t vmbin_reference_validate(vmbin_reference_t reference); -runtimec_status_t vmbin_reference_get_kind( - vmbin_reference_t reference, vmbin_reference_kind_t *output_kind); -runtimec_status_t vmbin_reference_get_identifier( - vmbin_reference_t reference, uint32_t *output_identifier); - -_Static_assert(sizeof(vmbin_reference_t) == 4U, - "vmbin references must remain 4 bytes"); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/runtimec/vmbin/signature.h b/runtimec/vmbin/signature.h deleted file mode 100644 index 06375215..00000000 --- a/runtimec/vmbin/signature.h +++ /dev/null @@ -1,68 +0,0 @@ -#ifndef VMBIN_SIGNATURE_H -#define VMBIN_SIGNATURE_H - -/* - * 组件:vmbin/signature - * 作用:定义读参数、写参数和跨方向显式别名规则。 - * 联系:vmkv 生成签名;call 与 vmjit 按同一签名校验绑定。 - * 约束:签名是别名策略的唯一所有者;未知关系不得猜测为不重叠。 - */ - -#include -#include - -#include "contract/status.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum vmbin_parameter_direction { - VMBIN_PARAMETER_DIRECTION_INVALID = 0, - VMBIN_PARAMETER_DIRECTION_READ = 1, - VMBIN_PARAMETER_DIRECTION_WRITE = 2 -} vmbin_parameter_direction_t; - -typedef enum vmbin_alias_policy { - VMBIN_ALIAS_POLICY_INVALID = 0, - VMBIN_ALIAS_NO_ALIAS = 1, - VMBIN_ALIAS_MAY_ALIAS = 2, - VMBIN_ALIAS_MUST_ALIAS = 3 -} vmbin_alias_policy_t; - -typedef enum vmbin_alias_rule_flags { - VMBIN_ALIAS_RULE_FLAG_NONE = 0, - VMBIN_ALIAS_RULE_FLAG_PROJECTION = 1U << 0 -} vmbin_alias_rule_flags_t; - -typedef struct vmbin_alias_rule { - uint16_t read_parameter; - uint16_t write_parameter; - uint8_t policy; - uint8_t flags; - uint16_t reserved_16_bits; -} vmbin_alias_rule_t; - -typedef struct vmbin_signature_view { - const uint32_t *read_parameters; - size_t read_parameter_count; - const uint32_t *write_parameters; - size_t write_parameter_count; - const vmbin_alias_rule_t *alias_rules; - size_t alias_rule_count; -} vmbin_signature_view_t; - -runtimec_status_t -vmbin_signature_validate(const vmbin_signature_view_t *signature); -runtimec_status_t vmbin_signature_get_alias_policy( - const vmbin_signature_view_t *signature, uint16_t read_parameter, - uint16_t write_parameter, vmbin_alias_policy_t *output_policy); - -_Static_assert(sizeof(vmbin_alias_rule_t) == 8U, - "vmbin alias rules must remain 8 bytes"); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/runtimec/vmbin/value.h b/runtimec/vmbin/value.h deleted file mode 100644 index 130e0629..00000000 --- a/runtimec/vmbin/value.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef VMBIN_VALUE_H -#define VMBIN_VALUE_H - -/* - * 组件:vmbin/value - * 作用:vmbin 与 vmjit 共享的 32 字节目标中立值槽。 - * 联系:Binding、Frame、interpreter 与 vmjit 共同使用。 - * 约束:布局是内部二进制接口,不是持久格式。 - */ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum vmbin_value_tag { - VMBIN_VALUE_INVALID = 0, - VMBIN_VALUE_EMPTY, - VMBIN_VALUE_BOOL, - VMBIN_VALUE_SIGNED, - VMBIN_VALUE_UNSIGNED, - VMBIN_VALUE_FLOAT, - VMBIN_VALUE_REFERENCE, - VMBIN_VALUE_ARRAY, - VMBIN_VALUE_DYNAMIC -} vmbin_value_tag_t; - -typedef enum vmbin_value_flags { - VMBIN_VALUE_FLAG_NONE = 0, - VMBIN_VALUE_FLAG_OWNED = 1U << 0, - VMBIN_VALUE_FLAG_BORROWED = 1U << 1, - VMBIN_VALUE_FLAG_NULLABLE = 1U << 2, - VMBIN_VALUE_FLAG_DIRTY = 1U << 3, - VMBIN_VALUE_FLAG_PINNED = 1U << 4 -} vmbin_value_flags_t; - -typedef struct vmbin_value_slot { - uint64_t payload_low; /* 标量位或句柄标识符,低 64 位 */ - uint64_t payload_high; /* 保留/高 64 位 */ - uint32_t type_identifier; /* canonical 类型或形状标识符 */ - uint16_t tag; /* vmbin_value_tag_t */ - uint16_t flags; /* owned/borrowed/nullable/dirty/pinned */ - uint32_t generation; /* 句柄/借用的世代守卫 */ - uint32_t reserved_32_bits; -} vmbin_value_slot_t; - -_Static_assert(sizeof(vmbin_value_slot_t) == 32U, - "vmbin value slot must remain 32 bytes"); -_Static_assert(offsetof(vmbin_value_slot_t, payload_low) == 0U, - "vmbin value payload must start at offset zero"); -_Static_assert(offsetof(vmbin_value_slot_t, generation) == 24U, - "vmbin value generation offset is contractual"); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/runtimec/vmjit/backend.h b/runtimec/vmjit/backend.h index 0238d904..3ef438cb 100644 --- a/runtimec/vmjit/backend.h +++ b/runtimec/vmjit/backend.h @@ -7,13 +7,14 @@ * AArch64 是并列 peer,谁也不是另一个的默认模板。 * backend 只拥有指令编码、调用约定实现、寄存器/spill、常量池/ * branch fixup、可执行页切换与 instruction cache 同步;不拥有 Program 语义、 - * eligibility、cache identity 或 fallback policy。 + * eligibility 或 cache identity。 * 联系:vmjit/compiler 选择 backend;emit 请求来自 lower;输出由 * code_memory 发布。backend 禁止读 RWIR、kvspace 或 route policy。 - * 约束:未知 processor 或缺 feature 必须显式 fallback,不得默认 x86_64。 + * 约束:未知 processor 或缺 feature 必须返回 UNSUPPORTED,不得默认 x86_64。 */ #include +#include #include #include "contract/status.h" #include "contract/view.h" @@ -32,8 +33,18 @@ typedef struct vmjit_target_t { runtimec_string_view_t triple; uint64_t feature_mask; } vmjit_target_t; -typedef struct vmjit_emit_request_t vmjit_emit_request_t; -typedef struct vmjit_emit_result_t vmjit_emit_result_t; + +struct vmjit_lowered_program; + +typedef struct vmjit_emit_request_t { + const struct vmjit_lowered_program *lowered_program; + runtimec_bytes_buffer_t writable_code; +} vmjit_emit_request_t; + +typedef struct vmjit_emit_result_t { + size_t machine_code_size; + size_t entry_byte_offset; +} vmjit_emit_result_t; typedef struct vmjit_backend_t { vmjit_architecture_t architecture; runtimec_string_view_t name; diff --git a/runtimec/vmjit/backend/aarch64.c b/runtimec/vmjit/backend/aarch64.c index 72932963..4db82ef5 100644 --- a/runtimec/vmjit/backend/aarch64.c +++ b/runtimec/vmjit/backend/aarch64.c @@ -1,8 +1,7 @@ /* * 组件:vmjit/backend/aarch64 - * 作用:AArch64 backend 入口;当前显式返回 FALLBACK。它不是 x86 完成后的 - * 占位:必须真实实现同一 backend contract,或 - * 显式 fallback(空桩不得被报告为 vmjit 可用)。 + * 作用:AArch64 backend 入口;当前显式返回 UNSUPPORTED。它不是 x86 完成后的 + * 占位:必须真实实现同一 backend contract,否则不可编译。 * 联系:与 x86_64 peer;只消费 lower/emit request。 */ @@ -16,5 +15,5 @@ runtimec_status_t vmjit_aarch64_backend( return RUNTIMEC_STATUS_INVALID; } *output_backend = NULL; - return RUNTIMEC_STATUS_FALLBACK; + return RUNTIMEC_STATUS_UNSUPPORTED; } diff --git a/runtimec/vmjit/backend/backend.c b/runtimec/vmjit/backend/backend.c index 74542fca..276e748a 100644 --- a/runtimec/vmjit/backend/backend.c +++ b/runtimec/vmjit/backend/backend.c @@ -1,6 +1,6 @@ /* * 组件:vmjit/backend/backend - * 作用:按目标选择 backend;当前显式返回 FALLBACK。未知 processor + * 作用:按目标选择 backend;当前显式返回 UNSUPPORTED。未知 processor * 不得默认 x86_64。 * 联系:vmjit/compiler 调用;x86_64/aarch64 是并列 peer。 */ @@ -18,5 +18,5 @@ runtimec_status_t vmjit_backend_for_target( if (target == NULL || output_backend == NULL) { return RUNTIMEC_STATUS_INVALID; } - return RUNTIMEC_STATUS_FALLBACK; + return RUNTIMEC_STATUS_UNSUPPORTED; } diff --git a/runtimec/vmjit/backend/x86_64.c b/runtimec/vmjit/backend/x86_64.c index 882ad25e..c8d9044f 100644 --- a/runtimec/vmjit/backend/x86_64.c +++ b/runtimec/vmjit/backend/x86_64.c @@ -1,7 +1,7 @@ /* * 组件:vmjit/backend/x86_64 - * 作用:x86_64 backend 入口;当前显式返回 FALLBACK,route - * 回退 vmbin。它与 AArch64 是 peer 关系,只拥有 + * 作用:x86_64 backend 入口;当前显式返回 UNSUPPORTED。它与 AArch64 + * 是 peer 关系,只拥有 * 目标机制(编码、调用约定、寄存器、spill、常量池、branch fixup、 * 代码页切换与 instruction cache 同步)。 * 联系:vmjit/compiler 通过 backend contract 选择;不得读 RWIR/kvspace。 @@ -17,5 +17,5 @@ runtimec_status_t vmjit_x86_64_backend( return RUNTIMEC_STATUS_INVALID; } *output_backend = NULL; - return RUNTIMEC_STATUS_FALLBACK; + return RUNTIMEC_STATUS_UNSUPPORTED; } diff --git a/runtimec/vmjit/cache.h b/runtimec/vmjit/cache.h deleted file mode 100644 index 31b94c75..00000000 --- a/runtimec/vmjit/cache.h +++ /dev/null @@ -1,58 +0,0 @@ -#ifndef RUNTIMEC_VMJIT_CACHE_H -#define RUNTIMEC_VMJIT_CACHE_H - -/* - * 组件:vmjit/cache - * 作用:代码缓存的 key 与 get_or_compile:key 至少包含 Program snapshot/ - * generation、执行 binary interface、架构、processor feature、tier、 - * code generation revision 与 vmjit generation; - * 活动 frame/lease 必须 pin 住 - * Program/code,新 generation 不得热替换仍执行的旧页。 - * 联系:engine/session 拥有 code cache;vmjit/compiler 生成 code; - * invalidate 由统一失效模型触发。 - * 约束:negative cache 与 retired list 是可删除 sidecar;cache 不是 - * Program 的事实源。 - */ - -#include "contract/allocator.h" -#include "contract/snapshot.h" -#include "contract/status.h" -#include "vmjit/compiler.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct vmjit_code_cache_t vmjit_code_cache_t; -typedef struct vmjit_cache_key_t { - runtimec_snapshot_t snapshot; - uint16_t execution_binary_interface_major_version; - uint16_t optimization_tier; - uint32_t code_generation_revision; - uint64_t feature_mask; - uint64_t vmjit_generation; -} vmjit_cache_key_t; -runtimec_status_t vmjit_code_cache_create( - runtimec_allocator_t allocator, - size_t capacity, - vmjit_code_cache_t **output_cache, - runtimec_error_t *error); -runtimec_status_t vmjit_code_cache_destroy(vmjit_code_cache_t *cache); -runtimec_status_t vmjit_code_cache_clear(vmjit_code_cache_t *cache); -runtimec_status_t vmjit_code_cache_invalidate( - vmjit_code_cache_t *cache, - const runtimec_snapshot_t *snapshot); -runtimec_status_t vmjit_code_cache_get_or_compile( - vmjit_code_cache_t *cache, - vmjit_compiler_t *compiler, - const vmjit_cache_key_t *key, - const vmjit_verified_program_t *verified_program, - vmjit_code_t **output_code, - vmjit_refusal_t *refusal, - runtimec_error_t *error); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/runtimec/vmjit/code.c b/runtimec/vmjit/code.c new file mode 100644 index 00000000..8419ad5e --- /dev/null +++ b/runtimec/vmjit/code.c @@ -0,0 +1,46 @@ +/* vmjit/code 的失败封闭骨架。 */ + +#include "vmjit/code.h" + +runtimec_status_t vmjit_code_create( + vmjit_code_memory_t *memory, + size_t machine_code_size, + size_t entry_byte_offset, + vmjit_code_t **output_code, + runtimec_error_t *error) { + (void)error; + if (output_code != NULL) { + *output_code = NULL; + } + if (memory == NULL || machine_code_size == 0U || + entry_byte_offset >= machine_code_size || output_code == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_code_retain(vmjit_code_t *code) { + if (code == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_code_release(vmjit_code_t *code) { + if (code == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_code_get_machine_code_function( + const vmjit_code_t *code, + vmjit_machine_code_function_t *output_function) { + if (output_function != NULL) { + *output_function = NULL; + } + if (code == NULL || output_function == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/vmjit/code.h b/runtimec/vmjit/code.h index 463e3742..d0b6003c 100644 --- a/runtimec/vmjit/code.h +++ b/runtimec/vmjit/code.h @@ -5,13 +5,17 @@ * 组件:vmjit/code * 作用:已发布机器码的引用计数句柄:retain/release 保证执行期间 code * 不被回收;entry 返回调用入口。 - * 联系:code cache 产生并持有;engine/route 在执行前取 code lease; - * retired 后等最后一个 lease 释放再回收只读可执行页。 + * 联系:vmjit 编译阶段产生;BinRWIR compilation 持有 code,compilation + * repository 的 lease 保证执行期间有效;最后一个引用释放后回收 + * 只读可执行页。 * 约束:句柄不暴露机器地址给持久层;事务边界由 route 保证。 */ +#include + #include "contract/snapshot.h" #include "vmjit/backend.h" +#include "vmjit/code_memory.h" #include "vmjit/execution_interface.h" #ifdef __cplusplus @@ -19,6 +23,13 @@ extern "C" { #endif typedef struct vmjit_code vmjit_code_t; +/* 成功时 code 接管已发布 memory;失败时 memory 仍归调用者。 */ +runtimec_status_t vmjit_code_create( + vmjit_code_memory_t *memory, + size_t machine_code_size, + size_t entry_byte_offset, + vmjit_code_t **output_code, + runtimec_error_t *error); runtimec_status_t vmjit_code_retain(vmjit_code_t *code); runtimec_status_t vmjit_code_release(vmjit_code_t *code); runtimec_status_t vmjit_code_get_machine_code_function( diff --git a/runtimec/vmjit/code_memory.c b/runtimec/vmjit/code_memory.c new file mode 100644 index 00000000..fcba6195 --- /dev/null +++ b/runtimec/vmjit/code_memory.c @@ -0,0 +1,49 @@ +/* vmjit/code_memory 的失败封闭骨架。 */ + +#include "vmjit/code_memory.h" + +runtimec_status_t vmjit_code_memory_create( + size_t capacity, + vmjit_code_memory_t **output_memory, + runtimec_error_t *error) { + (void)error; + if (output_memory != NULL) { + *output_memory = NULL; + } + if (capacity == 0U || output_memory == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_code_memory_writable_view( + vmjit_code_memory_t *memory, + runtimec_bytes_buffer_t *output_buffer, + runtimec_error_t *error) { + (void)error; + if (output_buffer != NULL) { + runtimec_bytes_buffer_reset(output_buffer); + } + if (memory == NULL || output_buffer == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_code_memory_publish( + vmjit_code_memory_t *memory, + size_t code_size, + runtimec_error_t *error) { + (void)error; + if (memory == NULL || code_size == 0U) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_code_memory_destroy(vmjit_code_memory_t *memory) { + if (memory == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/vmjit/code_memory.h b/runtimec/vmjit/code_memory.h index b74e6f39..7dce80ff 100644 --- a/runtimec/vmjit/code_memory.h +++ b/runtimec/vmjit/code_memory.h @@ -6,8 +6,8 @@ * 作用:可执行页的生命周期:分配可写页 -> emit/relocate -> 切换可执行 * 并取消可写 -> 平台 instruction cache 同步 -> 由 code lease 管理回收。 * 内存不可同时可写与可执行。 - * 联系:backend 写入 writable_view;compiler 调 publish;code cache - * 管理 lease/retired。 + * 联系:backend 写入 writable_view;vmjit compiler 调 publish;完成的 + * BinRWIR compilation 管理机器码生命周期。 * 约束:发布失败或 entitlement 不足时返回错误,绝不执行未发布内存。 */ diff --git a/runtimec/vmjit/compiler.c b/runtimec/vmjit/compiler.c new file mode 100644 index 00000000..1a7b7ce2 --- /dev/null +++ b/runtimec/vmjit/compiler.c @@ -0,0 +1,61 @@ +/* vmjit/compiler 的失败封闭骨架。 */ + +#include "vmjit/compiler.h" + +static void vmjit_compilation_result_reset( + vmjit_compilation_result_t *result, + vmjit_compilation_outcome_t outcome, + vmjit_refusal_reason_t refusal_reason) { + if (result != NULL) { + *result = (vmjit_compilation_result_t){0}; + result->outcome = outcome; + result->refusal.reason = refusal_reason; + } +} + +runtimec_status_t vmjit_compiler_create( + runtimec_allocator_t allocator, + const vmjit_compiler_configuration_t *configuration, + vmjit_compiler_t **output_compiler, + runtimec_error_t *error) { + (void)error; + if (output_compiler != NULL) { + *output_compiler = NULL; + } + if (!runtimec_allocator_is_valid(&allocator) || configuration == NULL || + configuration->structure_size != sizeof(*configuration) || + configuration->machine_code_capacity == 0U || + output_compiler == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_compiler_destroy(vmjit_compiler_t *compiler) { + if (compiler == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_compile( + vmjit_compiler_t *compiler, + const binrwir_program_t *program, + const binrwir_execution_plan_t *execution_plan, + vmjit_compilation_result_t *output_result, + runtimec_error_t *error) { + (void)error; + vmjit_compilation_result_reset( + output_result, + VMJIT_COMPILATION_OUTCOME_INVALID, + VMJIT_REFUSAL_INVALID_PROGRAM); + if (compiler == NULL || program == NULL || execution_plan == NULL || + output_result == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + vmjit_compilation_result_reset( + output_result, + VMJIT_COMPILATION_OUTCOME_ERROR, + VMJIT_REFUSAL_NONE); + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/vmjit/compiler.h b/runtimec/vmjit/compiler.h index 14dab315..a2a2a6d3 100644 --- a/runtimec/vmjit/compiler.h +++ b/runtimec/vmjit/compiler.h @@ -3,21 +3,22 @@ /* * 组件:vmjit/compiler - * 作用:单一 vmjit pipeline 的编排入口:configuration、target、code cache - * limit、generation 与 compile(Program -> code)。所有优化层级共享 - * 同一 planner、binary interface、cache 与路由。 - * 联系:engine/route 在 vmjit enabled 且 eligible 时调用;输入是 verifier - * 产生的只读 verified Program;输出 code 交给 cache。 - * 约束:compile 不读 RWIR/kvspace;无法证明安全时拒绝,不“尽量执行”。 + * 作用:vmjit 机器码编译入口:消费 canonical Program 与顶层 BinRWIR + * Compiler 已生成的 execution plan,完成验证、lowering 与 backend 生成。 + * 联系:顶层 BinRWIR Compiler 在编译阶段调用;本组件先验证 canonical + * BinRWIR 与 execution plan,再生成机器码并返回编译判定。 + * 约束:compile 不读 RWIR/kvspace;只有 COMPILED 携带 code。内部阶段的 + * UNSUPPORTED 转成 SUCCESS + NOT_COMPILABLE;非法 BinRWIR、内存不足 + * 和内部错误返回原错误状态 + ERROR,不能建立可执行 code。 */ -#include #include #include #include "contract/allocator.h" #include "contract/status.h" -#include "vmbin/program.h" +#include "binrwir/execution_plan.h" +#include "binrwir/program.h" #include "vmjit/backend.h" #include "vmjit/code.h" #include "vmjit/verifier.h" @@ -27,25 +28,38 @@ extern "C" { #endif typedef struct vmjit_compiler_t vmjit_compiler_t; -typedef struct vmjit_config_t { +typedef enum vmjit_compilation_outcome_t { + VMJIT_COMPILATION_OUTCOME_INVALID = 0, + VMJIT_COMPILATION_OUTCOME_COMPILED = 1, + VMJIT_COMPILATION_OUTCOME_NOT_COMPILABLE = 2, + VMJIT_COMPILATION_OUTCOME_ERROR = 3 +} vmjit_compilation_outcome_t; +typedef struct vmjit_compilation_result_t { + vmjit_compilation_outcome_t outcome; + /* 仅 COMPILED 可非 NULL;其它 outcome 必须保持 NULL。 */ + vmjit_code_t *code; + vmjit_refusal_t refusal; +} vmjit_compilation_result_t; +typedef struct vmjit_compiler_configuration_t { uint32_t structure_size; - bool enabled; - size_t code_cache_limit; + size_t machine_code_capacity; uint64_t generation; vmjit_target_t target; -} vmjit_config_t; +} vmjit_compiler_configuration_t; + +/* create 必须复制 target.triple 字节;configuration 只在调用期间有效。 */ runtimec_status_t vmjit_compiler_create( runtimec_allocator_t allocator, - const vmjit_config_t *config, + const vmjit_compiler_configuration_t *configuration, vmjit_compiler_t **output_compiler, runtimec_error_t *error); runtimec_status_t vmjit_compiler_destroy(vmjit_compiler_t *compiler); runtimec_status_t vmjit_compile( vmjit_compiler_t *compiler, - const vmjit_verified_program_t *verified_program, - vmjit_code_t **output_code, - vmjit_refusal_t *refusal, + const binrwir_program_t *program, + const binrwir_execution_plan_t *execution_plan, + vmjit_compilation_result_t *output_result, runtimec_error_t *error); #ifdef __cplusplus diff --git a/runtimec/vmjit/execution_interface.c b/runtimec/vmjit/execution_interface.c new file mode 100644 index 00000000..133ec40b --- /dev/null +++ b/runtimec/vmjit/execution_interface.c @@ -0,0 +1,14 @@ +/* vmjit/execution_interface 的失败封闭骨架。 */ + +#include "vmjit/execution_interface.h" + +runtimec_status_t vmjit_execution_interface( + vmjit_execution_interface_t *output_interface) { + if (output_interface != NULL) { + *output_interface = (vmjit_execution_interface_t){0}; + } + if (output_interface == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/vmjit/execution_interface.h b/runtimec/vmjit/execution_interface.h index c24d7796..0bf9238b 100644 --- a/runtimec/vmjit/execution_interface.h +++ b/runtimec/vmjit/execution_interface.h @@ -6,16 +6,16 @@ * 作用:机器码入口与执行 binary interface 的最小描述:入口函数签名、 * ValueSlot 大小与 Frame 对齐。骨架期不冻结最终寄存器约定、vmjit * frame/stack 布局或稳定机器 binary interface。 - * 联系:vmjit compiler 与 backend 共用;vmbin 的 ValueSlot 与 Frame 是 - * 唯一布局来源,机器码生成器不得手写第二份 offset。 - * 约束:版本变化必须进入 code cache key;本文件不定义语言语义。 + * 联系:vmjit compiler 与 backend 共用;中立 BinRWIR value 与 execution + * frame 合同是唯一布局来源,机器码生成器不得手写第二份 offset。 + * 约束:版本变化必须进入 compilation repository key;本文件不定义语言语义。 */ #include #include "contract/status.h" -#include "vmbin/exit.h" -#include "vmbin/frame.h" +#include "binrwir/execution_exit.h" +#include "binrwir/execution_frame.h" #ifdef __cplusplus extern "C" { @@ -26,8 +26,8 @@ extern "C" { typedef void (*vmjit_machine_code_function_t)( void *execution_state, - vmbin_frame_t *frame, - vmbin_exit_t *exit); + binrwir_execution_frame_t *frame, + binrwir_execution_exit_t *exit); typedef struct vmjit_execution_interface_t { uint16_t binary_interface_major_version; diff --git a/runtimec/vmjit/lower.c b/runtimec/vmjit/lower.c new file mode 100644 index 00000000..21418dba --- /dev/null +++ b/runtimec/vmjit/lower.c @@ -0,0 +1,27 @@ +/* vmjit/lower 的失败封闭骨架。 */ + +#include "vmjit/lower.h" + +runtimec_status_t vmjit_lower( + const vmjit_lowering_plan_t *plan, + const runtimec_allocator_t *allocator, + vmjit_lowered_program_t **output_program, + runtimec_error_t *error) { + (void)error; + if (output_program != NULL) { + *output_program = NULL; + } + if (plan == NULL || !runtimec_allocator_is_valid(allocator) || + output_program == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_lowered_program_destroy( + vmjit_lowered_program_t *program) { + if (program == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/vmjit/lower.h b/runtimec/vmjit/lower.h index 6a301534..d29cc93d 100644 --- a/runtimec/vmjit/lower.h +++ b/runtimec/vmjit/lower.h @@ -3,16 +3,15 @@ /* * 组件:vmjit/lower - * 作用:把已验证的 plan 转成 target-neutral micro operation,不重新解释 RWIR - * 语义。 - * 联系:plan 来自 vmjit/plan;输出交给 backend 的 emit;lower 不接触 + * 作用:把目标相关 lowering plan 转成机器码生成请求,不重新解释 RWIR 语义。 + * 联系:plan 来自 vmjit/lowering_plan;输出交给 backend 的 emit;lower 不接触 * kvspace/host。 * 约束:具体 micro operation 编码当前未冻结。 */ #include "contract/allocator.h" #include "contract/status.h" -#include "vmjit/plan.h" +#include "vmjit/lowering_plan.h" #ifdef __cplusplus extern "C" { @@ -20,7 +19,7 @@ extern "C" { typedef struct vmjit_lowered_program vmjit_lowered_program_t; runtimec_status_t vmjit_lower( - const vmjit_plan_t *plan, + const vmjit_lowering_plan_t *plan, const runtimec_allocator_t *allocator, vmjit_lowered_program_t **output_program, runtimec_error_t *error); diff --git a/runtimec/vmjit/lowering_plan.c b/runtimec/vmjit/lowering_plan.c new file mode 100644 index 00000000..fc088126 --- /dev/null +++ b/runtimec/vmjit/lowering_plan.c @@ -0,0 +1,39 @@ +/* vmjit/lowering_plan 的失败封闭骨架。 */ + +#include "vmjit/lowering_plan.h" + +runtimec_status_t vmjit_lowering_plan_create( + const vmjit_verified_program_t *verified_program, + const binrwir_execution_plan_t *execution_plan, + const vmjit_target_t *target, + const vmjit_lowering_plan_options_t *options, + const runtimec_allocator_t *allocator, + vmjit_lowering_plan_t **output_plan, + vmjit_refusal_t *refusal, + runtimec_error_t *error) { + (void)error; + if (output_plan != NULL) { + *output_plan = NULL; + } + if (refusal != NULL) { + *refusal = (vmjit_refusal_t){ + .reason = VMJIT_REFUSAL_INVALID_PROGRAM, + }; + } + if (verified_program == NULL || verified_program->program == NULL || + execution_plan == NULL || target == NULL || options == NULL || + options->structure_size != sizeof(*options) || + !runtimec_allocator_is_valid(allocator) || output_plan == NULL || + refusal == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + refusal->reason = VMJIT_REFUSAL_NONE; + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmjit_lowering_plan_destroy(vmjit_lowering_plan_t *plan) { + if (plan == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/vmjit/lowering_plan.h b/runtimec/vmjit/lowering_plan.h new file mode 100644 index 00000000..fec46139 --- /dev/null +++ b/runtimec/vmjit/lowering_plan.h @@ -0,0 +1,54 @@ +#ifndef RUNTIMEC_VMJIT_LOWERING_PLAN_H +#define RUNTIMEC_VMJIT_LOWERING_PLAN_H + +/* + * 组件:vmjit/lowering_plan + * 作用:把已验证 Program 与顶层 Compiler 的 execution plan 绑定为目标相关 + * lowering 输入,包括调用约定、物理寄存器、spill、常量物化、safepoint + * 和 source logical program counter 映射。 + * 联系:vmjit compiler 构建,lower 消费;backend 只消费 emit request。 + * 约束:不得重新优化 BinRWIR、改变 execution target 或建立执行期替代路径; + * 无法精确表达 execution plan 时必须在机器码生成前返回 + * RUNTIMEC_STATUS_UNSUPPORTED 并填写 refusal。顶层 vmjit_compile 只把 + * UNSUPPORTED 映射为成功的 NOT_COMPILABLE,其它错误原样停止。 + */ + +#include +#include +#include + +#include "binrwir/execution_plan.h" +#include "contract/allocator.h" +#include "contract/status.h" +#include "vmjit/backend.h" +#include "vmjit/verifier.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct vmjit_lowering_plan vmjit_lowering_plan_t; + +typedef struct vmjit_lowering_plan_options_t { + size_t structure_size; + uint32_t code_generation_revision; + bool observe_every_instruction; +} vmjit_lowering_plan_options_t; + +runtimec_status_t vmjit_lowering_plan_create( + const vmjit_verified_program_t *verified_program, + const binrwir_execution_plan_t *execution_plan, + const vmjit_target_t *target, + const vmjit_lowering_plan_options_t *options, + const runtimec_allocator_t *allocator, + vmjit_lowering_plan_t **output_plan, + vmjit_refusal_t *refusal, + runtimec_error_t *error); + +runtimec_status_t vmjit_lowering_plan_destroy(vmjit_lowering_plan_t *plan); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmjit/plan.h b/runtimec/vmjit/plan.h deleted file mode 100644 index 13c05a5b..00000000 --- a/runtimec/vmjit/plan.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef RUNTIMEC_VMJIT_PLAN_H -#define RUNTIMEC_VMJIT_PLAN_H - -/* - * 组件:vmjit/plan - * 作用:vmjit 计划:control flow graph、basic block、liveness、寄存器分配、 - * spill、materialization、safepoint、source program counter、side exit、 - * callsite maps 与每指令可观察性策略。 - * 联系:仅由 verifier 输出的 verified Program 生成;lower 消费;backend 不直接看 - * plan 的语义,只消费 emit request。 - * 约束:无法构建 deoptimization 或 source program counter map 时必须拒绝, - * 不得退化成不精确 - * side exit。 - */ - -#include -#include - -#include "contract/allocator.h" -#include "contract/status.h" -#include "vmbin/program.h" -#include "vmjit/backend.h" -#include "vmjit/verifier.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct vmjit_plan vmjit_plan_t; -typedef struct vmjit_plan_options { - uint32_t tier; - uint32_t code_generation_revision; - bool observe_every_instruction; -} vmjit_plan_options_t; - -runtimec_status_t vmjit_plan_create( - const vmjit_verified_program_t *verified_program, - const vmjit_target_t *target, - const vmjit_plan_options_t *options, - const runtimec_allocator_t *allocator, - vmjit_plan_t **output_plan, - vmjit_refusal_t *refusal, - runtimec_error_t *error); -runtimec_status_t vmjit_plan_destroy(vmjit_plan_t *plan); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/runtimec/vmjit/verifier.c b/runtimec/vmjit/verifier.c new file mode 100644 index 00000000..c8c91d89 --- /dev/null +++ b/runtimec/vmjit/verifier.c @@ -0,0 +1,26 @@ +/* vmjit/verifier 的失败封闭骨架。 */ + +#include "vmjit/verifier.h" + +runtimec_status_t vmjit_verify_program( + const binrwir_program_t *program, + const vmjit_target_t *target, + vmjit_verified_program_t *output_verified_program, + vmjit_refusal_t *refusal, + runtimec_error_t *error) { + (void)error; + if (output_verified_program != NULL) { + *output_verified_program = (vmjit_verified_program_t){0}; + } + if (refusal != NULL) { + *refusal = (vmjit_refusal_t){ + .reason = VMJIT_REFUSAL_INVALID_PROGRAM, + }; + } + if (program == NULL || target == NULL || output_verified_program == NULL || + refusal == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + refusal->reason = VMJIT_REFUSAL_NONE; + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/vmjit/verifier.h b/runtimec/vmjit/verifier.h index 17fe0337..d53d6539 100644 --- a/runtimec/vmjit/verifier.h +++ b/runtimec/vmjit/verifier.h @@ -3,19 +3,21 @@ /* * 组件:vmjit/verifier - * 作用:vmjit eligibility 的 fail-closed 判定:先要求 vmbin 确认 Program - * 有效,再判定 operation/backend 支持、先定义后使用、控制流 guard、 + * 作用:vmjit eligibility 的 fail-closed 判定:先按中立 BinRWIR 合同验证 + * Program,再判定 operation/backend 支持、先定义后使用、控制流 guard、 * 寄存器压力、binary interface 限制、side effect、call、builtin、 * handoff、observable 边界与 source program counter map 可构建。 * 联系:vmjit/compiler 在 plan 前调用;拒绝结果以结构化 refusal 返回, - * route 据此回退 vmbin。 - * 约束:拒绝是正常控制流,不是运行时错误;不得“尽量执行”。 + * compiler 据此产生 NOT_COMPILABLE。 + * 约束:未知架构或不支持的 operation 返回 RUNTIMEC_STATUS_UNSUPPORTED 并 + * 填写 refusal;非法 BinRWIR 返回 INVALID。顶层 vmjit_compile 只把 + * UNSUPPORTED 映射为成功的 NOT_COMPILABLE;其它错误不得转成拒绝。 */ #include #include "contract/status.h" -#include "vmbin/program.h" +#include "binrwir/program.h" #include "vmjit/backend.h" #ifdef __cplusplus @@ -37,11 +39,11 @@ typedef struct vmjit_refusal_t { } vmjit_refusal_t; typedef struct vmjit_verified_program_t { - const vmbin_program_t *program; + const binrwir_program_t *program; } vmjit_verified_program_t; runtimec_status_t vmjit_verify_program( - const vmbin_program_t *program, + const binrwir_program_t *program, const vmjit_target_t *target, vmjit_verified_program_t *output_verified_program, vmjit_refusal_t *refusal, diff --git a/runtimec/vmjit/vmjit.c b/runtimec/vmjit/vmjit.c index 6540943b..383b365e 100644 --- a/runtimec/vmjit/vmjit.c +++ b/runtimec/vmjit/vmjit.c @@ -1,307 +1,21 @@ -/* - * 组件:vmjit 的 scaffold 实现 - * 作用:所有未实现阶段显式返回 NOT_IMPLEMENTED;唯一可选执行入口在 - * 无机器码能力时显式返回 FALLBACK,绝不伪造已执行结果。 - * 联系:engine/route 是唯一策略调用者;其余函数只构成 vmjit 内部流水线。 - * 约束:只接受 verifier 产生的 verified Program,不解释 RWIR 或 BinRWIR。 - */ +/* vmjit 确定执行入口的失败封闭骨架。 */ #include "vmjit/vmjit.h" -#include - -#include "vmjit/code_memory.h" -#include "vmjit/lower.h" -#include "vmjit/plan.h" - -static void vmjit_refusal_reset( - vmjit_refusal_t *refusal, - vmjit_refusal_reason_t reason) { - if (refusal != NULL) { - refusal->reason = reason; - refusal->logical_program_counter = 0U; - refusal->detail_code = 0U; - } -} - -runtimec_status_t vmjit_execution_interface( - vmjit_execution_interface_t *output_interface) { - if (output_interface != NULL) { - *output_interface = (vmjit_execution_interface_t){0}; - } - if (output_interface == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmjit_compiler_create( - runtimec_allocator_t allocator, - const vmjit_config_t *config, - vmjit_compiler_t **output_compiler, - runtimec_error_t *error) { - (void)allocator; - (void)error; - if (output_compiler != NULL) { - *output_compiler = NULL; - } - if (config == NULL || output_compiler == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmjit_compiler_destroy(vmjit_compiler_t *compiler) { - if (compiler == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmjit_verify_program( - const vmbin_program_t *program, - const vmjit_target_t *target, - vmjit_verified_program_t *output_verified_program, - vmjit_refusal_t *refusal, - runtimec_error_t *error) { - (void)error; - if (output_verified_program != NULL) { - *output_verified_program = (vmjit_verified_program_t){0}; - } - vmjit_refusal_reset(refusal, VMJIT_REFUSAL_INVALID_PROGRAM); - if (program == NULL || target == NULL || output_verified_program == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - vmjit_refusal_reset(refusal, VMJIT_REFUSAL_DISABLED); - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmjit_compile( - vmjit_compiler_t *compiler, - const vmjit_verified_program_t *verified_program, - vmjit_code_t **output_code, - vmjit_refusal_t *refusal, - runtimec_error_t *error) { - (void)error; - if (output_code != NULL) { - *output_code = NULL; - } - vmjit_refusal_reset(refusal, VMJIT_REFUSAL_INVALID_PROGRAM); - if (compiler == NULL || verified_program == NULL || - verified_program->program == NULL || output_code == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - vmjit_refusal_reset(refusal, VMJIT_REFUSAL_DISABLED); - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmjit_code_retain(vmjit_code_t *code) { - if (code == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmjit_code_release(vmjit_code_t *code) { - if (code == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmjit_code_get_machine_code_function( +runtimec_status_t vmjit_execute( const vmjit_code_t *code, - vmjit_machine_code_function_t *output_function) { - if (output_function != NULL) { - *output_function = NULL; - } - if (code == NULL || output_function == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmjit_plan_create( - const vmjit_verified_program_t *verified_program, - const vmjit_target_t *target, - const vmjit_plan_options_t *options, - const runtimec_allocator_t *allocator, - vmjit_plan_t **output_plan, - vmjit_refusal_t *refusal, - runtimec_error_t *error) { - (void)error; - if (output_plan != NULL) { - *output_plan = NULL; - } - vmjit_refusal_reset(refusal, VMJIT_REFUSAL_INVALID_PROGRAM); - if (verified_program == NULL || verified_program->program == NULL || - target == NULL || options == NULL || allocator == NULL || - output_plan == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - vmjit_refusal_reset(refusal, VMJIT_REFUSAL_DISABLED); - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmjit_plan_destroy(vmjit_plan_t *plan) { - if (plan == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmjit_lower( - const vmjit_plan_t *plan, - const runtimec_allocator_t *allocator, - vmjit_lowered_program_t **output_program, + binrwir_execution_frame_t *frame, + binrwir_execution_exit_t *output_exit, runtimec_error_t *error) { (void)error; - if (output_program != NULL) { - *output_program = NULL; + if (output_exit != NULL) { + *output_exit = (binrwir_execution_exit_t){0}; + output_exit->kind = BINRWIR_EXECUTION_EXIT_ERROR; + output_exit->status = RUNTIMEC_STATUS_INVALID; } - if (plan == NULL || allocator == NULL || output_program == NULL) { + if (code == NULL || frame == NULL || output_exit == NULL) { return RUNTIMEC_STATUS_INVALID; } + output_exit->status = RUNTIMEC_STATUS_NOT_IMPLEMENTED; return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } - -runtimec_status_t vmjit_lowered_program_destroy( - vmjit_lowered_program_t *program) { - if (program == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmjit_code_memory_create( - size_t capacity, - vmjit_code_memory_t **output_memory, - runtimec_error_t *error) { - (void)capacity; - (void)error; - if (output_memory != NULL) { - *output_memory = NULL; - } - if (output_memory == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmjit_code_memory_writable_view( - vmjit_code_memory_t *memory, - runtimec_bytes_buffer_t *output_buffer, - runtimec_error_t *error) { - (void)error; - if (output_buffer != NULL) { - runtimec_bytes_buffer_reset(output_buffer); - } - if (memory == NULL || output_buffer == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmjit_code_memory_publish( - vmjit_code_memory_t *memory, - size_t code_size, - runtimec_error_t *error) { - (void)code_size; - (void)error; - if (memory == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmjit_code_memory_destroy(vmjit_code_memory_t *memory) { - if (memory == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmjit_code_cache_create( - runtimec_allocator_t allocator, - size_t capacity, - vmjit_code_cache_t **output_cache, - runtimec_error_t *error) { - (void)allocator; - (void)capacity; - (void)error; - if (output_cache != NULL) { - *output_cache = NULL; - } - if (output_cache == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmjit_code_cache_destroy(vmjit_code_cache_t *cache) { - if (cache == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmjit_code_cache_clear(vmjit_code_cache_t *cache) { - if (cache == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmjit_code_cache_invalidate( - vmjit_code_cache_t *cache, - const runtimec_snapshot_t *snapshot) { - if (cache == NULL || snapshot == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -runtimec_status_t vmjit_code_cache_get_or_compile( - vmjit_code_cache_t *cache, - vmjit_compiler_t *compiler, - const vmjit_cache_key_t *key, - const vmjit_verified_program_t *verified_program, - vmjit_code_t **output_code, - vmjit_refusal_t *refusal, - runtimec_error_t *error) { - (void)error; - if (output_code != NULL) { - *output_code = NULL; - } - vmjit_refusal_reset(refusal, VMJIT_REFUSAL_INVALID_PROGRAM); - if (cache == NULL || compiler == NULL || key == NULL || - verified_program == NULL || verified_program->program == NULL || - output_code == NULL) { - return RUNTIMEC_STATUS_INVALID; - } - vmjit_refusal_reset(refusal, VMJIT_REFUSAL_DISABLED); - return RUNTIMEC_STATUS_NOT_IMPLEMENTED; -} - -vmjit_execution_result_t vmjit_try_execute( - vmjit_compiler_t *compiler, - vmjit_code_cache_t *cache, - const vmjit_verified_program_t *verified_program, - vmbin_frame_t *frame, - runtimec_error_t *error) { - vmjit_execution_result_t result = {0}; - (void)error; - result.outcome = VMJIT_EXECUTION_OUTCOME_ERROR; - result.status = RUNTIMEC_STATUS_INVALID; - result.exit.kind = VMBIN_EXIT_ERROR; - result.exit.status = RUNTIMEC_STATUS_INVALID; - if (compiler == NULL || cache == NULL || verified_program == NULL || - verified_program->program == NULL || frame == NULL) { - return result; - } - result.outcome = VMJIT_EXECUTION_OUTCOME_FALLBACK; - result.status = RUNTIMEC_STATUS_FALLBACK; - result.exit.kind = VMBIN_EXIT_NONE; - result.exit.status = RUNTIMEC_STATUS_FALLBACK; - return result; -} diff --git a/runtimec/vmjit/vmjit.h b/runtimec/vmjit/vmjit.h index d2969bf6..f8d14a23 100644 --- a/runtimec/vmjit/vmjit.h +++ b/runtimec/vmjit/vmjit.h @@ -3,42 +3,27 @@ /* * 组件:vmjit/vmjit - * 作用:vmjit 总入口与执行结果契约:EXECUTED / FALLBACK / ERROR。 - * unsupported target、operation、disabled、negative - * cache、guard 或 deoptimization 应返回 FALLBACK;任何 side exit 必须落在 - * source-mapped、未重复副作用的安全边界。INVALID、NOT_IMPLEMENTED、 - * out-of-memory 或 ERROR 是错误,不得伪装成 FALLBACK。 - * 联系:engine/route 是唯一调用者;输入是只读 vmbin Program + Frame; - * 输出为结构化 exit,交给 route 决定后续提交或回退。 - * 约束:vmjit 不读 RWIR、不访问 kvspace、不拥有持久 program counter 或 status; - * try_execute 只接受 verifier 产生的 verified Program。 + * 作用:执行已编译机器码。可编译性只在 compiler、verifier 与 backend + * 阶段决定;执行入口没有拒绝、重编译或替代执行路径。 + * 联系:engine/route 只在 BinRWIR compilation 的不可变执行目标为 VMJIT + * 时调用本入口;输出为 BinRWIR execution exit,交给 route 提交。 + * 约束:vmjit 不读 RWIR、不访问 kvspace、不依赖 vmbin;非法机器码句柄、 + * out-of-memory 或内部错误必须直接返回错误。 */ #include "contract/status.h" -#include "vmbin/exit.h" -#include "vmbin/frame.h" -#include "vmjit/cache.h" +#include "binrwir/execution_exit.h" +#include "binrwir/execution_frame.h" +#include "vmjit/code.h" #ifdef __cplusplus extern "C" { #endif -typedef enum vmjit_execution_outcome_t { - VMJIT_EXECUTION_OUTCOME_INVALID = 0, - VMJIT_EXECUTION_OUTCOME_EXECUTED = 1, - VMJIT_EXECUTION_OUTCOME_FALLBACK = 2, - VMJIT_EXECUTION_OUTCOME_ERROR = 3 -} vmjit_execution_outcome_t; -typedef struct vmjit_execution_result_t { - vmjit_execution_outcome_t outcome; - runtimec_status_t status; - vmbin_exit_t exit; -} vmjit_execution_result_t; -vmjit_execution_result_t vmjit_try_execute( - vmjit_compiler_t *compiler, - vmjit_code_cache_t *cache, - const vmjit_verified_program_t *verified_program, - vmbin_frame_t *frame, +runtimec_status_t vmjit_execute( + const vmjit_code_t *code, + binrwir_execution_frame_t *frame, + binrwir_execution_exit_t *output_exit, runtimec_error_t *error); #ifdef __cplusplus diff --git a/runtimec/vmkv/compiler.h b/runtimec/vmkv/compiler.h deleted file mode 100644 index 91a62213..00000000 --- a/runtimec/vmkv/compiler.h +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef RUNTIMEC_VMKV_COMPILER_H -#define RUNTIMEC_VMKV_COMPILER_H - -/* - * 组件:vmkv/compiler - * 作用:读取并校验明文 RWIR,调用 vmbin Program 构建器产出不可变 - * BinRWIR Program。 - * 联系:engine route 在 Program repository 未命中时调用;源只经 - * vmkv/source 与主机服务读取;Program 由 vmbin 持有。 - * 约束:vmkv 只有 RWIR 到 BinRWIR Program 这一条正常方向。它不执行、 - * 不生成机器码、不提交持久事实,也不依赖 vmjit。未实现路径 - * 必须返回 RUNTIMEC_STATUS_NOT_IMPLEMENTED。 - */ - -#include "contract/allocator.h" -#include "contract/snapshot.h" -#include "contract/status.h" -#include "vmbin/program.h" -#include "vmkv/source.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct vmkv_compiler_t vmkv_compiler_t; - -/* 一次编译请求。校验是强制步骤,不提供绕过开关。 */ -typedef struct vmkv_compile_request_t { - const runtimec_host_services_t *host_services; - runtimec_string_view_t function_path; - runtimec_snapshot_t expected_snapshot; -} vmkv_compile_request_t; - -runtimec_status_t vmkv_compiler_create( - runtimec_allocator_t allocator, - vmkv_compiler_t **output_compiler, - runtimec_error_t *error); - -runtimec_status_t vmkv_compiler_destroy(vmkv_compiler_t *compiler); - -/* 编译一个函数;成功时只返回不可变 BinRWIR Program。 */ -runtimec_status_t vmkv_compile( - vmkv_compiler_t *compiler, - const vmkv_compile_request_t *request, - vmbin_program_t **output_program, - runtimec_error_t *error); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/runtimec/vmkv/encoder.h b/runtimec/vmkv/encoder.h new file mode 100644 index 00000000..f06778b8 --- /dev/null +++ b/runtimec/vmkv/encoder.h @@ -0,0 +1,56 @@ +#ifndef RUNTIMEC_VMKV_ENCODER_H +#define RUNTIMEC_VMKV_ENCODER_H + +/* + * 组件:vmkv/encoder + * 作用:读取并验证明文 RWIR,将其等价编码为 canonical、不可变的 + * binrwir_program_t。 + * 联系:engine route 在 compilation repository 未命中时调用;源只经 + * vmkv/source 与主机服务读取;结果交给 BinRWIR Compiler。 + * 约束:vmkv 只有 RWIR 到 canonical BinRWIR 这一条正常方向。编码不得 + * 优化、类型特化、融合、生成执行计划或生成机器码,也不得执行程序、 + * 提交持久事实或依赖 vmjit。 + */ + +#include "binrwir/program.h" +#include "contract/allocator.h" +#include "contract/snapshot.h" +#include "contract/status.h" +#include "vmkv/source.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct vmkv_encoder_t vmkv_encoder_t; + +/* 一次等价编码请求。RWIR 验证是强制步骤,不提供绕过开关。 */ +typedef struct vmkv_encode_request_t { + const runtimec_host_services_t *host_services; + runtimec_string_view_t function_path; + runtimec_snapshot_t expected_snapshot; +} vmkv_encode_request_t; + +runtimec_status_t vmkv_encoder_create( + runtimec_allocator_t allocator, + vmkv_encoder_t **output_encoder, + runtimec_error_t *error); + +runtimec_status_t vmkv_encoder_destroy(vmkv_encoder_t *encoder); + +runtimec_status_t vmkv_encoder_get_canonical_encoding_revision( + const vmkv_encoder_t *encoder, + uint32_t *output_canonical_encoding_revision); + +/* 成功时只返回与已验证 RWIR 等价的 canonical BinRWIR Program。 */ +runtimec_status_t vmkv_encode( + vmkv_encoder_t *encoder, + const vmkv_encode_request_t *request, + binrwir_program_t **output_program, + runtimec_error_t *error); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmkv/rwir.h b/runtimec/vmkv/rwir.h index 21d8a661..8d1ac3b1 100644 --- a/runtimec/vmkv/rwir.h +++ b/runtimec/vmkv/rwir.h @@ -6,9 +6,10 @@ * 作用:明文 RWIR 指令的只读视图与顺序读取器。操作数按 * [ReadReference...][WriteReference...] 两个分区表达方向:字面量 * 只能出现在读分区,读参数只能读,写参数只能定位写入。 - * 联系:vmkv/source 提供函数源;vmkv/compiler 校验后构建不可变 + * 联系:vmkv/source 提供函数源;vmkv/encoder 校验后构建不可变 * BinRWIR Program。vmbin 与 vmjit 不直接消费本结构。 - * 约束:所有视图都只借用内存。读取器不执行、不修复、不兼容输入。 + * 约束:所有视图都只借用内存。读取器不执行、不优化、不生成机器码、 + * 不修复输入。 */ #include diff --git a/runtimec/vmkv/source.h b/runtimec/vmkv/source.h index 37ed48f5..06888526 100644 --- a/runtimec/vmkv/source.h +++ b/runtimec/vmkv/source.h @@ -6,8 +6,8 @@ * 作用:通过主机服务打开一个函数的明文 RWIR 源,并返回源快照。 * 它是 vmkv 与 kvspace 之间唯一的读取入口,vmkv 不直接包含 * kvspace 结构。 - * 联系:vmkv/compiler 使用本接口读取 RWIR;编译结果只能进入 vmbin 的 - * 不可变 BinRWIR Program 构建器。 + * 联系:vmkv/encoder 使用本接口读取 RWIR;读取结果只能进入顶层 + * binrwir 的不可变 Program 构建器。 * 约束:打开源不执行 RWIR、不生成机器码、不修改执行事实;失败 * 不得留下函数源。 */ diff --git a/runtimec/vmkv/vmkv.c b/runtimec/vmkv/vmkv.c index 87c6640a..2bb09c51 100644 --- a/runtimec/vmkv/vmkv.c +++ b/runtimec/vmkv/vmkv.c @@ -2,10 +2,10 @@ * 组件:vmkv 未实现入口 * 作用:先把输出置为明确无效,再验证接口形状,最后返回 * RUNTIMEC_STATUS_NOT_IMPLEMENTED。 - * 约束:不产生空 Program 伪装成功,不执行 RWIR,不生成机器码,不走兼容路径。 + * 约束:不产生空 Program 伪装成功,不执行或优化 RWIR,不生成机器码。 */ -#include "vmkv/compiler.h" +#include "vmkv/encoder.h" #include "vmkv/rwir.h" #include "vmkv/source.h" @@ -76,36 +76,48 @@ runtimec_status_t vmkv_rwir_reader_destroy(vmkv_rwir_reader_t *reader) { return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmkv_compiler_create( +runtimec_status_t vmkv_encoder_create( runtimec_allocator_t allocator, - vmkv_compiler_t **output_compiler, + vmkv_encoder_t **output_encoder, runtimec_error_t *error) { - if (output_compiler != NULL) { - *output_compiler = NULL; + if (output_encoder != NULL) { + *output_encoder = NULL; } - if (!runtimec_allocator_is_valid(&allocator) || output_compiler == NULL) { + if (!runtimec_allocator_is_valid(&allocator) || output_encoder == NULL) { return RUNTIMEC_STATUS_INVALID; } (void)error; return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmkv_compiler_destroy(vmkv_compiler_t *compiler) { - if (compiler == NULL) { +runtimec_status_t vmkv_encoder_destroy(vmkv_encoder_t *encoder) { + if (encoder == NULL) { return RUNTIMEC_STATUS_INVALID; } return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmkv_compile( - vmkv_compiler_t *compiler, - const vmkv_compile_request_t *request, - vmbin_program_t **output_program, +runtimec_status_t vmkv_encoder_get_canonical_encoding_revision( + const vmkv_encoder_t *encoder, + uint32_t *output_canonical_encoding_revision) { + if (output_canonical_encoding_revision != NULL) { + *output_canonical_encoding_revision = UINT32_MAX; + } + if (encoder == NULL || output_canonical_encoding_revision == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} + +runtimec_status_t vmkv_encode( + vmkv_encoder_t *encoder, + const vmkv_encode_request_t *request, + binrwir_program_t **output_program, runtimec_error_t *error) { if (output_program != NULL) { *output_program = NULL; } - if (compiler == NULL || request == NULL || output_program == NULL || + if (encoder == NULL || request == NULL || output_program == NULL || !runtimec_host_services_is_valid(request->host_services) || !runtimec_string_view_is_valid(request->function_path) || !runtimec_snapshot_is_valid(&request->expected_snapshot)) { From 74e5def3acbae121879974e1d9755bc2649104d9 Mon Sep 17 00:00:00 2001 From: "peng.li24" <734991033@qq.com> Date: Mon, 2 Nov 2026 15:59:45 +0800 Subject: [PATCH 3/6] refactor(runtimec): make JIT internal to BinRWIR compiler --- runtimec/CMakeLists.txt | 27 ++--- runtimec/README.md | 104 +++++++++--------- runtimec/binrwir/execution_binding.h | 2 +- runtimec/binrwir/execution_exit.h | 2 +- runtimec/binrwir/execution_frame.h | 2 +- runtimec/binrwir/execution_plan.h | 2 +- runtimec/binrwir/execution_plan_internal.h | 2 +- runtimec/binrwir/instruction.h | 2 +- runtimec/binrwir/program.h | 2 +- runtimec/binrwir/signature.h | 2 +- runtimec/binrwir/value.h | 4 +- .../{compiler => binrwir_compiler}/compiler.c | 25 ++++- .../{compiler => binrwir_compiler}/compiler.h | 39 ++++--- runtimec/binrwir_compiler/jit/backend.h | 69 ++++++++++++ .../jit}/backend/aarch64.c | 8 +- .../jit}/backend/backend.c | 12 +- .../jit}/backend/x86_64.c | 10 +- .../{vmjit => binrwir_compiler/jit}/code.c | 20 ++-- runtimec/binrwir_compiler/jit/code.h | 43 ++++++++ .../jit}/code_memory.c | 18 +-- .../jit}/code_memory.h | 24 ++-- .../jit}/compiler.c | 40 +++---- runtimec/binrwir_compiler/jit/compiler.h | 69 ++++++++++++ .../jit/execution_interface.c | 14 +++ .../jit}/execution_interface.h | 24 ++-- .../jit/executor.c} | 8 +- runtimec/binrwir_compiler/jit/executor.h | 33 ++++++ .../{vmjit => binrwir_compiler/jit}/lower.c | 14 +-- runtimec/binrwir_compiler/jit/lower.h | 33 ++++++ .../jit}/lowering_plan.c | 24 ++-- .../jit}/lowering_plan.h | 34 +++--- runtimec/binrwir_compiler/jit/verifier.c | 26 +++++ runtimec/binrwir_compiler/jit/verifier.h | 56 ++++++++++ .../optimization.c | 2 +- .../optimization.h | 6 +- runtimec/contract/allocator.c | 2 +- runtimec/contract/allocator.h | 2 +- runtimec/contract/checkpoint.h | 2 +- runtimec/contract/snapshot.h | 4 +- runtimec/contract/status.c | 2 +- runtimec/contract/status.h | 2 +- runtimec/contract/view.c | 2 +- runtimec/contract/view.h | 2 +- runtimec/documentation/architecture/README.md | 6 +- .../architecture/capability-map.md | 22 ++-- .../architecture/runtimec-architecture.md | 47 ++++---- .../architecture/runtimec-dependencies.mmd | 35 +++--- .../architecture/runtimec-dependencies.png | Bin 130991 -> 148215 bytes .../architecture/runtimec-dependencies.svg | 2 +- .../architecture/runtimec-execution.mmd | 53 +++++---- .../architecture/runtimec-execution.png | Bin 372167 -> 423654 bytes .../architecture/runtimec-execution.svg | 2 +- .../architecture/runtimec-trunk.mmd | 47 ++++---- .../architecture/runtimec-trunk.png | Bin 125585 -> 155412 bytes .../architecture/runtimec-trunk.svg | 2 +- .../architecture/rwir-binrwir-aliasing.mmd | 13 ++- .../architecture/rwir-binrwir-aliasing.png | Bin 115379 -> 136092 bytes .../architecture/rwir-binrwir-aliasing.svg | 2 +- runtimec/engine/compilation_repository.h | 4 +- runtimec/engine/route.c | 6 +- runtimec/engine/route.h | 7 +- runtimec/engine/session.c | 6 +- runtimec/engine/session.h | 4 +- runtimec/host/host.h | 3 +- runtimec/include/kvlang/runtimec.h | 2 +- runtimec/specification/README.md | 3 +- .../five-language-behavior-matrix.md | 2 +- .../myrwircap-binrwir-mapping.md | 8 +- runtimec/specification/rwir_catalog.def | 3 +- runtimec/specification/scalar_operations.def | 2 +- runtimec/tests/CMakeLists.txt | 23 ++-- ...st.c => binrwir_compiler_contracts_test.c} | 96 ++++++++-------- .../architecture/check_behavior_matrix.py | 2 +- runtimec/tools/architecture/check_layers.py | 26 ++--- runtimec/tools/architecture/check_names.py | 31 ++++-- runtimec/vmjit/backend.h | 69 ------------ runtimec/vmjit/code.h | 43 -------- runtimec/vmjit/compiler.h | 69 ------------ runtimec/vmjit/execution_interface.c | 14 --- runtimec/vmjit/lower.h | 33 ------ runtimec/vmjit/verifier.c | 26 ----- runtimec/vmjit/verifier.h | 56 ---------- runtimec/vmjit/vmjit.h | 33 ------ runtimec/vmkv/encoder.h | 2 +- runtimec/vmkv/rwir.h | 2 +- 85 files changed, 846 insertions(+), 780 deletions(-) rename runtimec/{compiler => binrwir_compiler}/compiler.c (76%) rename runtimec/{compiler => binrwir_compiler}/compiler.h (61%) create mode 100644 runtimec/binrwir_compiler/jit/backend.h rename runtimec/{vmjit => binrwir_compiler/jit}/backend/aarch64.c (69%) rename runtimec/{vmjit => binrwir_compiler/jit}/backend/backend.c (53%) rename runtimec/{vmjit => binrwir_compiler/jit}/backend/x86_64.c (61%) rename runtimec/{vmjit => binrwir_compiler/jit}/code.c (62%) create mode 100644 runtimec/binrwir_compiler/jit/code.h rename runtimec/{vmjit => binrwir_compiler/jit}/code_memory.c (66%) rename runtimec/{vmjit => binrwir_compiler/jit}/code_memory.h (52%) rename runtimec/{vmjit => binrwir_compiler/jit}/compiler.c (52%) create mode 100644 runtimec/binrwir_compiler/jit/compiler.h create mode 100644 runtimec/binrwir_compiler/jit/execution_interface.c rename runtimec/{vmjit => binrwir_compiler/jit}/execution_interface.h (57%) rename runtimec/{vmjit/vmjit.c => binrwir_compiler/jit/executor.c} (75%) create mode 100644 runtimec/binrwir_compiler/jit/executor.h rename runtimec/{vmjit => binrwir_compiler/jit}/lower.c (58%) create mode 100644 runtimec/binrwir_compiler/jit/lower.h rename runtimec/{vmjit => binrwir_compiler/jit}/lowering_plan.c (54%) rename runtimec/{vmjit => binrwir_compiler/jit}/lowering_plan.h (54%) create mode 100644 runtimec/binrwir_compiler/jit/verifier.c create mode 100644 runtimec/binrwir_compiler/jit/verifier.h rename runtimec/{compiler => binrwir_compiler}/optimization.c (94%) rename runtimec/{compiler => binrwir_compiler}/optimization.h (82%) rename runtimec/tests/{compiler_contracts_test.c => binrwir_compiler_contracts_test.c} (68%) delete mode 100644 runtimec/vmjit/backend.h delete mode 100644 runtimec/vmjit/code.h delete mode 100644 runtimec/vmjit/compiler.h delete mode 100644 runtimec/vmjit/execution_interface.c delete mode 100644 runtimec/vmjit/lower.h delete mode 100644 runtimec/vmjit/verifier.c delete mode 100644 runtimec/vmjit/verifier.h delete mode 100644 runtimec/vmjit/vmjit.h diff --git a/runtimec/CMakeLists.txt b/runtimec/CMakeLists.txt index 0709cf56..7ce721a5 100644 --- a/runtimec/CMakeLists.txt +++ b/runtimec/CMakeLists.txt @@ -1,11 +1,11 @@ # 组件:runtimec 顶层构建 # 作用:C11-only 构建(不链接 libstdc++);按 contract、host、binrwir、 -# vmkv、vmjit、compiler、vmbin、engine、interface 生成独立 target, +# vmkv、binrwir_compiler、vmbin、engine、interface 生成独立 target, # 并从 interface/exports.txt # 生成三平台导出脚本(README §9、§10)。当前产物名刻意带 _scaffold,禁止用于 # benchmark/tutorial/发布。 -# 联系:组件依赖只沿本文件声明的单向图连接;只有 engine route 汇合 -# compiler、vmbin 与 vmjit。 +# 联系:组件依赖只沿本文件声明的单向图连接;JIT 是 BinRWIR Compiler +# 内部实现,只有 engine route 汇合 compiler 与 vmbin。 cmake_minimum_required(VERSION 3.20) project(kvlang_runtimec_scaffold VERSION 0.1.0 LANGUAGES C) @@ -19,7 +19,7 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_C_VISIBILITY_PRESET hidden) set(CMAKE_VISIBILITY_INLINES_HIDDEN ON) -option(RUNTIMEC_ENABLE_VMJIT "Enable vmjit execution capability" ON) +option(RUNTIMEC_ENABLE_JIT "Enable BinRWIR JIT compilation capability" ON) set(RUNTIMEC_INCLUDE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include") set(RUNTIMEC_GENERATED_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/generated") @@ -82,8 +82,7 @@ runtimec_add_component(runtimec_contract contract) runtimec_add_component(runtimec_host host) runtimec_add_component(runtimec_binrwir binrwir) runtimec_add_component(runtimec_vmkv vmkv) -runtimec_add_component(runtimec_vmjit vmjit) -runtimec_add_component(runtimec_compiler compiler) +runtimec_add_component(runtimec_binrwir_compiler binrwir_compiler) runtimec_add_component(runtimec_vmbin vmbin) runtimec_add_component(runtimec_engine engine) @@ -96,10 +95,8 @@ target_link_libraries(runtimec_binrwir PRIVATE runtimec_contract) target_link_libraries(runtimec_vmkv PRIVATE runtimec_contract runtimec_binrwir) -target_link_libraries(runtimec_vmjit +target_link_libraries(runtimec_binrwir_compiler PRIVATE runtimec_contract runtimec_binrwir) -target_link_libraries(runtimec_compiler - PRIVATE runtimec_contract runtimec_binrwir runtimec_vmjit) target_link_libraries(runtimec_vmbin PRIVATE runtimec_contract runtimec_binrwir) target_link_libraries(runtimec_engine @@ -108,13 +105,12 @@ target_link_libraries(runtimec_engine runtimec_host runtimec_binrwir runtimec_vmkv - runtimec_compiler - runtimec_vmjit + runtimec_binrwir_compiler runtimec_vmbin) -target_compile_definitions(runtimec_vmjit - PRIVATE RUNTIMEC_VMJIT_ENABLED=$) +target_compile_definitions(runtimec_binrwir_compiler + PRIVATE RUNTIMEC_ENABLE_JIT=$) target_compile_definitions(runtimec_engine - PRIVATE RUNTIMEC_VMJIT_ENABLED=$) + PRIVATE RUNTIMEC_ENABLE_JIT=$) # 编译公共二进制接口实现一次,在静态接口组件和 scaffold 动态库间共享。 add_library(runtimec_interface_objects OBJECT interface/public_interface.c) @@ -159,8 +155,7 @@ add_library(kvlang::runtimec_contract ALIAS runtimec_contract) add_library(kvlang::runtimec_host ALIAS runtimec_host) add_library(kvlang::runtimec_binrwir ALIAS runtimec_binrwir) add_library(kvlang::runtimec_vmkv ALIAS runtimec_vmkv) -add_library(kvlang::runtimec_vmjit ALIAS runtimec_vmjit) -add_library(kvlang::runtimec_compiler ALIAS runtimec_compiler) +add_library(kvlang::runtimec_binrwir_compiler ALIAS runtimec_binrwir_compiler) add_library(kvlang::runtimec_vmbin ALIAS runtimec_vmbin) add_library(kvlang::runtimec_engine ALIAS runtimec_engine) add_library(kvlang::runtimec_interface ALIAS runtimec_interface) diff --git a/runtimec/README.md b/runtimec/README.md index b5712128..88a7cd2a 100644 --- a/runtimec/README.md +++ b/runtimec/README.md @@ -18,12 +18,12 @@ RWIR 先被等价编码为 canonical BinRWIR,再由顶层 BinRWIR Compiler 完 RWIR;五语言矩阵先裁决行为,代码只实现已裁决语义。 3. **等价生成。** vmkv 只验证 RWIR,并等价生成 canonical BinRWIR;它不优化、不选择 执行器、不生成机器码。 -4. **编译期一次决定。** BinRWIR Compiler 生成 execution plan,并在编译阶段把 - compilation 的执行目标确定为 VMJIT 或 VMBIN。 +4. **编译期一次决定。** `binrwir_compiler/` 生成 execution plan,并在同一次编译中把 + compilation 的执行目标确定为 JIT code 或 VMBIN plan。 5. **执行期不改决定。** route 只读取 compilation 中已经确定的目标,并且只调用一个 执行入口;执行期间不得重新判定、改选或隐式降级。 -6. **只有一个策略汇合点。** `engine/route.c` 是唯一同时看见 vmkv、Compiler、vmjit - 和 vmbin 的文件,也是唯一执行调度与提交入口。 +6. **只有一个策略汇合点。** `engine/route.c` 是唯一同时看见 vmkv、BinRWIR Compiler、 + 内部 JIT executor 和 vmbin 的文件,也是唯一执行调度与提交入口。 7. **错误立即停止。** 不猜测输入、不截断、不静默修复、不把错误转换成另一条路径。 8. **不保留旧入口。** 公共层只有 `include/kvlang/runtimec.h` 和 `interface/public_interface.c` 定义的结构化接口。 @@ -34,11 +34,11 @@ RWIR 先被等价编码为 canonical BinRWIR,再由顶层 BinRWIR Compiler 完 ```text myrwircaps + RWIR specification -> vmkv validates RWIR and emits equivalent canonical BinRWIR - -> BinRWIR Compiler builds execution plan - -> compile-time target decision: VMJIT or VMBIN + -> binrwir_compiler builds execution plan and attempts internal JIT compilation + -> compile-time target decision: JIT code or VMBIN plan -> compilation repository caches the complete compilation -> engine route reads the decided target before execution - -> vmjit_execute or vmbin_execute + -> binrwir_jit_execute or vmbin_execute -> route commits complete effects and checkpoint ``` @@ -48,14 +48,14 @@ myrwircaps + RWIR specification - `vmkv/` 从 kvspace 读取 RWIR,验证后只生成语义等价的 canonical BinRWIR Program。 - `binrwir/` 拥有中立的 Program、instruction、reference、signature、execution frame、 execution exit 与 execution plan 合同;它不属于 vmbin。 -- `compiler/` 是顶层 BinRWIR Compiler。它从 canonical Program 派生 execution plan, - 请求 vmjit 编译,并形成不可再改选的 compilation。 +- `binrwir_compiler/` 是 canonical BinRWIR 的唯一编译组件。它派生 execution plan, + 在内部 `jit/` 尝试生成机器码,并形成不可再改选的 compilation。 - `engine/compilation_repository` 缓存完整 compilation,使 canonical Program、execution plan 和可选机器码在同一租约内有效。 -- `engine/route` 在执行前读取 `binrwir_execution_target_t`。目标为 VMJIT 时只调用 - `vmjit_execute`;目标为 VMBIN 时只调用 `vmbin_execute`。 -- `vmjit_execute` 只执行已经生成的机器码;`vmbin_execute` 执行 canonical Program, - 并可消费 Compiler 生成的 execution plan。两者都不能改变 compilation 的目标。 +- `engine/route` 在执行前读取 `binrwir_execution_target_t`。目标为 JIT 时只调用 + `binrwir_jit_execute`;目标为 VMBIN 时只调用 `vmbin_execute`。 +- `binrwir_jit_execute` 只执行 compilation 已持有的机器码;`vmbin_execute` 执行 + canonical Program 并消费 execution plan。两者都不能编译或改变目标。 ## 3. 目录主干 @@ -76,20 +76,21 @@ runtimec/ │ ├── execution_frame.* │ ├── execution_exit.h │ └── execution_plan.* -├── compiler/ # 顶层 BinRWIR 编译与优化唯一所有者 -│ ├── compiler.* # compilation、目标判定、vmjit 请求 -│ └── optimization.* # 六类 execution plan 优化 +├── binrwir_compiler/ # BinRWIR 编译、优化与目标判定唯一所有者 +│ ├── compiler.* # compilation、内部 JIT 请求与最终目标 +│ ├── optimization.* # 六类 execution plan 优化 +│ └── jit/ # BinRWIR Compiler 的机器码内部实现 +│ ├── compiler.* # 唯一 Program + plan → code 入口 +│ ├── verifier.* # 编译期 eligibility +│ ├── lowering_plan.* # execution plan 的目标绑定 +│ ├── lower.* # lowering plan → backend request +│ ├── backend.h # 目标架构与机器码生成合同 +│ ├── backend/ # x86_64 与 AArch64 并列实现 +│ ├── code_memory.* # 可写到可执行的内存发布 +│ ├── code.* # 已发布机器码句柄 +│ ├── execution_interface.* # 机器码调用合同 +│ └── executor.* # 已生成机器码的确定执行入口 ├── vmbin/ # 完整 BinRWIR 基线执行器 -├── vmjit/ # 已验证 BinRWIR 的机器码编译与确定执行 -│ ├── compiler.* # 唯一 Program + plan → code 入口 -│ ├── verifier.* # 编译期 eligibility -│ ├── lowering_plan.* # execution plan 的目标绑定 -│ ├── lower.* # lowering plan → backend request -│ ├── backend/ # x86_64 与 AArch64 并列实现 -│ ├── code_memory.* # 可写到可执行的内存发布 -│ ├── code.* # 已发布机器码句柄 -│ ├── execution_interface.* # 机器码调用合同 -│ └── vmjit.* # 仅确定执行入口 ├── engine/ # owner graph、唯一 compilation cache、唯一 route │ ├── session.* # runtimec owner graph 根 │ ├── compilation_repository.* # 完整 compilation 的唯一缓存 @@ -126,11 +127,11 @@ vmkv 必须逐条执行这个映射并保持语义等价。它不能用近似操 ## 5. BinRWIR 中立合同 -BinRWIR 属于顶层 `binrwir/`,不属于 vmkv、vmbin 或 vmjit: +BinRWIR 属于顶层 `binrwir/`,不属于 vmkv、vmbin 或 JIT 内部实现: - vmkv 通过 builder 构造 canonical Program; - Compiler 只读 canonical Program 并派生 execution plan; -- vmbin 与 vmjit 消费相同的中立合同; +- vmbin 与 `binrwir_compiler/jit/` 消费相同的中立合同; - Program finalize 后不可变; - execution plan、机器码、profile 与缓存都是可删除并重建的派生状态。 @@ -146,20 +147,20 @@ BinRWIR 保留 RWIR 的不固定参数数量语义,但编译完成后每条 in ## 6. BinRWIR Compiler -`compiler/` 负责 canonical BinRWIR 之后、执行之前的全部派生工作: +`binrwir_compiler/` 负责 canonical BinRWIR 之后、执行之前的全部派生工作: 1. 验证 canonical Program 与 specification identity。 2. 生成 execution plan,包括指令编码、类型固化、KV 寻址、指令融合、虚拟寄存器和 控制流派生信息。 -3. 在启用 vmjit 时请求 vmjit verifier、lowering 与 backend 生成机器码。 +3. 在启用 JIT 时,由内部 `jit/` verifier、lowering 与 backend 尝试生成机器码。 4. 把 Program、execution plan、已决定目标与可选机器码封装为 compilation。 -vmjit 编译判定只有以下三种有意义的方向;顶层 compilation 对象只在前两种成功 +内部 JIT 编译判定只有以下三种有意义的方向;顶层 compilation 对象只在前两种成功 方向产生,因此不存在可观察的“正在编译”或“错误 compilation”对象: | Compiler 判定 | 调用状态 | compilation 内容 | 后续方向 | |---|---|---|---| -| `COMPILED` | `RUNTIMEC_STATUS_SUCCESS` | VMJIT 目标、Program、plan、机器码 | route 只调用 `vmjit_execute` | +| `COMPILED` | `RUNTIMEC_STATUS_SUCCESS` | JIT 目标、Program、plan、机器码 | route 只调用 `binrwir_jit_execute` | | `NOT_COMPILABLE` | `RUNTIMEC_STATUS_SUCCESS` | VMBIN 目标、Program、plan、无机器码 | route 只调用 `vmbin_execute` | | `ERROR` | 明确错误状态 | 不产生可执行 compilation | 立即停止 | @@ -173,10 +174,10 @@ repository 的缓存单位是 compilation,不是裸 Program、裸 execution pl 缓存键至少绑定 authoritative snapshot、RWIR manifest version、canonical encoding revision、BinRWIR binary interface generation 与 compiler revision。租约保证 execution 期间 compilation 的全部对象同时有效。 -vmjit 不建立第二套 code cache,也不存在绕过顶层 Compiler 的 `get_or_compile` 入口。 +内部 JIT 不建立第二套 code cache,也不存在绕过 BinRWIR Compiler 的独立编译入口。 route 的“选择”只表示读取已经编译好的 `execution_target` 并调用对应入口。route 不再次 -询问 vmjit 是否可用,不重新验证 eligibility,也不在一个入口返回后调用另一个入口。执行 +询问 JIT 是否可用,不重新验证 eligibility,也不在一个入口返回后调用另一个入口。执行 错误、机器码错误和内部错误都沿原路径报告并停止。 只有完整 instruction effect 成功后,route 才按 values → logical program counter → @@ -213,11 +214,12 @@ vmkv 只做 RWIR source 读取、结构验证、稳定 identifier 解析和 cano vmbin 实现全部合法 canonical BinRWIR 的基线语义。generic、typed、fused 与 continuous handler 只能是 `vmbin_execute` 背后的内部策略,不能成为额外执行入口。 -### vmjit +### binrwir_compiler/jit -vmjit 只做已验证 BinRWIR 的机器码 eligibility、lowering、backend 生成和已生成机器码 -执行。可编译性必须在 compilation 建立期间确定;`vmjit_execute` 不接收 RWIR,不访问 -kvspace,不依赖 vmbin,也不拥有执行目标选择能力。 +JIT 是 BinRWIR Compiler 的内部机器码实现,不是 VM,也不是并列顶层组件。它只做已验证 +BinRWIR 的 eligibility、lowering、backend 生成和已生成机器码执行。可编译性必须在 +compilation 建立期间确定;`binrwir_jit_execute` 不接收 RWIR,不访问 kvspace,不依赖 +vmbin,也不拥有执行期目标选择能力。 ## 10. 状态与错误 @@ -229,7 +231,7 @@ kvspace,不依赖 vmbin,也不拥有执行目标选择能力。 - `INVALID`:输入违反合同; - `OUT_OF_MEMORY`、`ERROR`:明确失败。 -`COMPILED` 与 `NOT_COMPILABLE` 是 vmjit 编译判定,不是替代 `runtimec_status_t` 的 +`COMPILED` 与 `NOT_COMPILABLE` 是内部 JIT 编译判定,不是替代 `runtimec_status_t` 的 第二套调用状态。`ERROR` 只通过明确错误状态返回,并且不产生 compilation。所有输出 参数必须先进入明确无效状态,再开始可能失败的工作。 @@ -248,33 +250,33 @@ kvspace,不依赖 vmbin,也不拥有执行目标选择能力。 ```text interface -> public header + contract + engine -engine/route -> host + vmkv + compiler + binrwir + vmjit + vmbin -engine/compilation_repository -> compiler + contract -compiler -> contract + binrwir + vmjit compile contracts +engine/route -> host + vmkv + binrwir_compiler + binrwir + binrwir_compiler/jit executor + vmbin +engine/compilation_repository -> binrwir_compiler + contract +binrwir_compiler -> contract + binrwir + internal jit vmkv -> contract + binrwir build contracts + specification generated facts vmbin -> contract + binrwir execution contracts -vmjit -> contract + binrwir execution contracts +binrwir_compiler/jit -> contract + binrwir execution contracts host -> contract + external kvspace interface ``` 禁止方向: ```text -binrwir -> vmkv/vmbin/vmjit/engine -vmkv -> compiler/vmbin/vmjit -vmbin -> vmkv/vmjit/compiler -vmjit -> vmkv/vmbin/concrete host -repository -> vmkv/vmbin/vmjit -engine files other than route -> vmkv/vmbin/vmjit +binrwir -> vmkv/vmbin/binrwir_compiler/engine +vmkv -> binrwir_compiler/vmbin +vmbin -> vmkv/binrwir_compiler +binrwir_compiler/jit -> vmkv/vmbin/concrete host +repository -> vmkv/vmbin/binrwir_compiler/jit +engine files other than route -> vmkv/vmbin/binrwir_compiler/jit public header -> internal runtimec header ``` ## 13. 公共接口、名称与验收 公共层只安装 `include/kvlang/runtimec.h`,只导出 `interface/exports.txt` 中的符号。 -公共头不暴露 RWIR、BinRWIR、vmkv、Compiler、vmbin、vmjit 或 kvspace 内部结构。 +公共头不暴露 RWIR、BinRWIR、vmkv、BinRWIR Compiler、vmbin、JIT 或 kvspace 内部结构。 -除 kvlang、kvspace、runtimec、RWIR、BinRWIR、vmkv、vmbin、vmjit、vthread、langtype +除 kvlang、kvspace、runtimec、RWIR、BinRWIR、vmkv、vmbin、JIT、vthread、langtype 及 C 标准类型外,自造名称使用完整单词,不保留旧名称别名或转发头。 最小 fresh 验收: diff --git a/runtimec/binrwir/execution_binding.h b/runtimec/binrwir/execution_binding.h index cecca074..0177f1f9 100644 --- a/runtimec/binrwir/execution_binding.h +++ b/runtimec/binrwir/execution_binding.h @@ -4,7 +4,7 @@ /* * 组件:binrwir/execution_binding * 作用:Binding 将一个有方向的寄存器映射到 canonical Cell。 - * 联系:execution frame 持有 Cell 与 Binding;vmbin 与 vmjit 按同一 + * 联系:execution frame 持有 Cell 与 Binding;vmbin 与 BinRWIR JIT 按同一 * 签名检查显式别名。 * 约束:不同读写寄存器可以指向同一 Cell;Cell 可从 kvspace 重建。 */ diff --git a/runtimec/binrwir/execution_exit.h b/runtimec/binrwir/execution_exit.h index 67d0f157..5378438b 100644 --- a/runtimec/binrwir/execution_exit.h +++ b/runtimec/binrwir/execution_exit.h @@ -3,7 +3,7 @@ /* * 组件:binrwir/execution_exit - * 作用:表达 vmbin 或 vmjit 离开执行窗口的唯一结构化结果。 + * 作用:表达 vmbin 或 BinRWIR JIT 离开执行窗口的唯一结构化结果。 * 联系:engine route 消费退出并决定调用、交接、恢复或报错。 * 约束:不得携带需要持久化的机器地址或伪造成功状态。 */ diff --git a/runtimec/binrwir/execution_frame.h b/runtimec/binrwir/execution_frame.h index f182ffe9..2226759b 100644 --- a/runtimec/binrwir/execution_frame.h +++ b/runtimec/binrwir/execution_frame.h @@ -4,7 +4,7 @@ /* * 组件:binrwir/execution_frame * 作用:保存可从 kvspace 重建的执行帧镜像。 - * 联系:engine route 创建 Frame;vmbin 与 vmjit 消费。 + * 联系:engine route 创建 Frame;vmbin 与 BinRWIR JIT 消费。 * 约束:Frame 不是持久事实源,每条源指令边界必须可观察。 */ diff --git a/runtimec/binrwir/execution_plan.h b/runtimec/binrwir/execution_plan.h index c3e1be7b..e9fbc0c9 100644 --- a/runtimec/binrwir/execution_plan.h +++ b/runtimec/binrwir/execution_plan.h @@ -6,7 +6,7 @@ * 删除并从同一 Program 重建;它不是 RWIR 或 BinRWIR 的语义事实源。 * execution plan 只承载执行加速决策,不持有机器码、缓存、统计、可变 * execution frame 或 kvspace 值。BinRWIR Compiler 在编译阶段确定执行 - * 目标;vmbin 与 vmjit 只执行已选择的目标,不拒绝计划、不重新选路。 + * 目标;vmbin 与 BinRWIR JIT 只执行已选择的目标,不拒绝计划、不重新选路。 */ #include diff --git a/runtimec/binrwir/execution_plan_internal.h b/runtimec/binrwir/execution_plan_internal.h index e4fd4bfd..e69eae99 100644 --- a/runtimec/binrwir/execution_plan_internal.h +++ b/runtimec/binrwir/execution_plan_internal.h @@ -2,7 +2,7 @@ #define BINRWIR_EXECUTION_PLAN_INTERNAL_H /* - * 中立 execution plan 的共享私有布局。compiler/optimization 负责构造, + * 中立 execution plan 的共享私有布局。binrwir_compiler/optimization 负责构造, * binrwir/execution_plan 只负责验证、查询与销毁。全部派生数组放入一个 * owned_storage 块,避免两个组件重复定义对象布局。 */ diff --git a/runtimec/binrwir/instruction.h b/runtimec/binrwir/instruction.h index 918e29b8..855f77b6 100644 --- a/runtimec/binrwir/instruction.h +++ b/runtimec/binrwir/instruction.h @@ -4,7 +4,7 @@ /* * 组件:binrwir/instruction * 作用:热指令的固定宽度表示,以及读取和写入引用的分区视图。 - * 联系:Program 拥有指令和引用池;vmbin 与 vmjit 只读消费。 + * 联系:Program 拥有指令和引用池;vmbin 与 BinRWIR JIT 只读消费。 * 约束:当前窄式和宽式布局不是冻结的持久格式。 */ diff --git a/runtimec/binrwir/program.h b/runtimec/binrwir/program.h index aa08efc3..8e2181b7 100644 --- a/runtimec/binrwir/program.h +++ b/runtimec/binrwir/program.h @@ -4,7 +4,7 @@ /* * 组件:binrwir/program * 作用:定义与 RWIR 语义等价的 canonical、不可变 BinRWIR Program。 - * 联系:vmkv 构造 Program;Compiler、vmbin 与 vmjit 只读消费同一 Program。 + * 联系:vmkv 构造 Program;BinRWIR Compiler、vmbin 与 JIT 只读消费同一 Program。 * 约束:类型特化、kvspace 寻址、融合、虚拟寄存器、控制流派生计划、 * 可变绑定、机器码、缓存和统计均不得进入 Program。 */ diff --git a/runtimec/binrwir/signature.h b/runtimec/binrwir/signature.h index 8cc59e9f..b33c5a3a 100644 --- a/runtimec/binrwir/signature.h +++ b/runtimec/binrwir/signature.h @@ -4,7 +4,7 @@ /* * 组件:binrwir/signature * 作用:定义读参数、写参数和跨方向显式别名规则。 - * 联系:vmkv 生成签名;call 与 vmjit 按同一签名校验绑定。 + * 联系:vmkv 生成签名;call 与 BinRWIR JIT 按同一签名校验绑定。 * 约束:签名是别名策略的唯一所有者;未知关系不得猜测为不重叠。 */ diff --git a/runtimec/binrwir/value.h b/runtimec/binrwir/value.h index adadbe63..1115506e 100644 --- a/runtimec/binrwir/value.h +++ b/runtimec/binrwir/value.h @@ -3,8 +3,8 @@ /* * 组件:binrwir/value - * 作用:vmbin 与 vmjit 共享的 32 字节目标中立值槽。 - * 联系:execution binding、execution frame、vmbin 与 vmjit 共同使用。 + * 作用:vmbin 与 BinRWIR JIT 共享的 32 字节目标中立值槽。 + * 联系:execution binding、execution frame、vmbin 与 BinRWIR JIT 共同使用。 * 约束:布局是内部二进制接口,不是持久格式。 */ diff --git a/runtimec/compiler/compiler.c b/runtimec/binrwir_compiler/compiler.c similarity index 76% rename from runtimec/compiler/compiler.c rename to runtimec/binrwir_compiler/compiler.c index a4f6af14..d0d01929 100644 --- a/runtimec/compiler/compiler.c +++ b/runtimec/binrwir_compiler/compiler.c @@ -3,7 +3,7 @@ * 输出先进入无效状态;合法但尚未实现的请求返回 NOT_IMPLEMENTED。 */ -#include "compiler/compiler.h" +#include "binrwir_compiler/compiler.h" static void binrwir_compilation_reset_view( binrwir_compilation_view_t *view) { @@ -12,11 +12,27 @@ static void binrwir_compilation_reset_view( .execution_target = BINRWIR_EXECUTION_TARGET_INVALID, .canonical_program = NULL, .execution_plan = NULL, - .vmjit_code = NULL, + .binrwir_jit_code = NULL, }; } } +static bool binrwir_compiler_jit_configuration_is_valid( + const binrwir_compiler_configuration_t *configuration) { + if (configuration->enable_jit) { + return configuration->jit_machine_code_capacity > 0U && + configuration->jit_target.architecture != + BINRWIR_JIT_ARCHITECTURE_NONE && + runtimec_string_view_is_valid(configuration->jit_target.triple); + } + return configuration->jit_machine_code_capacity == 0U && + configuration->jit_target.architecture == + BINRWIR_JIT_ARCHITECTURE_NONE && + configuration->jit_target.triple.data == NULL && + configuration->jit_target.triple.size == 0U && + configuration->jit_target.feature_mask == 0U; +} + runtimec_status_t binrwir_compiler_create( const runtimec_allocator_t *allocator, const binrwir_compiler_configuration_t *configuration, @@ -29,10 +45,7 @@ runtimec_status_t binrwir_compiler_create( output_compiler == NULL || configuration->structure_size != sizeof(*configuration) || configuration->compiler_revision == 0U || - (configuration->enable_vmjit && - configuration->vmjit_compiler == NULL) || - (!configuration->enable_vmjit && - configuration->vmjit_compiler != NULL)) { + !binrwir_compiler_jit_configuration_is_valid(configuration)) { return RUNTIMEC_STATUS_INVALID; } (void)error; diff --git a/runtimec/compiler/compiler.h b/runtimec/binrwir_compiler/compiler.h similarity index 61% rename from runtimec/compiler/compiler.h rename to runtimec/binrwir_compiler/compiler.h index 48e29864..410bb374 100644 --- a/runtimec/compiler/compiler.h +++ b/runtimec/binrwir_compiler/compiler.h @@ -1,13 +1,14 @@ -#ifndef RUNTIMEC_COMPILER_COMPILER_H -#define RUNTIMEC_COMPILER_COMPILER_H +#ifndef RUNTIMEC_BINRWIR_COMPILER_COMPILER_H +#define RUNTIMEC_BINRWIR_COMPILER_COMPILER_H /* * 组件:BinRWIR Compiler * 作用:从 canonical BinRWIR Program 派生 execution plan,并在启用时于同一 - * 编译阶段请求 vmjit 编译机器码。输出是统一的 opaque compilation。 - * 联系:唯一内容输入是 binrwir_program_t;结果可明确选择 vmbin 或 vmjit。 - * 约束:不读取 RWIR 或 kvspace,不执行 Program;全部优化只在本模块完成, - * 真实错误不得转换成 VMBIN compilation。 + * 编译阶段尝试生成 JIT 机器码。输出是统一的 opaque compilation。 + * 联系:唯一内容输入是 binrwir_program_t;编译阶段一次性选择 VMBIN 或 JIT。 + * 约束:不读取 RWIR 或 kvspace,不执行 Program;全部优化只在本模块完成。 + * JIT 不可编译只形成 VMBIN plan;真实编译错误不得转换成 VMBIN plan。 + * 执行阶段不得再次探测 JIT,也不得在 JIT 与 VMBIN 之间回退。 */ #include @@ -16,46 +17,48 @@ #include "binrwir/execution_plan.h" #include "binrwir/program.h" +#include "binrwir_compiler/jit/backend.h" +#include "binrwir_compiler/jit/code.h" #include "contract/allocator.h" #include "contract/status.h" -#include "vmjit/code.h" #ifdef __cplusplus extern "C" { #endif -typedef struct vmjit_compiler_t vmjit_compiler_t; typedef struct binrwir_compiler_t binrwir_compiler_t; typedef struct binrwir_compilation_t binrwir_compilation_t; typedef enum binrwir_execution_target_t { BINRWIR_EXECUTION_TARGET_INVALID = 0, BINRWIR_EXECUTION_TARGET_VMBIN = 1, - BINRWIR_EXECUTION_TARGET_VMJIT = 2 + BINRWIR_EXECUTION_TARGET_JIT = 2 } binrwir_execution_target_t; /* - * enable_vmjit 为 false 时 vmjit_compiler 必须为空;为 true 时必须非空。 - * create 成功后,vmjit_compiler 的所有权转入 BinRWIR Compiler;create - * 失败时所有权仍属于调用者。structure_size 必须精确等于本结构大小。 + * BinRWIR Compiler 根据这些值在内部创建并独占 JIT compiler,调用者不得 + * 构造或注入 JIT compiler 对象。enable_jit 为 true 时 capacity 必须非零, + * target architecture 必须明确;为 false 时所有 JIT 字段必须保持零值。 + * create 必须复制 jit_target.triple 字节。configuration 只在调用期间有效。 */ typedef struct binrwir_compiler_configuration_t { size_t structure_size; uint32_t compiler_revision; - bool enable_vmjit; - vmjit_compiler_t *vmjit_compiler; + bool enable_jit; + size_t jit_machine_code_capacity; + binrwir_jit_target_t jit_target; } binrwir_compiler_configuration_t; /* - * 本视图借用 compilation 持有的对象。 - * compilation 对象只表示已经成功完成的编译。VMJIT 目标必须携带非空 - * vmjit_code;VMBIN 目标必须保持 vmjit_code 为空。编译错误不产生对象。 + * 本视图借用 compilation 持有的对象。compilation 只表示已经成功完成的编译。 + * JIT 目标必须携带非空 binrwir_jit_code;VMBIN 目标必须保持该字段为空。 + * JIT 不可编译产生 VMBIN compilation;编译错误不产生 compilation。 */ typedef struct binrwir_compilation_view_t { binrwir_execution_target_t execution_target; const binrwir_program_t *canonical_program; const binrwir_execution_plan_t *execution_plan; - const vmjit_code_t *vmjit_code; + const binrwir_jit_code_t *binrwir_jit_code; } binrwir_compilation_view_t; runtimec_status_t binrwir_compiler_create( diff --git a/runtimec/binrwir_compiler/jit/backend.h b/runtimec/binrwir_compiler/jit/backend.h new file mode 100644 index 00000000..28adccc4 --- /dev/null +++ b/runtimec/binrwir_compiler/jit/backend.h @@ -0,0 +1,69 @@ +#ifndef RUNTIMEC_BINRWIR_JIT_BACKEND_H +#define RUNTIMEC_BINRWIR_JIT_BACKEND_H + +/* + * 组件:binrwir_compiler/jit/backend + * 作用:单一 backend 契约:目标架构与 feature 判定及机器码生成。x86_64 与 + * AArch64 是并列 peer,谁也不是另一个的默认模板。 + * backend 只拥有指令编码、调用约定实现、寄存器/spill、常量池/ + * branch fixup、可执行页切换与 instruction cache 同步;不拥有 Program 语义、 + * eligibility 或 cache identity。 + * 联系:binrwir_compiler/jit/compiler 选择 backend;emit 请求来自 lower;输出由 + * code_memory 发布。backend 禁止读 RWIR、kvspace 或 route policy。 + * 约束:未知 processor 或缺 feature 必须返回 UNSUPPORTED,不得默认 x86_64。 + */ + +#include +#include +#include +#include "contract/status.h" +#include "contract/view.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum binrwir_jit_architecture_t { + BINRWIR_JIT_ARCHITECTURE_NONE = 0, + BINRWIR_JIT_ARCHITECTURE_X86_64 = 1, + BINRWIR_JIT_ARCHITECTURE_AARCH64 = 2 +} binrwir_jit_architecture_t; +typedef struct binrwir_jit_target_t { + binrwir_jit_architecture_t architecture; + runtimec_string_view_t triple; + uint64_t feature_mask; +} binrwir_jit_target_t; + +struct binrwir_jit_lowered_program; + +typedef struct binrwir_jit_emit_request_t { + const struct binrwir_jit_lowered_program *lowered_program; + runtimec_bytes_buffer_t writable_code; +} binrwir_jit_emit_request_t; + +typedef struct binrwir_jit_emit_result_t { + size_t machine_code_size; + size_t entry_byte_offset; +} binrwir_jit_emit_result_t; +typedef struct binrwir_jit_backend_t { + binrwir_jit_architecture_t architecture; + runtimec_string_view_t name; + bool (*supports)(const binrwir_jit_target_t *target); + runtimec_status_t (*emit)( + const binrwir_jit_emit_request_t *request, + binrwir_jit_emit_result_t *output_result, + runtimec_error_t *error); +} binrwir_jit_backend_t; +runtimec_status_t binrwir_jit_backend_for_target( + const binrwir_jit_target_t *target, + const binrwir_jit_backend_t **output_backend); +runtimec_status_t binrwir_jit_x86_64_backend( + const binrwir_jit_backend_t **output_backend); +runtimec_status_t binrwir_jit_aarch64_backend( + const binrwir_jit_backend_t **output_backend); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmjit/backend/aarch64.c b/runtimec/binrwir_compiler/jit/backend/aarch64.c similarity index 69% rename from runtimec/vmjit/backend/aarch64.c rename to runtimec/binrwir_compiler/jit/backend/aarch64.c index 4db82ef5..02e918ed 100644 --- a/runtimec/vmjit/backend/aarch64.c +++ b/runtimec/binrwir_compiler/jit/backend/aarch64.c @@ -1,16 +1,16 @@ /* - * 组件:vmjit/backend/aarch64 + * 组件:binrwir_compiler/jit/backend/aarch64 * 作用:AArch64 backend 入口;当前显式返回 UNSUPPORTED。它不是 x86 完成后的 * 占位:必须真实实现同一 backend contract,否则不可编译。 * 联系:与 x86_64 peer;只消费 lower/emit request。 */ -#include "vmjit/backend.h" +#include "binrwir_compiler/jit/backend.h" #include -runtimec_status_t vmjit_aarch64_backend( - const vmjit_backend_t **output_backend) { +runtimec_status_t binrwir_jit_aarch64_backend( + const binrwir_jit_backend_t **output_backend) { if (output_backend == NULL) { return RUNTIMEC_STATUS_INVALID; } diff --git a/runtimec/vmjit/backend/backend.c b/runtimec/binrwir_compiler/jit/backend/backend.c similarity index 53% rename from runtimec/vmjit/backend/backend.c rename to runtimec/binrwir_compiler/jit/backend/backend.c index 276e748a..25611a4f 100644 --- a/runtimec/vmjit/backend/backend.c +++ b/runtimec/binrwir_compiler/jit/backend/backend.c @@ -1,17 +1,17 @@ /* - * 组件:vmjit/backend/backend + * 组件:binrwir_compiler/jit/backend/backend * 作用:按目标选择 backend;当前显式返回 UNSUPPORTED。未知 processor * 不得默认 x86_64。 - * 联系:vmjit/compiler 调用;x86_64/aarch64 是并列 peer。 + * 联系:binrwir_compiler/jit/compiler 调用;x86_64/aarch64 是并列 peer。 */ -#include "vmjit/backend.h" +#include "binrwir_compiler/jit/backend.h" #include -runtimec_status_t vmjit_backend_for_target( - const vmjit_target_t *target, - const vmjit_backend_t **output_backend) { +runtimec_status_t binrwir_jit_backend_for_target( + const binrwir_jit_target_t *target, + const binrwir_jit_backend_t **output_backend) { if (output_backend != NULL) { *output_backend = NULL; } diff --git a/runtimec/vmjit/backend/x86_64.c b/runtimec/binrwir_compiler/jit/backend/x86_64.c similarity index 61% rename from runtimec/vmjit/backend/x86_64.c rename to runtimec/binrwir_compiler/jit/backend/x86_64.c index c8d9044f..5cf1e2f2 100644 --- a/runtimec/vmjit/backend/x86_64.c +++ b/runtimec/binrwir_compiler/jit/backend/x86_64.c @@ -1,18 +1,18 @@ /* - * 组件:vmjit/backend/x86_64 + * 组件:binrwir_compiler/jit/backend/x86_64 * 作用:x86_64 backend 入口;当前显式返回 UNSUPPORTED。它与 AArch64 * 是 peer 关系,只拥有 * 目标机制(编码、调用约定、寄存器、spill、常量池、branch fixup、 * 代码页切换与 instruction cache 同步)。 - * 联系:vmjit/compiler 通过 backend contract 选择;不得读 RWIR/kvspace。 + * 联系:binrwir_compiler/jit/compiler 通过 backend contract 选择;不得读 RWIR/kvspace。 */ -#include "vmjit/backend.h" +#include "binrwir_compiler/jit/backend.h" #include -runtimec_status_t vmjit_x86_64_backend( - const vmjit_backend_t **output_backend) { +runtimec_status_t binrwir_jit_x86_64_backend( + const binrwir_jit_backend_t **output_backend) { if (output_backend == NULL) { return RUNTIMEC_STATUS_INVALID; } diff --git a/runtimec/vmjit/code.c b/runtimec/binrwir_compiler/jit/code.c similarity index 62% rename from runtimec/vmjit/code.c rename to runtimec/binrwir_compiler/jit/code.c index 8419ad5e..dcb8e5a3 100644 --- a/runtimec/vmjit/code.c +++ b/runtimec/binrwir_compiler/jit/code.c @@ -1,12 +1,12 @@ -/* vmjit/code 的失败封闭骨架。 */ +/* binrwir_compiler/jit/code 的失败封闭骨架。 */ -#include "vmjit/code.h" +#include "binrwir_compiler/jit/code.h" -runtimec_status_t vmjit_code_create( - vmjit_code_memory_t *memory, +runtimec_status_t binrwir_jit_code_create( + binrwir_jit_code_memory_t *memory, size_t machine_code_size, size_t entry_byte_offset, - vmjit_code_t **output_code, + binrwir_jit_code_t **output_code, runtimec_error_t *error) { (void)error; if (output_code != NULL) { @@ -19,23 +19,23 @@ runtimec_status_t vmjit_code_create( return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmjit_code_retain(vmjit_code_t *code) { +runtimec_status_t binrwir_jit_code_retain(binrwir_jit_code_t *code) { if (code == NULL) { return RUNTIMEC_STATUS_INVALID; } return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmjit_code_release(vmjit_code_t *code) { +runtimec_status_t binrwir_jit_code_release(binrwir_jit_code_t *code) { if (code == NULL) { return RUNTIMEC_STATUS_INVALID; } return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmjit_code_get_machine_code_function( - const vmjit_code_t *code, - vmjit_machine_code_function_t *output_function) { +runtimec_status_t binrwir_jit_code_get_machine_code_function( + const binrwir_jit_code_t *code, + binrwir_jit_machine_code_function_t *output_function) { if (output_function != NULL) { *output_function = NULL; } diff --git a/runtimec/binrwir_compiler/jit/code.h b/runtimec/binrwir_compiler/jit/code.h new file mode 100644 index 00000000..9f73b9a3 --- /dev/null +++ b/runtimec/binrwir_compiler/jit/code.h @@ -0,0 +1,43 @@ +#ifndef RUNTIMEC_BINRWIR_JIT_CODE_H +#define RUNTIMEC_BINRWIR_JIT_CODE_H + +/* + * 组件:binrwir_compiler/jit/code + * 作用:已发布机器码的引用计数句柄:retain/release 保证执行期间 code + * 不被回收;entry 返回调用入口。 + * 联系:binrwir_jit 编译阶段产生;BinRWIR compilation 持有 code,compilation + * repository 的 lease 保证执行期间有效;最后一个引用释放后回收 + * 只读可执行页。 + * 约束:句柄不暴露机器地址给持久层;事务边界由 route 保证。 + */ + +#include + +#include "contract/snapshot.h" +#include "binrwir_compiler/jit/backend.h" +#include "binrwir_compiler/jit/code_memory.h" +#include "binrwir_compiler/jit/execution_interface.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct binrwir_jit_code binrwir_jit_code_t; +/* 成功时 code 接管已发布 memory;失败时 memory 仍归调用者。 */ +runtimec_status_t binrwir_jit_code_create( + binrwir_jit_code_memory_t *memory, + size_t machine_code_size, + size_t entry_byte_offset, + binrwir_jit_code_t **output_code, + runtimec_error_t *error); +runtimec_status_t binrwir_jit_code_retain(binrwir_jit_code_t *code); +runtimec_status_t binrwir_jit_code_release(binrwir_jit_code_t *code); +runtimec_status_t binrwir_jit_code_get_machine_code_function( + const binrwir_jit_code_t *code, + binrwir_jit_machine_code_function_t *output_function); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmjit/code_memory.c b/runtimec/binrwir_compiler/jit/code_memory.c similarity index 66% rename from runtimec/vmjit/code_memory.c rename to runtimec/binrwir_compiler/jit/code_memory.c index fcba6195..98e42710 100644 --- a/runtimec/vmjit/code_memory.c +++ b/runtimec/binrwir_compiler/jit/code_memory.c @@ -1,10 +1,10 @@ -/* vmjit/code_memory 的失败封闭骨架。 */ +/* binrwir_compiler/jit/code_memory 的失败封闭骨架。 */ -#include "vmjit/code_memory.h" +#include "binrwir_compiler/jit/code_memory.h" -runtimec_status_t vmjit_code_memory_create( +runtimec_status_t binrwir_jit_code_memory_create( size_t capacity, - vmjit_code_memory_t **output_memory, + binrwir_jit_code_memory_t **output_memory, runtimec_error_t *error) { (void)error; if (output_memory != NULL) { @@ -16,8 +16,8 @@ runtimec_status_t vmjit_code_memory_create( return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmjit_code_memory_writable_view( - vmjit_code_memory_t *memory, +runtimec_status_t binrwir_jit_code_memory_writable_view( + binrwir_jit_code_memory_t *memory, runtimec_bytes_buffer_t *output_buffer, runtimec_error_t *error) { (void)error; @@ -30,8 +30,8 @@ runtimec_status_t vmjit_code_memory_writable_view( return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmjit_code_memory_publish( - vmjit_code_memory_t *memory, +runtimec_status_t binrwir_jit_code_memory_publish( + binrwir_jit_code_memory_t *memory, size_t code_size, runtimec_error_t *error) { (void)error; @@ -41,7 +41,7 @@ runtimec_status_t vmjit_code_memory_publish( return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmjit_code_memory_destroy(vmjit_code_memory_t *memory) { +runtimec_status_t binrwir_jit_code_memory_destroy(binrwir_jit_code_memory_t *memory) { if (memory == NULL) { return RUNTIMEC_STATUS_INVALID; } diff --git a/runtimec/vmjit/code_memory.h b/runtimec/binrwir_compiler/jit/code_memory.h similarity index 52% rename from runtimec/vmjit/code_memory.h rename to runtimec/binrwir_compiler/jit/code_memory.h index 7dce80ff..8b7dd62a 100644 --- a/runtimec/vmjit/code_memory.h +++ b/runtimec/binrwir_compiler/jit/code_memory.h @@ -1,12 +1,12 @@ -#ifndef RUNTIMEC_VMJIT_CODE_MEMORY_H -#define RUNTIMEC_VMJIT_CODE_MEMORY_H +#ifndef RUNTIMEC_BINRWIR_JIT_CODE_MEMORY_H +#define RUNTIMEC_BINRWIR_JIT_CODE_MEMORY_H /* - * 组件:vmjit/code_memory + * 组件:binrwir_compiler/jit/code_memory * 作用:可执行页的生命周期:分配可写页 -> emit/relocate -> 切换可执行 * 并取消可写 -> 平台 instruction cache 同步 -> 由 code lease 管理回收。 * 内存不可同时可写与可执行。 - * 联系:backend 写入 writable_view;vmjit compiler 调 publish;完成的 + * 联系:backend 写入 writable_view;binrwir_jit compiler 调 publish;完成的 * BinRWIR compilation 管理机器码生命周期。 * 约束:发布失败或 entitlement 不足时返回错误,绝不执行未发布内存。 */ @@ -20,20 +20,20 @@ extern "C" { #endif -typedef struct vmjit_code_memory vmjit_code_memory_t; -runtimec_status_t vmjit_code_memory_create( +typedef struct binrwir_jit_code_memory binrwir_jit_code_memory_t; +runtimec_status_t binrwir_jit_code_memory_create( size_t capacity, - vmjit_code_memory_t **output_memory, + binrwir_jit_code_memory_t **output_memory, runtimec_error_t *error); -runtimec_status_t vmjit_code_memory_writable_view( - vmjit_code_memory_t *memory, +runtimec_status_t binrwir_jit_code_memory_writable_view( + binrwir_jit_code_memory_t *memory, runtimec_bytes_buffer_t *output_buffer, runtimec_error_t *error); -runtimec_status_t vmjit_code_memory_publish( - vmjit_code_memory_t *memory, +runtimec_status_t binrwir_jit_code_memory_publish( + binrwir_jit_code_memory_t *memory, size_t code_size, runtimec_error_t *error); -runtimec_status_t vmjit_code_memory_destroy(vmjit_code_memory_t *memory); +runtimec_status_t binrwir_jit_code_memory_destroy(binrwir_jit_code_memory_t *memory); #ifdef __cplusplus } diff --git a/runtimec/vmjit/compiler.c b/runtimec/binrwir_compiler/jit/compiler.c similarity index 52% rename from runtimec/vmjit/compiler.c rename to runtimec/binrwir_compiler/jit/compiler.c index 1a7b7ce2..985c1c7f 100644 --- a/runtimec/vmjit/compiler.c +++ b/runtimec/binrwir_compiler/jit/compiler.c @@ -1,22 +1,22 @@ -/* vmjit/compiler 的失败封闭骨架。 */ +/* binrwir_compiler/jit/compiler 的失败封闭骨架。 */ -#include "vmjit/compiler.h" +#include "binrwir_compiler/jit/compiler.h" -static void vmjit_compilation_result_reset( - vmjit_compilation_result_t *result, - vmjit_compilation_outcome_t outcome, - vmjit_refusal_reason_t refusal_reason) { +static void binrwir_jit_compilation_result_reset( + binrwir_jit_compilation_result_t *result, + binrwir_jit_compilation_outcome_t outcome, + binrwir_jit_refusal_reason_t refusal_reason) { if (result != NULL) { - *result = (vmjit_compilation_result_t){0}; + *result = (binrwir_jit_compilation_result_t){0}; result->outcome = outcome; result->refusal.reason = refusal_reason; } } -runtimec_status_t vmjit_compiler_create( +runtimec_status_t binrwir_jit_compiler_create( runtimec_allocator_t allocator, - const vmjit_compiler_configuration_t *configuration, - vmjit_compiler_t **output_compiler, + const binrwir_jit_compiler_configuration_t *configuration, + binrwir_jit_compiler_t **output_compiler, runtimec_error_t *error) { (void)error; if (output_compiler != NULL) { @@ -31,31 +31,31 @@ runtimec_status_t vmjit_compiler_create( return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmjit_compiler_destroy(vmjit_compiler_t *compiler) { +runtimec_status_t binrwir_jit_compiler_destroy(binrwir_jit_compiler_t *compiler) { if (compiler == NULL) { return RUNTIMEC_STATUS_INVALID; } return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmjit_compile( - vmjit_compiler_t *compiler, +runtimec_status_t binrwir_jit_compile( + binrwir_jit_compiler_t *compiler, const binrwir_program_t *program, const binrwir_execution_plan_t *execution_plan, - vmjit_compilation_result_t *output_result, + binrwir_jit_compilation_result_t *output_result, runtimec_error_t *error) { (void)error; - vmjit_compilation_result_reset( + binrwir_jit_compilation_result_reset( output_result, - VMJIT_COMPILATION_OUTCOME_INVALID, - VMJIT_REFUSAL_INVALID_PROGRAM); + BINRWIR_JIT_COMPILATION_OUTCOME_INVALID, + BINRWIR_JIT_REFUSAL_INVALID_PROGRAM); if (compiler == NULL || program == NULL || execution_plan == NULL || output_result == NULL) { return RUNTIMEC_STATUS_INVALID; } - vmjit_compilation_result_reset( + binrwir_jit_compilation_result_reset( output_result, - VMJIT_COMPILATION_OUTCOME_ERROR, - VMJIT_REFUSAL_NONE); + BINRWIR_JIT_COMPILATION_OUTCOME_ERROR, + BINRWIR_JIT_REFUSAL_NONE); return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } diff --git a/runtimec/binrwir_compiler/jit/compiler.h b/runtimec/binrwir_compiler/jit/compiler.h new file mode 100644 index 00000000..8e14856d --- /dev/null +++ b/runtimec/binrwir_compiler/jit/compiler.h @@ -0,0 +1,69 @@ +#ifndef RUNTIMEC_BINRWIR_JIT_COMPILER_H +#define RUNTIMEC_BINRWIR_JIT_COMPILER_H + +/* + * 组件:binrwir_compiler/jit/compiler + * 作用:binrwir_jit 机器码编译入口:消费 canonical Program 与顶层 BinRWIR + * Compiler 已生成的 execution plan,完成验证、lowering 与 backend 生成。 + * 联系:顶层 BinRWIR Compiler 在编译阶段调用;本组件先验证 canonical + * BinRWIR 与 execution plan,再生成机器码并返回编译判定。 + * 约束:compile 不读 RWIR/kvspace;只有 COMPILED 携带 code。内部阶段的 + * UNSUPPORTED 转成 SUCCESS + NOT_COMPILABLE;非法 BinRWIR、内存不足 + * 和内部错误返回原错误状态 + ERROR,不能建立可执行 code。 + */ + +#include +#include + +#include "contract/allocator.h" +#include "contract/status.h" +#include "binrwir/execution_plan.h" +#include "binrwir/program.h" +#include "binrwir_compiler/jit/backend.h" +#include "binrwir_compiler/jit/code.h" +#include "binrwir_compiler/jit/verifier.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct binrwir_jit_compiler_t binrwir_jit_compiler_t; +typedef enum binrwir_jit_compilation_outcome_t { + BINRWIR_JIT_COMPILATION_OUTCOME_INVALID = 0, + BINRWIR_JIT_COMPILATION_OUTCOME_COMPILED = 1, + BINRWIR_JIT_COMPILATION_OUTCOME_NOT_COMPILABLE = 2, + BINRWIR_JIT_COMPILATION_OUTCOME_ERROR = 3 +} binrwir_jit_compilation_outcome_t; +typedef struct binrwir_jit_compilation_result_t { + binrwir_jit_compilation_outcome_t outcome; + /* 仅 COMPILED 可非 NULL;其它 outcome 必须保持 NULL。 */ + binrwir_jit_code_t *code; + binrwir_jit_refusal_t refusal; +} binrwir_jit_compilation_result_t; +typedef struct binrwir_jit_compiler_configuration_t { + uint32_t structure_size; + size_t machine_code_capacity; + uint64_t generation; + binrwir_jit_target_t target; +} binrwir_jit_compiler_configuration_t; + +/* create 必须复制 target.triple 字节;configuration 只在调用期间有效。 */ + +runtimec_status_t binrwir_jit_compiler_create( + runtimec_allocator_t allocator, + const binrwir_jit_compiler_configuration_t *configuration, + binrwir_jit_compiler_t **output_compiler, + runtimec_error_t *error); +runtimec_status_t binrwir_jit_compiler_destroy(binrwir_jit_compiler_t *compiler); +runtimec_status_t binrwir_jit_compile( + binrwir_jit_compiler_t *compiler, + const binrwir_program_t *program, + const binrwir_execution_plan_t *execution_plan, + binrwir_jit_compilation_result_t *output_result, + runtimec_error_t *error); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/binrwir_compiler/jit/execution_interface.c b/runtimec/binrwir_compiler/jit/execution_interface.c new file mode 100644 index 00000000..4f396a5f --- /dev/null +++ b/runtimec/binrwir_compiler/jit/execution_interface.c @@ -0,0 +1,14 @@ +/* binrwir_compiler/jit/execution_interface 的失败封闭骨架。 */ + +#include "binrwir_compiler/jit/execution_interface.h" + +runtimec_status_t binrwir_jit_execution_interface( + binrwir_jit_execution_interface_t *output_interface) { + if (output_interface != NULL) { + *output_interface = (binrwir_jit_execution_interface_t){0}; + } + if (output_interface == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/vmjit/execution_interface.h b/runtimec/binrwir_compiler/jit/execution_interface.h similarity index 57% rename from runtimec/vmjit/execution_interface.h rename to runtimec/binrwir_compiler/jit/execution_interface.h index 0bf9238b..e33fbe60 100644 --- a/runtimec/vmjit/execution_interface.h +++ b/runtimec/binrwir_compiler/jit/execution_interface.h @@ -1,12 +1,12 @@ -#ifndef RUNTIMEC_VMJIT_EXECUTION_INTERFACE_H -#define RUNTIMEC_VMJIT_EXECUTION_INTERFACE_H +#ifndef RUNTIMEC_BINRWIR_JIT_EXECUTION_INTERFACE_H +#define RUNTIMEC_BINRWIR_JIT_EXECUTION_INTERFACE_H /* - * 组件:vmjit/execution_interface + * 组件:binrwir_compiler/jit/execution_interface * 作用:机器码入口与执行 binary interface 的最小描述:入口函数签名、 - * ValueSlot 大小与 Frame 对齐。骨架期不冻结最终寄存器约定、vmjit + * ValueSlot 大小与 Frame 对齐。骨架期不冻结最终寄存器约定、binrwir_jit * frame/stack 布局或稳定机器 binary interface。 - * 联系:vmjit compiler 与 backend 共用;中立 BinRWIR value 与 execution + * 联系:binrwir_jit compiler 与 backend 共用;中立 BinRWIR value 与 execution * frame 合同是唯一布局来源,机器码生成器不得手写第二份 offset。 * 约束:版本变化必须进入 compilation repository key;本文件不定义语言语义。 */ @@ -21,23 +21,23 @@ extern "C" { #endif -#define VMJIT_EXECUTION_BINARY_INTERFACE_MAJOR_VERSION 0u -#define VMJIT_EXECUTION_BINARY_INTERFACE_MINOR_VERSION 1u +#define BINRWIR_JIT_EXECUTION_BINARY_INTERFACE_MAJOR_VERSION 0u +#define BINRWIR_JIT_EXECUTION_BINARY_INTERFACE_MINOR_VERSION 1u -typedef void (*vmjit_machine_code_function_t)( +typedef void (*binrwir_jit_machine_code_function_t)( void *execution_state, binrwir_execution_frame_t *frame, binrwir_execution_exit_t *exit); -typedef struct vmjit_execution_interface_t { +typedef struct binrwir_jit_execution_interface_t { uint16_t binary_interface_major_version; uint16_t binary_interface_minor_version; uint32_t value_slot_size_bytes; uint32_t frame_alignment_bytes; -} vmjit_execution_interface_t; +} binrwir_jit_execution_interface_t; -runtimec_status_t vmjit_execution_interface( - vmjit_execution_interface_t *output_interface); +runtimec_status_t binrwir_jit_execution_interface( + binrwir_jit_execution_interface_t *output_interface); #ifdef __cplusplus } diff --git a/runtimec/vmjit/vmjit.c b/runtimec/binrwir_compiler/jit/executor.c similarity index 75% rename from runtimec/vmjit/vmjit.c rename to runtimec/binrwir_compiler/jit/executor.c index 383b365e..aabb311e 100644 --- a/runtimec/vmjit/vmjit.c +++ b/runtimec/binrwir_compiler/jit/executor.c @@ -1,9 +1,9 @@ -/* vmjit 确定执行入口的失败封闭骨架。 */ +/* BinRWIR JIT 确定执行入口的失败封闭骨架。 */ -#include "vmjit/vmjit.h" +#include "binrwir_compiler/jit/executor.h" -runtimec_status_t vmjit_execute( - const vmjit_code_t *code, +runtimec_status_t binrwir_jit_execute( + const binrwir_jit_code_t *code, binrwir_execution_frame_t *frame, binrwir_execution_exit_t *output_exit, runtimec_error_t *error) { diff --git a/runtimec/binrwir_compiler/jit/executor.h b/runtimec/binrwir_compiler/jit/executor.h new file mode 100644 index 00000000..11faa07c --- /dev/null +++ b/runtimec/binrwir_compiler/jit/executor.h @@ -0,0 +1,33 @@ +#ifndef RUNTIMEC_BINRWIR_JIT_EXECUTOR_H +#define RUNTIMEC_BINRWIR_JIT_EXECUTOR_H + +/* + * 组件:binrwir_compiler/jit/executor + * 作用:执行 BinRWIR Compiler 已选定并生成的机器码。可编译性只在 compiler、 + * verifier 与 backend 阶段决定;执行入口没有拒绝、重编译或替代路径。 + * 联系:engine/route 只在 BinRWIR compilation 的不可变执行目标为 JIT 时调用; + * 输出为 BinRWIR execution exit,交给 route 提交。 + * 约束:JIT executor 不读 RWIR、不访问 kvspace、不依赖 vmbin;非法机器码 + * 句柄、out-of-memory 或内部错误必须直接返回错误。 + */ + +#include "binrwir/execution_exit.h" +#include "binrwir/execution_frame.h" +#include "binrwir_compiler/jit/code.h" +#include "contract/status.h" + +#ifdef __cplusplus +extern "C" { +#endif + +runtimec_status_t binrwir_jit_execute( + const binrwir_jit_code_t *code, + binrwir_execution_frame_t *frame, + binrwir_execution_exit_t *output_exit, + runtimec_error_t *error); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmjit/lower.c b/runtimec/binrwir_compiler/jit/lower.c similarity index 58% rename from runtimec/vmjit/lower.c rename to runtimec/binrwir_compiler/jit/lower.c index 21418dba..b5f3a77e 100644 --- a/runtimec/vmjit/lower.c +++ b/runtimec/binrwir_compiler/jit/lower.c @@ -1,11 +1,11 @@ -/* vmjit/lower 的失败封闭骨架。 */ +/* binrwir_compiler/jit/lower 的失败封闭骨架。 */ -#include "vmjit/lower.h" +#include "binrwir_compiler/jit/lower.h" -runtimec_status_t vmjit_lower( - const vmjit_lowering_plan_t *plan, +runtimec_status_t binrwir_jit_lower( + const binrwir_jit_lowering_plan_t *plan, const runtimec_allocator_t *allocator, - vmjit_lowered_program_t **output_program, + binrwir_jit_lowered_program_t **output_program, runtimec_error_t *error) { (void)error; if (output_program != NULL) { @@ -18,8 +18,8 @@ runtimec_status_t vmjit_lower( return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmjit_lowered_program_destroy( - vmjit_lowered_program_t *program) { +runtimec_status_t binrwir_jit_lowered_program_destroy( + binrwir_jit_lowered_program_t *program) { if (program == NULL) { return RUNTIMEC_STATUS_INVALID; } diff --git a/runtimec/binrwir_compiler/jit/lower.h b/runtimec/binrwir_compiler/jit/lower.h new file mode 100644 index 00000000..7474c831 --- /dev/null +++ b/runtimec/binrwir_compiler/jit/lower.h @@ -0,0 +1,33 @@ +#ifndef RUNTIMEC_BINRWIR_JIT_LOWER_H +#define RUNTIMEC_BINRWIR_JIT_LOWER_H + +/* + * 组件:binrwir_compiler/jit/lower + * 作用:把目标相关 lowering plan 转成机器码生成请求,不重新解释 RWIR 语义。 + * 联系:plan 来自 binrwir_compiler/jit/lowering_plan;输出交给 backend 的 emit;lower 不接触 + * kvspace/host。 + * 约束:具体 micro operation 编码当前未冻结。 + */ + +#include "contract/allocator.h" +#include "contract/status.h" +#include "binrwir_compiler/jit/lowering_plan.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct binrwir_jit_lowered_program binrwir_jit_lowered_program_t; +runtimec_status_t binrwir_jit_lower( + const binrwir_jit_lowering_plan_t *plan, + const runtimec_allocator_t *allocator, + binrwir_jit_lowered_program_t **output_program, + runtimec_error_t *error); +runtimec_status_t binrwir_jit_lowered_program_destroy( + binrwir_jit_lowered_program_t *program); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/vmjit/lowering_plan.c b/runtimec/binrwir_compiler/jit/lowering_plan.c similarity index 54% rename from runtimec/vmjit/lowering_plan.c rename to runtimec/binrwir_compiler/jit/lowering_plan.c index fc088126..a5cbbeb3 100644 --- a/runtimec/vmjit/lowering_plan.c +++ b/runtimec/binrwir_compiler/jit/lowering_plan.c @@ -1,23 +1,23 @@ -/* vmjit/lowering_plan 的失败封闭骨架。 */ +/* binrwir_compiler/jit/lowering_plan 的失败封闭骨架。 */ -#include "vmjit/lowering_plan.h" +#include "binrwir_compiler/jit/lowering_plan.h" -runtimec_status_t vmjit_lowering_plan_create( - const vmjit_verified_program_t *verified_program, +runtimec_status_t binrwir_jit_lowering_plan_create( + const binrwir_jit_verified_program_t *verified_program, const binrwir_execution_plan_t *execution_plan, - const vmjit_target_t *target, - const vmjit_lowering_plan_options_t *options, + const binrwir_jit_target_t *target, + const binrwir_jit_lowering_plan_options_t *options, const runtimec_allocator_t *allocator, - vmjit_lowering_plan_t **output_plan, - vmjit_refusal_t *refusal, + binrwir_jit_lowering_plan_t **output_plan, + binrwir_jit_refusal_t *refusal, runtimec_error_t *error) { (void)error; if (output_plan != NULL) { *output_plan = NULL; } if (refusal != NULL) { - *refusal = (vmjit_refusal_t){ - .reason = VMJIT_REFUSAL_INVALID_PROGRAM, + *refusal = (binrwir_jit_refusal_t){ + .reason = BINRWIR_JIT_REFUSAL_INVALID_PROGRAM, }; } if (verified_program == NULL || verified_program->program == NULL || @@ -27,11 +27,11 @@ runtimec_status_t vmjit_lowering_plan_create( refusal == NULL) { return RUNTIMEC_STATUS_INVALID; } - refusal->reason = VMJIT_REFUSAL_NONE; + refusal->reason = BINRWIR_JIT_REFUSAL_NONE; return RUNTIMEC_STATUS_NOT_IMPLEMENTED; } -runtimec_status_t vmjit_lowering_plan_destroy(vmjit_lowering_plan_t *plan) { +runtimec_status_t binrwir_jit_lowering_plan_destroy(binrwir_jit_lowering_plan_t *plan) { if (plan == NULL) { return RUNTIMEC_STATUS_INVALID; } diff --git a/runtimec/vmjit/lowering_plan.h b/runtimec/binrwir_compiler/jit/lowering_plan.h similarity index 54% rename from runtimec/vmjit/lowering_plan.h rename to runtimec/binrwir_compiler/jit/lowering_plan.h index fec46139..a1bbb87b 100644 --- a/runtimec/vmjit/lowering_plan.h +++ b/runtimec/binrwir_compiler/jit/lowering_plan.h @@ -1,15 +1,15 @@ -#ifndef RUNTIMEC_VMJIT_LOWERING_PLAN_H -#define RUNTIMEC_VMJIT_LOWERING_PLAN_H +#ifndef RUNTIMEC_BINRWIR_JIT_LOWERING_PLAN_H +#define RUNTIMEC_BINRWIR_JIT_LOWERING_PLAN_H /* - * 组件:vmjit/lowering_plan + * 组件:binrwir_compiler/jit/lowering_plan * 作用:把已验证 Program 与顶层 Compiler 的 execution plan 绑定为目标相关 * lowering 输入,包括调用约定、物理寄存器、spill、常量物化、safepoint * 和 source logical program counter 映射。 - * 联系:vmjit compiler 构建,lower 消费;backend 只消费 emit request。 + * 联系:binrwir_jit compiler 构建,lower 消费;backend 只消费 emit request。 * 约束:不得重新优化 BinRWIR、改变 execution target 或建立执行期替代路径; * 无法精确表达 execution plan 时必须在机器码生成前返回 - * RUNTIMEC_STATUS_UNSUPPORTED 并填写 refusal。顶层 vmjit_compile 只把 + * RUNTIMEC_STATUS_UNSUPPORTED 并填写 refusal。顶层 binrwir_jit_compile 只把 * UNSUPPORTED 映射为成功的 NOT_COMPILABLE,其它错误原样停止。 */ @@ -20,32 +20,32 @@ #include "binrwir/execution_plan.h" #include "contract/allocator.h" #include "contract/status.h" -#include "vmjit/backend.h" -#include "vmjit/verifier.h" +#include "binrwir_compiler/jit/backend.h" +#include "binrwir_compiler/jit/verifier.h" #ifdef __cplusplus extern "C" { #endif -typedef struct vmjit_lowering_plan vmjit_lowering_plan_t; +typedef struct binrwir_jit_lowering_plan binrwir_jit_lowering_plan_t; -typedef struct vmjit_lowering_plan_options_t { +typedef struct binrwir_jit_lowering_plan_options_t { size_t structure_size; uint32_t code_generation_revision; bool observe_every_instruction; -} vmjit_lowering_plan_options_t; +} binrwir_jit_lowering_plan_options_t; -runtimec_status_t vmjit_lowering_plan_create( - const vmjit_verified_program_t *verified_program, +runtimec_status_t binrwir_jit_lowering_plan_create( + const binrwir_jit_verified_program_t *verified_program, const binrwir_execution_plan_t *execution_plan, - const vmjit_target_t *target, - const vmjit_lowering_plan_options_t *options, + const binrwir_jit_target_t *target, + const binrwir_jit_lowering_plan_options_t *options, const runtimec_allocator_t *allocator, - vmjit_lowering_plan_t **output_plan, - vmjit_refusal_t *refusal, + binrwir_jit_lowering_plan_t **output_plan, + binrwir_jit_refusal_t *refusal, runtimec_error_t *error); -runtimec_status_t vmjit_lowering_plan_destroy(vmjit_lowering_plan_t *plan); +runtimec_status_t binrwir_jit_lowering_plan_destroy(binrwir_jit_lowering_plan_t *plan); #ifdef __cplusplus } diff --git a/runtimec/binrwir_compiler/jit/verifier.c b/runtimec/binrwir_compiler/jit/verifier.c new file mode 100644 index 00000000..9d8b2b0d --- /dev/null +++ b/runtimec/binrwir_compiler/jit/verifier.c @@ -0,0 +1,26 @@ +/* binrwir_compiler/jit/verifier 的失败封闭骨架。 */ + +#include "binrwir_compiler/jit/verifier.h" + +runtimec_status_t binrwir_jit_verify_program( + const binrwir_program_t *program, + const binrwir_jit_target_t *target, + binrwir_jit_verified_program_t *output_verified_program, + binrwir_jit_refusal_t *refusal, + runtimec_error_t *error) { + (void)error; + if (output_verified_program != NULL) { + *output_verified_program = (binrwir_jit_verified_program_t){0}; + } + if (refusal != NULL) { + *refusal = (binrwir_jit_refusal_t){ + .reason = BINRWIR_JIT_REFUSAL_INVALID_PROGRAM, + }; + } + if (program == NULL || target == NULL || output_verified_program == NULL || + refusal == NULL) { + return RUNTIMEC_STATUS_INVALID; + } + refusal->reason = BINRWIR_JIT_REFUSAL_NONE; + return RUNTIMEC_STATUS_NOT_IMPLEMENTED; +} diff --git a/runtimec/binrwir_compiler/jit/verifier.h b/runtimec/binrwir_compiler/jit/verifier.h new file mode 100644 index 00000000..64428528 --- /dev/null +++ b/runtimec/binrwir_compiler/jit/verifier.h @@ -0,0 +1,56 @@ +#ifndef RUNTIMEC_BINRWIR_JIT_VERIFIER_H +#define RUNTIMEC_BINRWIR_JIT_VERIFIER_H + +/* + * 组件:binrwir_compiler/jit/verifier + * 作用:binrwir_jit eligibility 的 fail-closed 判定:先按中立 BinRWIR 合同验证 + * Program,再判定 operation/backend 支持、先定义后使用、控制流 guard、 + * 寄存器压力、binary interface 限制、side effect、call、builtin、 + * handoff、observable 边界与 source program counter map 可构建。 + * 联系:binrwir_compiler/jit/compiler 在 plan 前调用;拒绝结果以结构化 refusal 返回, + * compiler 据此产生 NOT_COMPILABLE。 + * 约束:未知架构或不支持的 operation 返回 RUNTIMEC_STATUS_UNSUPPORTED 并 + * 填写 refusal;非法 BinRWIR 返回 INVALID。顶层 binrwir_jit_compile 只把 + * UNSUPPORTED 映射为成功的 NOT_COMPILABLE;其它错误不得转成拒绝。 + */ + +#include + +#include "contract/status.h" +#include "binrwir/program.h" +#include "binrwir_compiler/jit/backend.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum binrwir_jit_refusal_reason_t { + BINRWIR_JIT_REFUSAL_NONE = 0, + BINRWIR_JIT_REFUSAL_DISABLED = 1, + BINRWIR_JIT_REFUSAL_UNSUPPORTED_TARGET = 2, + BINRWIR_JIT_REFUSAL_UNSUPPORTED_PROGRAM = 3, + BINRWIR_JIT_REFUSAL_INVALID_PROGRAM = 4, + BINRWIR_JIT_REFUSAL_RESOURCE_LIMIT = 5 +} binrwir_jit_refusal_reason_t; +typedef struct binrwir_jit_refusal_t { + binrwir_jit_refusal_reason_t reason; + uint32_t logical_program_counter; + uint32_t detail_code; +} binrwir_jit_refusal_t; + +typedef struct binrwir_jit_verified_program_t { + const binrwir_program_t *program; +} binrwir_jit_verified_program_t; + +runtimec_status_t binrwir_jit_verify_program( + const binrwir_program_t *program, + const binrwir_jit_target_t *target, + binrwir_jit_verified_program_t *output_verified_program, + binrwir_jit_refusal_t *refusal, + runtimec_error_t *error); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/runtimec/compiler/optimization.c b/runtimec/binrwir_compiler/optimization.c similarity index 94% rename from runtimec/compiler/optimization.c rename to runtimec/binrwir_compiler/optimization.c index 486e53f8..4e375d58 100644 --- a/runtimec/compiler/optimization.c +++ b/runtimec/binrwir_compiler/optimization.c @@ -1,6 +1,6 @@ /* BinRWIR optimization 的失败封闭骨架。 */ -#include "compiler/optimization.h" +#include "binrwir_compiler/optimization.h" #include "binrwir/execution_plan_internal.h" diff --git a/runtimec/compiler/optimization.h b/runtimec/binrwir_compiler/optimization.h similarity index 82% rename from runtimec/compiler/optimization.h rename to runtimec/binrwir_compiler/optimization.h index 594467bc..571cb105 100644 --- a/runtimec/compiler/optimization.h +++ b/runtimec/binrwir_compiler/optimization.h @@ -1,11 +1,11 @@ -#ifndef RUNTIMEC_COMPILER_OPTIMIZATION_H -#define RUNTIMEC_COMPILER_OPTIMIZATION_H +#ifndef RUNTIMEC_BINRWIR_COMPILER_OPTIMIZATION_H +#define RUNTIMEC_BINRWIR_COMPILER_OPTIMIZATION_H /* * 组件:BinRWIR Compiler optimization * 作用:从 canonical BinRWIR Program 生成只读 execution plan,统一承载 * 指令编码、类型固化、KV 寻址、指令融合、虚拟寄存器与控制流优化。 - * 联系:仅由 compiler/compiler.c 调用;vmjit 与 vmbin 只消费完成的 plan。 + * 联系:仅由 binrwir_compiler/compiler.c 调用;binrwir_jit 与 vmbin 只消费完成的 plan。 * 约束:不得改变 Program 语义、Read/Write authority、alias 顺序或 source * logical program counter 观察边界,不得选择或执行目标。 */ diff --git a/runtimec/contract/allocator.c b/runtimec/contract/allocator.c index c50fcaf7..a8b94312 100644 --- a/runtimec/contract/allocator.c +++ b/runtimec/contract/allocator.c @@ -1,7 +1,7 @@ /* * 组件:contract/allocator 的实现 * 作用:对显式分配器做参数校验后转发;不缓存、不统计、不分配自身状态。 - * 联系:host/vmbin/vmkv/vmjit/engine 的冷路径分配经这里;测试可注入 + * 联系:host/vmbin/vmkv/BinRWIR Compiler/engine 的冷路径分配经这里;测试可注入 * 计数或失败分配器,验证内存耗尽与失败封闭行为。 */ diff --git a/runtimec/contract/allocator.h b/runtimec/contract/allocator.h index 834711b6..2ee68e39 100644 --- a/runtimec/contract/allocator.h +++ b/runtimec/contract/allocator.h @@ -5,7 +5,7 @@ * 组件:contract/allocator * 作用:所有冷路径动态内存的显式来源。指令执行热路径不得动态分配; * 分配器不得藏进全局状态或线程局部存储。 - * 联系:contract 层只依赖自身;host、vmbin、vmkv、vmjit、engine 的 arena、 + * 联系:contract 层只依赖自身;host、vmbin、vmkv、BinRWIR Compiler、engine 的 arena、 * Program 存储、code memory 之外的冷分配都经本接口,便于测试注入、 * 内存耗尽分类与 session 级生命周期。 * 约束:分配/释放必须成对且 size/alignment 一致;alignment 为 2 的幂。 diff --git a/runtimec/contract/checkpoint.h b/runtimec/contract/checkpoint.h index c6905b2f..c78c835b 100644 --- a/runtimec/contract/checkpoint.h +++ b/runtimec/contract/checkpoint.h @@ -10,7 +10,7 @@ * 机器码地址。 * 联系:contract 只依赖自身;engine/route 在每条成功指令后组织 * checkpoint,经 host port 的 checkpoint 函数提交;host 适配层负责 - * 把它映射到 kvspace 的程序计数器、状态和错误槽。vmbin/vmjit + * 把它映射到 kvspace 的程序计数器、状态和错误槽。vmbin/BinRWIR JIT * 不直接提交,只把结构化 outcome 交给 route。 * 约束:所有字符串字段都是 borrowed view;序列号由调用方单调递增。 */ diff --git a/runtimec/contract/snapshot.h b/runtimec/contract/snapshot.h index 329ba9b8..7e74f228 100644 --- a/runtimec/contract/snapshot.h +++ b/runtimec/contract/snapshot.h @@ -8,7 +8,7 @@ * 明文是唯一持久语义事实源;snapshot 只用于判断派生状态是否仍对应 * 当前事实,不能替代或修改事实源。 * 联系:contract 层只依赖自身;host 提供原始事实,engine 在编译/执行前 - * 取快照,vmkv/vmbin/vmjit 只消费快照与 generation,不自己读 + * 取快照,vmkv/vmbin/BinRWIR Compiler 只消费快照与 generation,不自己读 * kvspace;engine 用本结构构造 compilation repository key。 * 约束:snapshot 不携带进程地址或 kvspace 内部句柄。 */ @@ -36,7 +36,7 @@ typedef struct runtimec_version { } runtimec_version_t; /* 权威 source 的世代:store 实例 + generation + schema/指令集版本。 - * 任一变化都必须让派生 Program、view、vmjit plan 与机器码失效。 */ + * 任一变化都必须让派生 Program、view、JIT plan 与机器码失效。 */ typedef struct runtimec_source_revision { uint64_t instance_identifier; uint64_t generation; diff --git a/runtimec/contract/status.c b/runtimec/contract/status.c index 1cae5121..8ac1a5a6 100644 --- a/runtimec/contract/status.c +++ b/runtimec/contract/status.c @@ -1,7 +1,7 @@ /* * 组件:contract/status 的实现 * 作用:只做枚举范围、失败分类与诊断名的纯函数判断;不读 kvspace、不分配。 - * 联系:被 host/vmbin/vmkv/vmjit/engine/interface 共同调用,是组件边界的 + * 联系:被 host/vmbin/vmkv/BinRWIR Compiler/engine/interface 共同调用,是组件边界的 * 唯一状态词汇表。 */ diff --git a/runtimec/contract/status.h b/runtimec/contract/status.h index edf2f06f..44c5a2a3 100644 --- a/runtimec/contract/status.h +++ b/runtimec/contract/status.h @@ -5,7 +5,7 @@ * 组件:contract/status * 作用:声明跨组件统一的一次调用结果辅助函数。状态枚举定义在唯一公共头 * kvlang/runtimec.h;SUCCESS 只能表示请求真实完成。 - * 联系:host、vmbin、vmkv、vmjit 与 engine 共用同一状态词汇。 + * 联系:host、vmbin、vmkv、BinRWIR Compiler 与 engine 共用同一状态词汇。 * 它不是三类状态中的另外两类: * - execution exit(binrwir/execution_exit.h); * - durable status(host/engine 通过 checkpoint 提交的 vthread 状态)。 diff --git a/runtimec/contract/view.c b/runtimec/contract/view.c index aad7b4a9..afba9e0c 100644 --- a/runtimec/contract/view.c +++ b/runtimec/contract/view.c @@ -1,7 +1,7 @@ /* * 组件:contract/view 的实现 * 作用:视图/缓冲的零分配构造与形状校验。 - * 联系:被 host 与 vmbin/vmkv/vmjit 的公共契约共同使用;本文件不 + * 联系:被 host 与 vmbin/vmkv/BinRWIR Compiler 的公共契约共同使用;本文件不 * 依赖任何上层组件,也不触碰 kvspace。 */ diff --git a/runtimec/contract/view.h b/runtimec/contract/view.h index 0e7a421f..8afc985e 100644 --- a/runtimec/contract/view.h +++ b/runtimec/contract/view.h @@ -6,7 +6,7 @@ * 作用:跨组件只读视图与可变字节缓冲的普通数据定义。视图只借用调用方 * 内存,不拥有、不释放;缓冲的 data/capacity 也由调用方管理, * 任何函数都不得通过视图隐式分配。 - * 联系:contract 层只依赖自身;host port 的入参与 vmbin/vmkv/vmjit 的 + * 联系:contract 层只依赖自身;host port 的入参与 vmbin/vmkv/BinRWIR Compiler 的 * 字符串/路径/字节输入都使用这些视图,避免在执行组件边界传递 owning * std::string 或 kvspace 类型。 * 约束:size 为 0 时 data 可以为 NULL;size 非 0 时 data 必须非 NULL。 diff --git a/runtimec/documentation/architecture/README.md b/runtimec/documentation/architecture/README.md index c4079c9f..de71c720 100644 --- a/runtimec/documentation/architecture/README.md +++ b/runtimec/documentation/architecture/README.md @@ -1,7 +1,9 @@ # runtimec architecture documents -本目录只描述 runtimec 的唯一 Compiler 主干。`runtimec/README.md` 是总纲,本目录把组件 -所有权、编译生命周期、执行顺序和 Read/Write 别名展开为可审查文档。 +本目录只描述 runtimec 的唯一 BinRWIR Compiler 主干。`runtimec/README.md` 是总纲, +本目录把组件所有权、编译生命周期、执行顺序和 Read/Write 别名展开为可审查文档。 + +JIT 仅是 `binrwir_compiler/jit/` 的内部机器码实现,不是独立 VM 或并列顶层组件。 - `runtimec-architecture.md`:组件所有权、compilation 生命周期、状态与依赖规则。 - `capability-map.md`:每项 capability 的唯一所有者与禁止职责。 diff --git a/runtimec/documentation/architecture/capability-map.md b/runtimec/documentation/architecture/capability-map.md index fd2fdc0d..633249cd 100644 --- a/runtimec/documentation/architecture/capability-map.md +++ b/runtimec/documentation/architecture/capability-map.md @@ -14,29 +14,29 @@ | Canonical BinRWIR Program | `binrwir/program.*` | 中立、不可变,同时供 Compiler 与两个执行器读取 | | Instruction and Read/Write references | `binrwir/instruction.*`, `binrwir/reference.*` | 完整分区,不截断参数 | | Signature and alias policy | `binrwir/signature.*` | Signature 声明权限;Binding 证明 Cell identity | -| Shared execution frame and exit | `binrwir/execution_frame.*`, `binrwir/execution_exit.h` | vmbin 与 vmjit 使用同一结构合同 | +| Shared execution frame and exit | `binrwir/execution_frame.*`, `binrwir/execution_exit.h` | vmbin 与内部 JIT executor 使用同一结构合同 | | Execution plan representation | `binrwir/execution_plan.*` | canonical Program 的可删除派生物 | -| Plan generation and target decision | `compiler/` | 编译阶段一次决定 VMJIT 或 VMBIN | -| Unified compilation | `compiler/` | 同时持有 Program、plan、target 与可选机器码 | +| Plan generation and target decision | `binrwir_compiler/` | 编译阶段一次决定 JIT 或 VMBIN | +| Unified compilation | `binrwir_compiler/` | 同时持有 Program、plan、target 与可选机器码 | | Compilation cache and leases | `engine/compilation_repository.h` | repository 只缓存已完成 compilation | | Execution dispatch and commit ordering | `engine/route.c` | 执行前读取 target,只调用对应入口 | | Complete baseline execution | `vmbin/` | 所有合法 canonical BinRWIR 都可由 VMBIN compilation 执行 | -| Machine-code eligibility | `vmjit/verifier.h` | 编译阶段产生 COMPILED、NOT_COMPILABLE 或 ERROR 判定 | -| Target-neutral lowering | `vmjit/lower.h` | 只消费已验证 BinRWIR 与 execution plan | -| x86_64 and AArch64 generation | `vmjit/backend/` | 同一个 backend 合同的并列实现 | -| Machine-code execution | `vmjit_execute` | 只接受已生成 code;不能编译或改选目标 | +| Machine-code eligibility | `binrwir_compiler/jit/verifier.h` | 编译阶段产生 COMPILED、NOT_COMPILABLE 或 ERROR 判定 | +| Target-neutral lowering | `binrwir_compiler/jit/lower.h` | 只消费已验证 BinRWIR 与 execution plan | +| x86_64 and AArch64 generation | `binrwir_compiler/jit/backend/` | 同一个 backend 合同的并列实现 | +| Machine-code execution | `binrwir_jit_execute` | 只接受已生成 code;不能编译或改选目标 | | kvspace access and checkpoint storage | `host/` | 只通过窄主机服务合同访问 | | Exported symbol set | `interface/exports.txt` | 每个平台必须精确匹配 | ## Rejected ownership -- BinRWIR 不属于 vmbin、vmjit 或 vmkv。 +- BinRWIR 不属于 vmbin、内部 JIT 或 vmkv。 - vmkv 不拥有优化、execution plan、target decision 或 execution。 - Compiler 不读取 RWIR,不访问 kvspace,不执行 Program。 - repository 不编译、不调用执行器、不改变 target。 -- route 不做 vmjit eligibility,不实现 operation 语义。 -- vmjit 不拥有语言语义,不依赖 vmbin,不在执行时改变目标。 -- vmbin 不拥有 canonical BinRWIR,也不选择 vmjit。 +- route 不做 JIT eligibility,不实现 operation 语义。 +- JIT 只属于 `binrwir_compiler/` 内部,不拥有语言语义,不依赖 vmbin,不在执行时改变目标。 +- vmbin 不拥有 canonical BinRWIR,也不选择 JIT。 - host 不检查 BinRWIR instruction。 - 公共头不暴露内部 runtimec 结构。 - 任何组件都不能创建第三执行器或第二公开执行入口。 diff --git a/runtimec/documentation/architecture/runtimec-architecture.md b/runtimec/documentation/architecture/runtimec-architecture.md index dfccc813..e5d746a5 100644 --- a/runtimec/documentation/architecture/runtimec-architecture.md +++ b/runtimec/documentation/architecture/runtimec-architecture.md @@ -1,4 +1,4 @@ -# runtimec Compiler Architecture +# runtimec BinRWIR Compiler Architecture runtimec 只允许一条从 RWIR specification 到 execution 的主干。任何组件都不能建立旁路、 第二次目标判定或第三执行器。 @@ -8,11 +8,11 @@ runtimec 只允许一条从 RWIR specification 到 execution 的主干。任何 ```text myrwircaps + RWIR specification -> vmkv validates RWIR and emits equivalent canonical BinRWIR - -> BinRWIR Compiler builds execution plan - -> compile-time target decision: VMJIT or VMBIN + -> binrwir_compiler builds execution plan and attempts internal JIT compilation + -> compile-time target decision: JIT code or VMBIN plan -> compilation repository caches the complete compilation -> engine route reads the decided target before execution - -> vmjit_execute or vmbin_execute + -> binrwir_jit_execute or vmbin_execute -> route commits complete effects and checkpoint ``` @@ -25,12 +25,12 @@ Compiler 输出是可执行 compilation,route 只消费已完成的 compilatio |---|---|---| | `specification/` | 五语言行为决策、RWIR operation facts、myrwircap 到 canonical BinRWIR 的唯一映射 | 执行策略、缓存或机器码 | | `vmkv/` | RWIR source 读取、验证、稳定 operation identifier 解析、等价 BinRWIR 生成 | 优化、execution plan、执行目标或机器码 | -| `binrwir/` | canonical Program、instruction、reference、signature、execution frame、execution exit、execution plan 合同 | vmkv、vmbin 或 vmjit 策略 | -| `compiler/` | execution plan 生成、vmjit compilation 请求、统一 compilation 与目标判定 | RWIR 解析、执行或 checkpoint 提交 | +| `binrwir/` | canonical Program、instruction、reference、signature、execution frame、execution exit、execution plan 合同 | vmkv、vmbin 或 JIT 策略 | +| `binrwir_compiler/` | execution plan 生成、内部 JIT compilation 请求、统一 compilation 与目标判定 | RWIR 解析、执行或 checkpoint 提交 | +| `binrwir_compiler/jit/` | eligibility、lowering、backend、机器码生命周期与已生成机器码执行 | 独立 VM 身份、RWIR、vmbin 依赖、语言语义或执行期目标选择 | | `engine/compilation_repository` | compilation 所有权、索引、租约与失效 | 编译、执行或目标改选 | | `engine/route` | repository 查询、未命中编译、执行前目标读取、唯一执行调度、effect 与 checkpoint 提交 | operation 语义或编译 eligibility | -| `vmbin/` | 全部合法 canonical BinRWIR 的基线执行 | BinRWIR 所有权、vmjit 选择或持久事实 | -| `vmjit/` | eligibility、lowering、backend、机器码生命周期、已生成机器码执行 | RWIR、vmbin 依赖、语言语义或执行期目标选择 | +| `vmbin/` | 全部合法 canonical BinRWIR 的基线执行 | BinRWIR 所有权、JIT 选择或持久事实 | | `host/` | kvspace 与外部能力适配 | BinRWIR 检查或执行策略 | | `interface/` | 公共请求翻译与精确导出 | 内部结构、语言语义或执行策略 | @@ -66,22 +66,22 @@ BinRWIR Compiler 的唯一内容输入是 canonical `binrwir_program_t`。它按 1. 验证 Program、manifest version 和 binary interface generation。 2. 构建 `binrwir_execution_plan_t`。 -3. 若允许 VMJIT,调用 vmjit 的 verifier、lowering 与 backend 编译合同。 +3. 若允许 JIT,调用内部 `jit/` 的 verifier、lowering 与 backend 编译合同。 4. 形成 `binrwir_compilation_t`,其中 execution target 已不可变。 execution plan 可包含六类派生优化:指令编码、类型固化、KV 寻址、指令融合、虚拟 寄存器和控制流信息。所有优化都必须保留 canonical Program 语义、Read/Write authority、 别名可见性和 source logical program counter 观察边界。 -vmjit 编译判定严格如下;顶层 compilation 对象只在前两种成功方向产生: +内部 JIT 编译判定严格如下;顶层 compilation 对象只在前两种成功方向产生: -| vmjit compilation outcome | `runtimec_status_t` | Execution target | Required content | +| JIT compilation outcome | `runtimec_status_t` | Execution target | Required content | |---|---|---|---| -| `COMPILED` | `RUNTIMEC_STATUS_SUCCESS` | `VMJIT` | Program、plan、非空机器码 | +| `COMPILED` | `RUNTIMEC_STATUS_SUCCESS` | `JIT` | Program、plan、非空机器码 | | `NOT_COMPILABLE` | `RUNTIMEC_STATUS_SUCCESS` | `VMBIN` | Program、plan、空机器码 | | `ERROR` | 明确错误 | 无 | 不产生可执行 compilation | -`NOT_COMPILABLE` 表示 vmjit eligibility 已成功判定为不适用。它是建立 VMBIN compilation +`NOT_COMPILABLE` 表示 JIT eligibility 已成功判定为不适用。它是建立 VMBIN compilation 的正常编译结果。非法 BinRWIR、映射错误、内存不足与内部错误进入 `ERROR`,必须原样 停止,不能变成任何可执行 compilation。 @@ -91,13 +91,13 @@ repository 只缓存完整 compilation。缓存键绑定 authoritative snapshot version、canonical encoding revision、BinRWIR binary interface generation 与 compiler revision;租约保证 Program、plan 和可选机器码在执行期间一起存活。失效只阻止新租约, 不释放仍被租约持有的对象。 -vmjit 不拥有独立 compilation cache 或 `get_or_compile` 入口;机器码只作为完整 -compilation 的一部分进入 repository。 +内部 JIT 不拥有独立 compilation cache 或独立编译入口;机器码只作为完整 compilation +的一部分进入 repository。 route 在执行前调用 `binrwir_compilation_get_view`,读取 Compiler 已决定的 `binrwir_execution_target_t`: -- `VMJIT`:只调用 `vmjit_execute`; +- `JIT`:只调用 `binrwir_jit_execute`; - `VMBIN`:只调用 `vmbin_execute`; - 其它值:立即报告非法 compilation。 @@ -123,17 +123,18 @@ Signature 的显式 alias policy 绑定同一个 canonical Cell。写入后, ```text interface -> public header + contract + engine -engine/route -> host + vmkv + compiler + binrwir + vmjit + vmbin -engine/compilation_repository -> compiler + contract -compiler -> contract + binrwir + vmjit compile contracts +engine/route -> host + vmkv + binrwir_compiler + binrwir + binrwir_compiler/jit executor + vmbin +engine/compilation_repository -> binrwir_compiler + contract +binrwir_compiler -> contract + binrwir + internal jit vmkv -> contract + binrwir build contracts + generated specification facts vmbin -> contract + binrwir execution contracts -vmjit -> contract + binrwir execution contracts +binrwir_compiler/jit -> contract + binrwir execution contracts host -> contract + external kvspace interface ``` -`binrwir/` 不依赖任一执行器。vmkv 不依赖 Compiler 或执行器。vmbin 与 vmjit 彼此不 -依赖。除了 route,engine 文件不能同时看见两个执行器。 +`binrwir/` 不依赖任一执行器。vmkv 不依赖 BinRWIR Compiler 或执行器。vmbin 不依赖 +`binrwir_compiler/jit/`;内部 JIT 也不依赖 vmbin。除了 route,engine 文件不能同时 +看见两个确定执行入口。 ## Acceptance @@ -143,6 +144,6 @@ host -> contract + external kvspace interface - repository 缓存 compilation,而不是分散缓存 Program、plan 与 code。 - route 在执行前读取目标,并只调用一个执行入口。 - `NOT_COMPILABLE` 返回 success 并选择 VMBIN;`ERROR` 立即停止。 -- BinRWIR 保持顶层中立,vmjit 不依赖 vmbin。 +- BinRWIR 保持顶层中立,内部 JIT 不依赖 vmbin。 - 未实现能力明确返回 `RUNTIMEC_STATUS_NOT_IMPLEMENTED`,输出先清空。 - 不存在第三执行器、旧入口、兼容别名或隐藏执行路径。 diff --git a/runtimec/documentation/architecture/runtimec-dependencies.mmd b/runtimec/documentation/architecture/runtimec-dependencies.mmd index 598a5716..b9aae8ce 100644 --- a/runtimec/documentation/architecture/runtimec-dependencies.mmd +++ b/runtimec/documentation/architecture/runtimec-dependencies.mmd @@ -7,10 +7,18 @@ flowchart LR KVSPACE["external kvspace interface"] VMKV["vmkv"] BINRWIR["top-level binrwir contracts"] - COMPILER["top-level BinRWIR Compiler"] VMBIN["vmbin"] - VMJIT["vmjit"] - BACKENDS["x86_64 and AArch64 backends"] + + subgraph BINRWIR_COMPILER["binrwir_compiler"] + COMPILER["compiler and optimization"] + subgraph JIT["internal jit"] + JIT_COMPILER["verifier, lowering, and compiler"] + BACKENDS["x86_64 and AArch64 backends"] + JIT_EXECUTOR["machine-code executor"] + JIT_COMPILER --> BACKENDS + end + COMPILER --> JIT_COMPILER + end INTERFACE --> ROUTE ROUTE --> HOST @@ -18,26 +26,25 @@ flowchart LR ROUTE --> VMKV ROUTE --> COMPILER ROUTE --> BINRWIR - ROUTE --> VMJIT + ROUTE --> JIT_EXECUTOR ROUTE --> VMBIN HOST --> KVSPACE VMKV --> SPECIFICATION VMKV --> BINRWIR COMPILER --> BINRWIR - COMPILER --> VMJIT REPOSITORY --> COMPILER VMBIN --> BINRWIR - VMJIT --> BINRWIR - BACKENDS --> VMJIT + JIT_COMPILER --> BINRWIR + JIT_EXECUTOR --> BINRWIR BINRWIR -. "forbidden ownership dependency" .-> VMBIN - BINRWIR -. "forbidden ownership dependency" .-> VMJIT + BINRWIR -. "forbidden ownership dependency" .-> JIT VMKV -. "forbidden execution dependency" .-> VMBIN - VMKV -. "forbidden execution dependency" .-> VMJIT - VMBIN -. "forbidden peer dependency" .-> VMJIT - VMJIT -. "forbidden peer dependency" .-> VMBIN + VMKV -. "forbidden execution dependency" .-> JIT + VMBIN -. "forbidden peer dependency" .-> JIT + JIT -. "forbidden peer dependency" .-> VMBIN REPOSITORY -. "forbidden execution dependency" .-> VMBIN - REPOSITORY -. "forbidden execution dependency" .-> VMJIT + REPOSITORY -. "forbidden execution dependency" .-> JIT_EXECUTOR classDef specification fill:#fff3cd,stroke:#9a6700,color:#3d2e00 classDef neutral fill:#ede9fe,stroke:#7c3aed,color:#2e1065 @@ -45,5 +52,5 @@ flowchart LR classDef executor fill:#ecfdf5,stroke:#059669,color:#052e16 class SPECIFICATION specification class BINRWIR neutral - class COMPILER,REPOSITORY compiler - class VMBIN,VMJIT,BACKENDS executor + class COMPILER,REPOSITORY,JIT_COMPILER,BACKENDS compiler + class VMBIN,JIT_EXECUTOR executor diff --git a/runtimec/documentation/architecture/runtimec-dependencies.png b/runtimec/documentation/architecture/runtimec-dependencies.png index 68fcace8c3ffed18f9208a09fe271770fdcab641..0366459ab8827997b83cc9c3fbc9f601e30cbc84 100644 GIT binary patch literal 148215 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
C^ht|KR%~RzQUF{B*5y;Js z0y0%$HSAIDBO1ejmMT&N%3gl&<^uvdf4?u3TRI7%TnpLKz9%YxAf8EiE6M=uEUem#AG5;KgfS`Iu zMCS9E#u+m;vTNm7y`wxzyP$F?o&jxxSzgyDh+O8n#!Jr_t5sEMBA41j{dB(!X8mxO$E4eJ3 zKdRZPc==&tO?IP3OIL1oE68Cx&8i)ib%o>ziD2AvG#A&#G5xd40{35qlimj4oy!~{ zPyy(WsJ8fsai>;v6-!k^UOsUy6PETx0IaV!Ja z=o`P=3ZjVe^8^HKAHw6|WX0~7&0@#Z;a~cIU{YjvcD1!VZtd>g%eGfDtIBrwRQKnd zbXGdvH%JrO8`r*0O|2t@Rb2EVU7$s|GuusbVP8Rw%HNBKPPr_SVK!Q<@ld5ntrSL} zi{6{^`ZhW|%u1M7E%YA=WjFwE{RG3m3=9MhFc>+N6q5czbrLUU#3T#g&&ubhO)r)T zw02FJtCccK*U8gNkCmEN4-CEK-?0bjgS`FSrM(x<&Z+p+v%Q9;d(4LD`fvjt!*4$s z16U+Ir?C(Vz8o|LOwoshDXEL8S1-hUB6VGTtEX3xvlE><#A&~OpZ)KAX~8_SKy`R8)-^y zI4rTKC;xWl{J}o3R}+Zq3>(8fb2> zfBg9~aP~M=`pT=f7%FS(2Ow8ys^!x;PY=#w`1v)}-Aew4k$NWJv^G9wRbIEWh4FvD zz<|5Qt@!k51AUqtuUv6GdmzK!+JxXnc1}K{Y6P{i+>amqQ2++6^2%v+_n*pJ zn;2iW4Wi^0M!LeB@v9tPAJg<3n~R**X_tScD8zP<3u`z!4vKFzG&JNbu8)=msA0?Q z2h8D^NLrd;-!32uYWHVvxEy0z@^*GtoU*8`zrWS5j)Sf4`yTM;sZNxloX2Nv_=;`; z$Vkg;m7rkuK4RmDIRw-^iD+ib_v~RI80zP&;{Ht6CyB%mqhE`%O5A9<_~Wvt2lxW$ zx+_%OKmRFuAmr1>?9!>4%_Q@GRxtP6ZFNRjXS}~u84Rn01PdJuwg;w@1uR8W@0>al@hkKnPuzIj#o-39=VO73>W@^$Gr?Jcux;fS#uElE>5^Qx|^ zH~YwOsYlaseNrd#O4_fUQm28%^wrJwAWWP{*_^^G#Y3fd~G2($Qp`MCR zLCs>*+eL$G1w$%-jhiQOK3_y72_G`f59S@>1}t{g--Qdn?6fS+Q0rtOL#OUJvkidA zdg%tPPVySv^-`bk!5l0HBR@ZeGpm^u6v@G%LDBu`JiFyI4QYA#vKrj6IiBzEW4CqH z+4n%%*3z%t-_KWnKA|Auq5(AMG>=0*bDGZh^0HB&L}`Zfbu6JOA1sSa+IP!^7k95Q zuxOW+Hn`VeckOMTk2s)KSIa%P=RqxO4Q?l+g261V=P_2t=-8!kD=73W_5!Uf zJNiR(5Yc>#xUj=Cj~eAc3`h&WGVmjD5!@d^>L zx%pwMn#RQa%jBME(Qb{dtEEH1k#Elh++^c)Ts3rAt877H78yQt%!h*|rhRv2vu8$( z=IPPlx+q>g2!I}gs#?nE>A5pNjae<$?5%>iRUV+?^IT{IerVpE*3fm4Tl_yqJQApCvHmSA`|X(~MQ<3o2xkx^ZH zwwkHg2aoR)gmmr=2iVPDQq~{F&}EF)E7P@(751k@X~?Rj(HdBe)d=&4+VA4f~f3Lda zB1OQV@IPvC~j!hbP+zKwpKAG zE-iELJUk*s#@YFuj_b0T-HcyM8(uv`<*+g9?g9<*M8b(R(Jem!0u2zS;Zajwdd!a1 zP_X_VmruIF@x3U~sSr_5`V`5as8~*Tj3`crN!WE;ty^>~4v*Be8u7dZFWvwQC3lQ5 zNl_Cnx1C$C8!^&&xju;-S?50b-N?HMbhoxRZl+XEtfXBtg-KhK#^fWOcscca*(i`E zpuN4}4;Ztfb?n-rKsCE_O5;gR$B$g*25}=h0pG5y9F4V4ocU-8L#h|eF59S59CPfbx9q?B>iM|ASA+v6cqVQgA zvK1bRV3^dIi)ozz-0v@w4JDyE4xR5%`LVdw2B;0bnNV0Zmma?s$)bI%RA658OmZ+B zUrkQUZ2z+p87O*aWnkt7{PWX0mSC%m%Vq6httEc*Won2}yDK za`I}Se!1qCiF@C_e^JkAtb8!!0_KJ+q@~3v0;q$s%F5BV2<@iatkZWs|M>CvAmmmm zNVrWMD|c+Itb&COSE=mUAIs&LVlb?jr4$^<4*$N3{#PeA5e`~>Ku?nelJSiv?t;gT zZ6E14&SzQ(9@}N%#)t-RM5~U~QUUffqybqW;^IL!Zm1ME3*EWXV+Q-YqX=Zp;!##; z6}f`>SXoNulwOh5gxT^5iC9c>`xY5MI^C6o%|F`emNXaE($&o$a7E}!%j+^OCi05O zh?7KRBk>al<%8Dw={IP9{%I~EU=Kb$12AnYNwGBQ# zXW=3j2p$nagZ?1(xN?J*vRT_5LAiVP?# zvplq3GK&%Tob!o4z|SwHQux57Te!SKd<)>M$FP;b)BSlf%9B0;!;>e!WMyPP8;27? z8hdU3x;XeGP}q@+^Dc~2|4>d%Rq`oAYCd5)tf<)T_^XWY;0u* zWtf&9xdPfWmHcmd?%0o4*q)`9L65?69UI=6+-GOEsdK?6Li!ybyZ}UEiq8?69?*fZ z`!qj5FZ~heS-M9+-MM-5W-E=8kWG&e&DyEyPkwl^Hp7aFi{;?mi%Jrn`uh6OaQGCd z@C19HP9N8fvv-^cugqbs<1~B!H-l`6mK@2;syR$^#(+U3qJ~Fv{M|iPmkkuX&t*nO_{&#!dbG{at;0eYc>j8qxVzm)FCX9R_kE^z1p``@+I< zbmd>YcJP|M-4L|V@MzyH)q3i(A$nA;$Znnkl++j`zH5Ldh#zi9bxeOBdNp8IcVHIG zWjXp3uWp_S>&y>$8P<%tkzKZ_+-ByfwV0UL+ob52m_?<{{x{xn>jhfzTFr$c7OJgH z*ZRop)KUoH0>MOT+R03FDE76wmV`a9sP>i(l)SGW?9tu#!Xd;TDtNXMwFFb~s$IV> zAMwqAp~Jpg_+huGsI(4i3@B<^tcYz!eoDMzkJo!69tz)4QYytu9x9e4HJF7@>K9*W z%%XvE_fXbZQr8Ph;4=H+TW_Y)4G{gx-^S4DclMVv^kP5*;nmxT`g$=_d>6o0lI}lK zzTtTY!Rpbd0Xqg#OQYc4oeX9WZI2_JPW zet8Pi)`-BnQ-awP6ct19jm=un?v4;!``#QxWumf}CXwhnV}|4U1F=p3Q-Ri5)v|d} z!&XtMW0`_6(?w=jO`dARV73=sS*AVj%ft*Tn9#u~E!*1;uQMh~9+b=E(}Hd%cSqod z4;%h|ewDly!>{o^31E9T`bEU}bKWkNpP%1&YoW9AZ%<5me&ATOll9%e(-CX4c@neV zKAsIrH@&4HCi~(=p%zqF!<(pA&E`si&d!v7mdp<19o#B4EtI(}}=kYG!;+*HkDi?Z0Yx+aHd)0g{AD zOR#{0YzXDRye+4ySNwa+@}ZT^FpnrZL}xrNFCht~A;=8!_|bvX<2t&!cywKt)7}FG zio0jtjv_|a)wFA8NDs~;W!jf6x107d=0f%kGP*RddoiLdf^G)Mig~U3Gb41?iP(OjKen$0dWdAxlfTHrJ z&@FJv5GdQtzN`0d>ygb>nqHkU3(fjY-l-Z5LZg+Tg7q+>{k7_KALGtAGRI7@{7&PD zF{^6J?ip4B^hj|FkH^9G`^?No)*-aQ?YXIk*u5!2^mt|8nuCDTCFZem>+)sBiU+qquZZ*LAhxqGRC&p?|DaHUM_=?3bGlb$N90FIFJ= z1ON>PUfCJ|i5y$*vHyDpCK*Iont|-*W@YWlBRq+UNUFc10?3yit!EniCcV8OIpNZ} zx=B)PDk*2oYU|7_%_tg;i$SwZN>-y)Er`|~#mA^>`8Gc=r?CP@Yd^WwEjpDE^88Q6 zK5Xmm<^{ZI|0gj%EW{q4Sgn%VHGxsD0IWbiuzWJCHgAqv@Wc$QlnPRl#siL=Js0#bpeR@6=geMQ6RGGy0^xHKOtlq=YicB67Lq;l1-(Z0!=8r zI!~;R>+b4u)q3sWuAzwu6@am>`r$~iNs^qA%=>2jZ2pL2p z+ajFE<+Lm9(r{zebu?whos?353JG}}?sf{=R1cVV#`4=65BH|MJO`RdmOwjkauG`M zJ#N*ute#9N+}?JOdiLzy`qxja?G)^<#U|g5d12;bOuT-7C)9Tp6m(dcRxhx(24$^A z`9i6v1rQx%oMmKWysMfYK&u?uhC(*>_F@79iN}DFq{_g`nm_#|fVREA!wcNYTa^s? zAXjiE&i=AnOV+{4hYy$^KYnZjoR@>Ol>j>LK9iCnU#CLg2F&{pMei^%bqrR)%=db} zNEG)MB>|7oT^;Ma>h;=c#2d_yA3q*p?UlD2DIVnrp+NQh%Pyc zjWYoYg2#HYChq|}r$%&zenJC3J2o7D=eYSP#!A=z9M*$)U=E!Gi*nDOgetJ7N0I)~ zqxbCH)TFi0$44VYl632X;qbLsJ6m2)R~N#=y%v^qJ50FBVu{t5csG zFPi1iBld-^L@L*5J8)*JB_Iq^x_&1hN8(!!iP6yuplwR}2KdYLe{l%h7SwNew=_Nd zda86tH@+0MqJEfDP)m7@f+DNn29lhm+^FN0XlZRBm37S%CPv2g9JtqLiRm@7I>X4) zL^DL`F;FP#&YZh|eE06%XMtq1^07`3U&1d5g9~a8P`MPG#?L_0YP1eydOvH#j{1I9 zMp9fsW5vM+KGug5`0bwp@9cclYEg$BxSxm~Fk_+z^D%mpS-9y}Zri`4QU(k3tkJlo zr8nz9C!_#E1&=6AYgD6RNE^C8E8-9Y$fy3pI^feK017+{vpHt-I5)&t55KDG+x}P_ zf!|jw)ikb&eDlWj>$#4=Mv8aRfqFvdXLV`zq|zx0K*Q8XtO6SKQA9-`bLVBOFqWE{ znx1i*fN2;{)q3Rp&L)k}wQVAUi5@Ja^jxEtG$hNT2L+Mmb-j1)T?v0AZN>4W8xL1m zi5yUiJ$DB{WBIW3&9AThipxisEngV-a0{K6yHmtNxm+VkUaM6KK}QRRUmR6ctAO{@ z+KrlK%!g3(_l^eZB3$QjARiyI#^mfD^wzj+`D|@&20m6vH@un0Bq}<^on6aH4G zU?``tplK{CX9BQJt{3g0;o-Bd%B>RXNQr@ep-H`T0$ABx;J^x(xsqSaDhRxUHA`PV zZ2~F~KMe+x|Ep98Eh{$8;lYSkxj5(>TsA+1HN6&=BQy>mp;F%iZ@JWSsJZS1rEu!c zRB{8^nL0){eQ8mV_F(50^vbURt52T!Y5d{vov^hNO@L4HZ^N;gq*!>*eMSpBQNu4U z2;&0a4p(|C+wPbEJUdck)X^}IqajGDa}1z+x1dcNs88VoYOn{|6X_Wlg6%}e{8!%^ zzAz2nB6w2@{Jwf^Mm$#IOBv_#zkT~g@E~I)y9y*^-TtAwDo}JOvP!Gm3awlCTHFTM zeD)6yW2zE?$2UFyCzH_&Y3XmfognVCj*ie{8|BS(R^~Kv7sSSAJeLDBOGmd);q(ZkH zd;Y|(+1Hl8Y7==ZwNhzG$MeHGma>~puI|J}V8(bFv<839AI#Q_$ z&HSTCvLoil92~vXfU!$VE(U)5xOrU75|H~dThBNDnV=oARhY1=Ph68<=K0~mcS5?K z7m3YMDS#IFXO95!INMDyyK}Q+y9 zyMR2`-Nn=`Alnz&(C`#rNWQ|Bd3bmRp@Rk>z||@M080kVoe^M|vGfy%WtJg1NGQ2} zqfixqRBW^HLj&|)?v9n1&gp{smjbecUqDW}+kF8T%FwcobWR|#OIfdDp)(#$=XGQ| zOu{=}s8N@WuP3|swRgC;4$oj(M4^8b{ zl9<&)47wV+x)cj=wFwk<&7h%?|;`)mOun_KQBteHl_f_Ug-LD(i~pW$R}r zrr>&`DDN`(B_vTf z$4P%M``!gwtWL*An7b2Iuny1`H2)5As}F3yOux~;X@!>0=Jgu6p8K`UR{D@<%a&aL z>)c{~bu~9<7*N}t5xYoW9ej)O?2^P3*BEQ6d-igUQpj)gg zgCI@nG`@jIw64V%I|KB%nez3k`?(9mtxAXVsu~>wV>OOwEgUF4tgnPU%k!1Bx2f6c zj_iN(wqmJWL*zolK5?=3Mt0R_CP;eTz>tJz%-PWj{@uw;R4pZV%wgwmuZ%wbn7eM3g zB$@*-LH$}4Hu{B=o;wE~58x@FvSGkUYCsd$95*NAVCH z0s71mdoQh0NLh2RFL#DTsZ`$9);9N# z0;ZT^F;-^z3BvbY|8^~q%z3V##4hQ{whR2je;xlA|Nr#@*v#?&?Vf~sR*1J*fhYC= z0mCPz=Vy~8m;19+wtz2^dmNzK;NjunElM7X{igs#Y2{22PPMeO>?vb$S)QB++hAGY zk<{N0JO@xY=B`0%USX&`H7xIPU%?Ap_)AvP)%EptR%T`giS@kiC^a zAFXWb&_@L8dx%1`$qrbzA15oow_-%FMF(>6JS3`(d8K9pqZMFEsL$BE!aMW4&9cBV zgeA{dUb?Bs*F%4O<~@x2ja5fC|2060$nM^~dnNN1^uMl51e-mu=PV=$)AJ}(P$Tg; zAVU$JKkuG*u8DGY!97cYZ!c>M)DEq9yqHiKZu<9SfegnS z7!p#DF=^nDStU$RuTOCnlDV58Z}QbDA|j&YvNt6?4^Nq#mewfcAEF}`1ayTmmb24$ z{Pp)ygLz{wz-%hswY9Y+K|8u-0G*1BKrGhc z0O%7uFBW@J230vxzFjV$w6UG24&ao&ow1w@`+zBLN0=D`zeJhK)&hZvp`i^N-x(SJ z_WNFyY>X@?T@qmM2ZFJXO&rifR6`Gv`}F=qoHykf=-HEu z)wmR!|9F2*Q(12Hzql+BJ~?Dc_9IX`XOm@5RQ>;HJ4ICT|9U$`Fwf`s(9o-4@$oC= zAoM2wfS8kusJH#PrlFwNi30uxCxUwM6YcW;|8g6ch#t8=(dGZuJ}@b=cD0ad8JZLU z_G6zv_j>ZLO#-m$#h9TkdMo2AN&hQ>K&q=(r@hb|QgDRTnC7wnvI#jHKEZCmLtoEM z{6&T}IL`EAmP)y9-;{>v@V@C^#ln|;fpk3ZL?byE@wD{4MzFkP^~B%PDJBQx6w`Q+ zS@r=UI}1?H&tvT2Vr1Dk9Z0*L=m`S-{e4(3h<{v#13kJsdl&AZe9jgKIJKB0YFbMp#LrhyXbhQlCeBG zI!a2EcF7y1&`~RGP=0h81FlT1*zkQE+QMrXo*PZ%cR``rD$p*^2QDlt4CtsE?G9+@ zL3u?)YG42S{KV~Jv|2$YZqjW%FK;k0D_?T~uVLEUM%~(vL3!@{nq0Xc?|KqB!TG_0 z=7Y>R9QmjV$SN9-(ZNe~E8CL#Kxa*hFE$!m6Bb8FwAsaUlxirb4wSfVruqU1p4hMlgrA$v_*}7r|!Z;tv7~LY|(UeyH0*qji+X0+K(O zO)&)z7ui@?Si}OffIs!GoQ72jlY}rJiHEvAh&kM!3z2}maYXfJRm1S0(s2UR<0tsq zsua@6s+A9jR}w&1>?+WV2tfK>feN#Bu+c*2>u`H;YDy2FA@W?NMR_1Bq)10Rq{V(d zI&vQa2}t7Q1v`Xpfe_$@)hqp327bn{tB%XPY2wd;85B;J5EW(QcC^vrM4p!cEdEJg zx2Ysur(=%!$0YF7Xvxyz*H^zq-zy@&mt-oQZ-FtwD$?|*br_-mUCJ)cNOaVy&Ckur znFTQAdv;BHc=+|(R8-o@L-?(UkpX?n)R~kDc6OUWXKb#5UA2nm{QUeVc;Y)1NZy|D zKY!7N*zbU126fgMY%pou`LiveT}hG7h8ARYx)a(4^5$=e(XjUj?<{_xh%^>(^3Vf^Z$v85?wSb~v&8_8< zw=&*NuQ(S7_Wiz@szrQZbstsZt)DU$IM3&Q)-wH=vPuhe)+4=p@iN%yvJ14v+kg_s z)^b?Uf{hX~)ybqMnHG|eYiDntclj?+v4M(f~tvOmmD_IX+LeVRw=L$nXLxJvpL`^0sjBu;?y z3XCTp4BM_l`NX<_3V1@%9`S~>Z~~*@R$jgs#h+3FQ|i44HV;=$Sb2HHf3FMROFts{ zdy8t;r}1ObfX4I?aeg9z;BKf%-21zw!VN64@5nd?zK??`h^dkV+l;c9>H)R!0a$82 zIw6Cpjn)hc22uSgFVJy_ZY`lIP@~_ToX|X0DjFK-+HY|~!&E0Qa{)ESI$>y5OJM<7 zok5N&nKdAk(#3{_>8lJ;oWnz0^`XZhC9m(nW-+%Lr;={8qz;3X|U{_ub*}0qX zchlv-UZRKT$F%%V3XQtGqGbah``bC}n@ju|?EXgreA#0F;9+=8dw*1kENnPGgIaTv z>c|JkCCXlGb{nj6N|=0Y6wX0@Q>6Ej@juo$-`kK$30%##BP|XlV!7 zDrL!}n(JGu+`hup?MN4_+x?M@sr^W@f>ziSsSwX2hYz9TbCtdz{o>6u(-$-Ma?h#F zDXlXsUh?+6Ds~oBR>$fIMPIoLI|4p`hu_-Vj`3eZ_&rwJl$8H_rTj{lqY5Ey^8^X_ z3m{K1dZ4Kxn<&7&S#PsKrlAvt1v(EOzM=3NnEhLP2rm0b22*Qlhs5Yuf#MbnG_iNf z%b=BZS+~eg`ZewtYmdcZ^DyTKNq>?M6LZnIAj2LZeu5Ht4z&8ncSg+%{MxSZ;f}Vp zwq1?85-9S|l>;kui5y%+c(#7Ny?P=bWvCcWP=NNCiEpU@_2jH00o*`PoohH zNYZzFqO!NMvoJ|=Nq-3j!J9sL&7&ngoq_=(bF#a;?|$f~x$l{&zsuoTLC`<*Rmg z4;(eD7QLw-GLUuxI-xm(nmR1%qTP{?RUBP}Xy?AQ(B^Oh z8|RBYuK5?|asfeGz;ik4@rqww|3%U&H?8(&mUc3+k>7ymT?b@N0pLP=Tximr#41{c z!}az9RqUq4WX(u{X0fp!e#b1{3uSY@-wine>b%YwMMe;{HrH(g5b_dF`_mL?-lh^t8^s2b;h52@Ad1%DW zK%REYCmeq0gD>NM(?AS1dm=S~7x;**Yc?c5TXpj`mQPdcM(9RuJJwKD^}bxcgPpzw=sWpEpt6?T?MZmUdz;*>q$Dw@a<*z9z9{40oP4HjI3!+L7(oz)%>j(TE zcyLTVDzTavrRP>GHtrO1y$W7QJ_}r$D*s{)Y)7ScPu_X*&vXS)&%we3M%g3=2_fd z`~Q6}IJ2JQ@2vQ5@-|@R=H`A5i9G3=@ugM_b|Sl&4qm#)8#ncNLM!DxwaR3I`v;-1 z*QbBSXw7_S>XRg`73&?ejO@ybzeH*c1Ra9^pdSkk0)*Mk5eW%G3J~g(pN!y3g?Ncl zI4bF7Wd>A3PCHE>t!39&k6YC++TBxInIGNg z?ijnV7RrF*l~Tu*YRYG6Yd;LCP>#+&l9{01;u~|i2m4H#g@&=) z>m$z>u)nL1N-Z-=EPEAcsa&GC^5|4*bXLin+JC?7R%xtEv-0v3|03&-rpMTKIBIU~ z8E4&~(6@wp26h^^O7u-dj9iY<>X_VXz~$;6e2!0(T67%bsoCC$3Ey4oJ4A;p8hhNW z%f^1QbV@I=P}QTY)h{fu94&N?)xV(^X-u*rWB8)*CuT;Yt<64barNGwu5f)e%8jFF z!~&CDDFcBVJ|>z4{)?9ZwrF5uDl#!K83P@DXlL2{!ov0TlK}?c|F0??R(P#`)@05> z|NR2jbrcP+74`R%l_pjS>~nGVAnnh9r^1_YI^RSuW?K{&7Jngu9+q;?Xwa#ybs>>L z{f^T@f;DpFN^R&D^6lsqHWbt42z9NugUMn6+snPCbvxs`$Q-+=p0~Z}rVu+!ca2hQjHaT*tTXd9?P)feII!PJup~6IP*D?M8zF?7aW_@v)nZ*6QOjSMlIk>nd_~qx%BmJA+M6fA zRO&v*G32yoZ{7NF$E$wqpi&N~r;I^8-16l_FdwG?+URhE4bhY^;@2FCN zop{M+La50dJkZ9c+l1Fy=Dh9U^Iokt%5|YSJG)1m3F_L4OJN#|?)1LhYpi>^9^bgp z30Ag6MjHNVn!EL4YfE3wAsaZWU(G=U%c7e)G&-tptd~5k3|eV!jVxbmkE`QZCvRoh zb~b80*ZANe<2XvsX-1Rd0E5#UBOA)jiW~~H?`Ec5r_ntLP$Ax-&LOqkYM;` z>~=qs4q44{?`Yy4@9>LC{cwewW$zUUguZ-q0%H|fZu?&=Sc9&(v7fhltBmg@O`kvH zhm{UEt~lGg;I>3dw%L-s7}{moi}%b%)$RX^36EKio)(kZ*ghyVCkqK6Ae4Tim`v6@ z;6OGe7Eo6~M6{$=cvUEXXBj1C%Sl$auRB8_M5pp_qdSB zE^bA6Lh0}P&ad+dGv9ADD@S*gWOu7Sq(KgF;5^ngUscY~RX*I%tXy5?MAqgIz5vy5 z9u)wON>Qp2J@yEC-Y_6CTxe9SDpi);1Eq;~Jo=L9wKw4;ivF`L$Z$tRS@~hKj_wZp zDnzUjPbNX9t=qVmfYLGI4qiCQzF*x)%uAdS+`Y)8x(?kMAo=OOqg%#!Z1l&hnkMsy z)Z_Pn^L;_}e=Ho$9k20S82A*-2-8&}7|r~xm}TK+w@YAaE)`u@g^q`_MJ7W6#@z;* z)NhyHLrJcW(LMh@e$SQenV;J63IRmb3ux)=?jrCBu1-kf8u)RC>33t5oDx98u^%aA zQjveRUaNgi^!W3AhTEMRTeVkzNO+a7c_Dfq86pkxubDsx$YV1;5u~2?G;v6y)NVL`#aOfJ}cK3 zcmtBQ3H)<5Pn$~37=>p?+kV8-wFUn~C^K+86**cXuRK~^vzuJr;8^`yyE#q>e;L|% z_gh|Et5Y3Ic|&&h1g9*cuWK>0le~xA@gbaccEfePDWo=X?VDw)T*L(tTMDP62$*?LzbSa2?G$5&86h*lW(5D3YHpi9C59Gg`a z42J=BOFGM!p00qaH|yrlaEt9AzTLApRaQW44IKD@E18xu6!-3K#ONL0mt)!wqJh}R zQlv{@MHLYyJ3|Aue+CM~FA#_y{(*dJWRNtx^dv^czSFgGeSiG(!r2NmHo4V4?i{hh()ZzUrwj?wOkoO^NT%p%Ik{J4t`N;cuDNo66Vq{mTmqHn=sk9c3s4jrtpfXzS&G*Z7#>HaOmwVRUdb-)$Wrg6@D^0W{ zGa<%1HJ$=H3o#l zFeEvvfiMwct+A=tUh@bNI^JiRb*#SPI^G-<3`y5{HX4mrm=-x%mvOTR z3J$pn$3S^xfSzMkxjRaT3=!p7+uPUB!@f8^oT{EbT#spg5Hrpy?5gvCUQ#yn=TF3- zdC#HMbp05zdOdn|j}L(k5jiN@ad)NLTjf^;j=jf^AKB2^(ZxuvrzoX7)LgmEKFt%$ zy^^C`Zrk*+)NZSD4*XOE?MaIc3`iO$G5sW0C*Pks;T`eOb<63C>sC3(-Mcek(Ja~* zPP#FwMg9HU>OEVNZUqsa*w*OjylTXZyN>n?L*h9X1*H}A*!~a3{yMD6t?M4gw}B`q zSb(%j3Ia-Zh=771(v3QI{#t;vmI*z?b=q=&@bcvQOIivM1s46AB>_$ zp10e8epgIsf|ILXu_||a-7VzUiJi=TtD;;v<~nZyYG4?SSqMNwD-b%>+HjsT;3qeh>z|<@5$2I;TzD#jP@jbwWw4I4S*>D|Eqh<7NW6^p+Z0#KcbE z+(Y}V!p0438}LE}T`DqcT0<;qM}<&TCjAs>OpL2z476gW|5Q~8))emyN}gPK4lw~S z84G^vxSr-&rbBi8x;J-h+auVG@nzouX_noSammcfH|>GLsG9cE@2B?%rI{;cZ>r`` z7%<9`5ff|emC4Iw&;`?u8ZAB~zb7~ov&8Cl@X%^&wEs+%e8BX zUK3Z(p?i?r|7e>|6J5Hb=Vk2sHIkDU?@_MMjd`$g0>W0lkk zp5_oJ+3*e%C^z=z;1$h(Tuvk_8xvJ6q;AD2AoO}B1-vjlB@m{keK!KgP04FauUToi zG&?s2_?%*&>qL8blX7n55)u+VEoSaN*iE!uY~26cnxn=MI5NTyd$2O3-=a1rz!77- ztbDG_bErO)v0qhWGRQhb=l3I_e2!}C#99F**d%S;>1J=gfA5~X)$&;NrQYN_ zM@7Bld(qS(Fn;Q@pF`2g z6a7x~PFwm!wYews^rqF!9z~SAT0)!g6W$T^%&~2cTd)!mS8fxfY=Hp%Utm}+bAlhCpxPylQhwL%|*hH zAhCo`nB!;zx5V;owLxRUh3Vt7@6YubZfe)eXM?2LdH^Vt-o{0M2;!`*uUF5H1YHty zkyQ%~3R`^53DDI~h9s{`2+A>>NYF=S+H6eEQL&Pp^oFo?V%15*O~(iI|UB%@lEC zF;6s#LbU%I*rAtfnKRa>KSN>#&5@usWYdMHKS?yGb+xjpP?RoFEfTl7IeQBZ8B>n% zQd1~ecV%Kddk)xOpmsaVXPEXU;ZR_Z*U%t^&8BF()DjR8p|;zK9x2c1rKL$}1~*A_ zze`>^@cpNyY6H-FFJYkf&U$)n{oxEGJ&D}X7tGcq!6{OLgJ z&5x8nx2POFc;7xl8Wt0?=c{l6i7TgD8$xMOEy zI<$&yb2j&XQS8fHwP~x$YQu;?KQEdFo|T?RGi5WI@_4tJdv0Toy4CLKRqU;;|JdKE4H&j?dyreRb3Kb> z36NAq`LrlXfJKf6;+ z{ZBM2K>^k#R$=|AoSd9f#?PMCx%M8v$w%|W*@t!)^{hSIK*076_!j38%o0vSOq;;g zSzv{M$R|Enz^M>)N4t&1{dfU7_kAqKU7g}UaU^^E#EEPpvmy4P7x|8AhK8>cQUd}W zNAj#+h`cpP!)OlKPu3tDAsNt?k{h{CHk;wW%AOGXbXL{yh%(yWwBPBz}ACDyRFw^ zd5gm!3?cBd`z0OVH51{udqQJBLpg8E0P^{mCs$VIDT>tnE;eFGJ~{ncVf_b_4!xW6 zJaA{i&cfJuK2Oe%nwmO-rUEV9O_s9R>`JNC0BRsKnE2H#+WKU1`JP+SB(Qc{wv|3L z?l4ra?Kl|q9i5V)M4wn%g+kHR_~Hq7s>IqN zmv=kWn?5__g(Y7oYst8<4=QVn?t5bM#*nb5qaB<_u-prO%n+%Fs$Qq6o4!jT=sYel z9IhpK8N}9mJ1IA^y4jTb&}Hg}A`6n3F&jTB0T-1?0?=LzeX-ka-RPLC$}kA(kZLrl9tQ|!Z9bH6HrIkjq_Qw>Z#Wtog)#;N|iH!jUvY2NM|A>fUyOiX58P^jM2G_u>-z;B8XvYB`3 zDl#DYb3EOH{sltgJ&n?r>dg)|zGt>;;Qiz+?*)P#W7g=_00{|=Yn(cV#xK?F^d#Nu zw2i%da575(TpG-bWJ1Xv157$?cXziPj`#WsxNR~)ejD18r_C}qQf?Nxu3ln#6S?Eu zFEuRMHY0=zkX0<3_hyDlKm~H$I+3o|zGr{h0hRz^8>D2EcxYf!^J*tvmX#Uw@9&V7 zE`{JOJ1fMMVT|YcsYFmHy4nzMBva^SzIN@2qK3wZ9$YevSSZ=)o;*sObBev`k3^A+ z82wM8I^O-<_|Cag#LZ(Acz8z4!r9jH5&|vj+p&iO8C#P;udI@keUpDci7E0I)aGK@y?GfV; zVP;tzXgXV>y4jO@@{z8Q|BH(A&#NnVR;%DYUk0|g{*i%zEWv{q?gAxO*P6vRr=@RI zn?oi=2z!&BULM7Sd*ub5Xd*q)bd?E`4s%m^KVZuT*>_K`wN$SEcvoA}*v>{7tm#xZ zoniO0slB=DYyNQZ!#i{iD?80!+H00A%w4sMwQ|W1s~(Uzq*QJ7J}lhHYwb#~4HcB8tM+Zzs{QsEy`=b z(@2G0o56%cGYd)(-c+T1SjDlM&>*;7%VYJm+@R^j%q5y!8@6)w90Opwd|fwa+ZK;= zIeh-C#OzwIxCRZmI(xyL599kaRrZnh^W1K#+vzu%9WK)0PLr2XBSqU(@NS$5N$R- zzK?W)Dr^n){KB`87pjH;ZVh@_({I)t)%M4G1udPbb_MWIvK$eqso{y>-+K4Pxsl#W%TDP}3f zy>9^W6R(;yi$XUJB5COZE;iDBZTa8SK*rkwKwMlSXk8w!b=!x2qaHpvFMFEd5F)8y zcRSb%a0ADnJUDz<(0^DXD;ov2I%jdtBwT8^r=j_4V>8~R6|eTN18HY-0TF*ZLF7a` zqBi3Kc47XHO*F>G+j|ErPcDaqhZ~?flYC4-xaDMnHC{NoShLo|Sk%?kb^PGh6utzI zO9p|aS%rpDe)nG7IOyDmgq{FN$OCC>Z*~f7jTF)G@(vA2!1d;jO<{j^=PQx+$STyv z-b|3783KWa4;WyR7XUufxguWGKJz@Q6S+o_NRmKO{v*5lO+$FDib*j5Ujz?*&3Y9^ zyeL$QSL637l+%=SSM47tl=a}?hxWRe73>(9a7p@S30IU@l#lDkDDEq|nFm!lm-Y%} zNzrXTeHO&O^@*s^aY~jOn1$R_pm1!DO6{ zq+{?S%wY`{)L?JhE}-PT`5Bj`#pOq!gsmNv5W-uOP74L;Al$k(ixAsMd8~d=XeR#v z?p#(iynubyE6AN~KND;B85^G>#-&q?Xqr%3xxdwVfPJq^ilw#u`y0kWpkXgZup7zs zB$m)IF}1FOibBHM$7k0Zy7U4_(_I6^5RD$q(sBGeay}}U3Y%M-z^B7)`SxwlqB88J z>P6rWv)m=|zD6bfc7XKKr73A(oQ(m)*0tFM(BMzT!+VIh>@2x>-?3?6^t0c^n*z2m zZvQc4(>VAH`7gW^I^b5wVO+TvcL-WE{Ae}<8AD&e6pNt0SO6gtj?HQN_Beq}MAkFJ z-nt(rwOFc#C^N=tpuoRWkL9k@GPT;GR9icP^P9-yZv0uFjhbQMFz=b}OnLU^$S@t* zhlRe;NFNPl`+EVp`pcC|MKj}^H>vGw^*-O(R2&#h?Mq=C^DqB-(MTl?p6tMVW1xPQJEtI+3gQ7D_4UM~xuZ8;s+l+1`xtax@qoXax0gb79jN3#HD&xC~G_u8wJFN-WuVrilI9~ zO%X;wmZ%S&7j~}O=a*-WC}fIGHr!-C-x9N3N0@ZVN?!fQVp9WiCp;n|VsfUGWquOl zI9-P?be2&~A6mq&j>F~^bE(w;oji++vjuCCANa(q$z#XRIDT*6Ze;8d{J)$xrd(a* z#S?RxYj{KXKfAay;fc>b&x7YQng?6e0kU>K#Ynq}j~))7ClY&wx4t>oO;^j`4(8G< zJGXxm)5x;JA>DcYDgQ~`Ja`+i925Iwm;-VaElkk>M6apq|LT7CDvZva&Wh#S5kG@7 zaG2%s=1z`Y=cj?qR#NpT%=@kVPc};CW3J7*GfTL8;$A*#X7^;>N36b;_vJencq8$P zb?uw-k71*!oE1}tkgf8j_l%SCZ_0$2)M?B}xB`Sq7Xo}Nsx&eM>)6lMsrRr+7s=v_ z?Yq@>iArwZf_=Ewm?U+UuX7$q8}WO^KCm1mOUQYRxmA03;N))Zd%QyJU-G17yE<`f z2PxdC`8O3};L8EWv#+A7yPI4O%St&%ji3WMWG~(WDnqP>HX8QgGFgshEcf+!U%PBz2c&oh{&fW7C3+)I7w~V zOsnn3OuM*NQ;wLI27;-T_6LLq`q0M$BgjnL2=%H(93)tznB{TdUi+Zn;3M`Da_L1$ z8V-LpK0$uaRV2 ztBm~6$=ceMNS6Y!rzWTyh{-OHB@eQ6kX*Ph2@)UQzEI#JGnzz>jA&4?vu^~T!TgMq znmV~<8bFG3-RxqcNvFF+zd3+5Q;X-+#^%CkWxvwc49idh2(^8CM8D}FN-CB?@Xk{z z-@J`Vu!2nW(BjjLwh;WZN}CyZE=2LY;?lP+HlSXlD3Ug9iT@S(YSQ!HmkQrM^wRIC%PG9NB zduZY25MN6l!3X8*0?5jix0pOTJ3CKW9-BCcWYmkcySKMb;7#ZvV^-Xa7v?H+gU{r( z$<_G;X-|ZeNRu>mxK`tM>F$&_DSFIz(757?bj;+WlnO)oo{SOUspL%PeB(E;Ccp?8@v0@BsO|k4TTg zV}N|Psh$eCbl()FgdO;Z>L1?rqdD+25LPuHg3Zn~Z)DqzLPqKl9W+osN2Xm4Kv(b3 zvwyxD>XHUy(qkwIiT&u%zXS|pVQg(F+}ip1l3;Nyhk*vPaYY5|V&cfH2{IFUskAV^ zUQ4mabpwC$XB{8R$<>?F9*)_4X;P^KKMgqLX>c zi?9blY5A}g2|W)qcUeG~>Xnw=u(3QY#07_G2YgELIz#nrX2EZ!Jdq|GSmAyW=a!%q zN&Nvz+c>D*9pXSqdXL0zI}5|Fehm7W_moc~0$9Z0MDwYy7|6A(lf znN=gNpe&s;#=HMR1w)`tlmer=t$vfq^V;BRGjTT#Tx~Oq0Pnl_uWKAuq}3VzIw)p2 z+1R?3^0Wk&|A@iTG(;Yevo3b0y)%Kr_yS^aPzo+nmf&XSgolX$vS1l7?CPtbl)`ga zEbjkoo3)RISPpUikWJy0}*r`XYs5QL@u1z?XE?r{Va72ig z0br_-hewRiTB$-OTG-mHnLwPo0;#g~U2*Xp^UB2%0b?iJcR#ifkv!waENzQU!9Idl zb)P?V4A|F0Lfh?DCGwY%Cu=scy@4*gW#k1Eo%`nHKQuC4lW-VcRwy;sq`Gk< zLqpr?pB3ut|N7bGMkcJZ8-AZhKlnWzAhAhiVVSgVu62v>e7$g1PmFyB&{&T?WH z&&aw7Z;1Nk76DlejhM<0@#jzz1HW&NN@Y~Y8|1pDE9gsO59p^Lfv&8lRvRAc4~xs*C2m} zO!>bWg}((zR8T?$|Dz2|z=3}I-V*HFRmGnu%OFw1FZTrXtNshqvo+6VCqr0~fm4DNmn0+mkf)&u>T0A@%PR z=Nm12vvkh0bscW1TL1NE63DkD*}?st;X;XWUs5uP8hH?eAklMfHVmLJbQGr<$rSl1mIA%h&6@^KmgxNac@npnoNd!V=3M9nnsY?hv(sVH52N(jFuu zhs;k8oSsLyo?ATRYXd=A?SkuVa`EJc@dvIhuG$?eMTg6!hLVs?*<^<-P;$q+`YjOc zIaSS$)7jNGG_bt#^E(%)^ASn@+i%0BX#%oIaT+s#w$Mk~6Y{ahetPfvFSWDk0zh$L%O8wfyU(r7p;28*}_6 z#sjmLb%lhE#qj(0FK3-N)Exhi{OJU_%sG-C48PzK(uSV@g^`k1N;AmK?tiv*vsW`? ztTH#N5pyht8*pe$?>P%9$Y^{a?HT|K{n!4PkT#Hx379J#PrnQRpmdKxTQ#iaFcr$5 z@rbfpoOn3&$i@D;9-?su2#m}IjHHj-Xr?{{!JEL*CRS7dey(-}pgQgL{BbPZU0pRH zlJEO?WI5shT|_EbWE7fkaiaOo135}_ia$n3WLz*)Dxn`83$P-Y7tiybCl7(y+nf1# zXlb<43}KYFH8x&VK91^DaCJSH0&l>Xdo;+t|J@&EK)UVbEYN%p^r(LT7Jpxm zvXKI&mb8J?*x<4@$no^ctD70Ln+tk4otexFY2CzV+e$VNf~>w%c=1O*P@@J*^~V{Jq4CyP zP2y77qvb*tDF0DQIuY%F13q;9_CBdNsjbz&P#@5#5G? zaN*UfS1X#i&?9RdlrhM_5-N2KEqfL^W~02&t3RmqsTV@o=2wr zzgx6KEh^=e9x#=T6w-lg>=sCzu7aC`9f;j#(x22~T);2F1F6v(K`yoj5)L%jKB^zU zgqTPdOs{gk-@A7#S3m+C_g=5pWE~;qn`F5J4MHq{WhJ|SaY*fAePOJ*I?oowe4XPD ztvEs4s$4@K4)7doyVNT+AbFb}Oo_%yHv^IaiP(G5|f z{qE1VG>|m|D$@bl2NCDV$;cKe5u~{UtQg&3C8(}bQMpt*Z878JnhzF!T}ITTl>j{# zy?_6{3Noc^M11f{g2I7Xw7tExm1E-rIKPblFM2o-ZQlhPySyCqt$S^Vvb8Zi(sIcM}=rsNK5GB)aq{~D(L z!kl{0k;m*G;f<1L=@7GY(YifS>>M=AJW?u-De65Nj^uac-r{u0cBjAT2ZS2BZbprIi4UzKXi^-{}si)mpk94-&|HEvID$0Q< zI(6o^UnK@BP|dhQTXZIE=cLuMFFgfGC(3tTgdWHSC+-a2HLdK$V%aZNsF2Gog?)hx zk9=TLaNqx>T6pvn(wYWU#IHwO`ILRy-=ZK&KY|?KC0v83Q6%;LrM_excusS)7{Lzc zp%G)X0m2>bD=DHGFbT>Eq%8H1tXz2aGJ)~{NP^NYNGwlUz?8R#eoofEN}>84dw)LX z$R7!TYBB4Vu~f`Bqc3|sD|UBB$t!$`3Ic**;!^NELqo%i_B7Ei6(mcbhPE!_ae~XpgICrW%r8JAJYhKdX3;!@dj7z! z>cCU%AIXfc--qWjGV(4RTj{t&+w-1oVFxA}m}9jc!L~H7{*0W()qS&_ZUM{7*8b{$ zjnGn zR!XVA!@Cq-{5Cge7eS7}rDg!&q~GGcEsXzs4GyZudValS>i1=|@0b54%5(TXnH8Gg zZ~>O{Mkek_EXSywj=V80#|>?7tn}@jT_@B3|4i3-?idT;&*qiN)&EUGuw8_twHqc= z*-#S!)|LvT5XIJER>y11vNto%6vol-M0ocT`Lu3_#_y!_&vr50fWuW3nm(EyMugMK zxf*k_XvUkFaZc?2uPMwMn+|132bbx=rMgbEYQa;lr0i{Qe{PHiUdv4=&xEn95UiaF zQlKD^{a1mY>^T5R%o!*DRg`e_y%+O!29Gla>v9c2WL#Wy>rXi%&ILq~$;_(a7MfM- zh|MimaVM9er{D)8J^jjD?fDJRwSoq+b#q<^0adNodmKl3Z~noZ&_yQctc9DLGWn;j#K}ZJs_B>8t|2z`NgFo559=MpS z09EtD!X-QjEuDeqU{7Zd{=8@!ab(&>5)?#j=n57@`g2!Tz`=qFPb0T#*o9jReIHQC zd8CqtD1LxkQoyjBs>GOd_gVsrPvsV3P=yrykp^+9H?FaQjcq-&rpma?h7@kZ8}uyi zdStGGYkT`86!ta5pjCn!sz8iCl>FW01KF!a>4$t7jyvSHR)MF z_-?NMd+a6qk?Wd3)O?v5Gt)cU`-kRT*L3&! z!TNwvVR-5i+_PQdmo*Zbe$r&Xw5lC^!rxWw$mB6FxbL2O&|_w0WtHOW<)W9Dm&uqj zlwL9Wu{JRMmd&I2gb#h4r=Ix&ZRA%a;8_9!)m?(@$37NVR*gOUFSq_$9a2-Zt_csk zG@vv&YE2)?YhC_4+E4P*>e+(@+^MLqi5i~~Ap)7}epg8ETqGmfW<)^BMmf`Msy|~Z zSe*<{0y!Te^Da!+f*Ec?SI~dQfq+@NhF>0qA^_XAKN83f1m3ay4r}Ha9yqwTHZ-G- zh$xo=%#U(o_M9P;Frh}teno!J7Oxby+`51Vj5K=FSDQ}X3(6Pq%7`|S8|-O~#|BCd z#?bF{%L!q{#JbX5??cM1ZOK#C9&c{oj18H3&vw2~{K1ccDQIT`!@^2Hcl_}grk>Q| z<=iIpb-ux(K9ah3?=*D0D$4=vqRNcZ3j3>NhUY}}f*HGc6`M=>A^FP~RUz6GKzRhC%zSM;I7MXUp zxueYnGH?r~VP?KUwl9mDK-{b_oH8hSQKtJ0N+g*Ws5^#X^Y_D(KeMen$F&ejk`5i; zF&IR8v(ltL7Yjf_LGS?z$z@*(lYF16+K|T2NU`8S;k$2YCCGa1H~j?}DR|Qnk+; zo}h-T>7)_!t@(|O4Kn~n1r2}$9r<7sEX5%5hrmjs z1phM=TXggRue2N1s|w;DJyVYG-2NFZPexpFD46C?G`#6Y7u_kZU~*`Awr~vP9@Jyw zk=85SoBh6~Rlo9qCfgOz=XC|uV8%cWVZTRTIXd=eOEDU9IC~Sw=`a2+Ud^DJ(=sY| zzh|b?!+4hEH**D4K{750b4ljZ0?Fbh6r%Smys9$h>(xDgEEpaXRCo_8d;=2AXLsL- zmVYcr&bsAPo!Yy^_j5y}VO;(M%H8wkvvLi50vlL(3I?8{)UDp)pf5PN7O;u^&s2`O z27|BDfh{wNTYRl&0$w=oy$q)wM;C-({~I@Zf~=H;OS;3r)M`vPV9elrGm&RrMhx7W zC5WvryY-})N~Mvi%>qDfBLhw0h!}|84WZ;TsODFGmu{^)6&to zT?M2;6maEuL;_@ve6?`NkX(Nv?Q@UB&R{zEYDuE=!9TalAGqM*75BURV$(V`QL;DG)58RXMO z?-h<8CA1V6Vw*TvLd29=b{g(cYenhDYHDic-{ug!vBxL6K~ko>dBC*fqZ{RK#kUMA z%#bmrprmxGK)xf&Qg`iuoWTo7eyK+FfBY&e@4!cWkhSPi%iuD}QRKRF?%;R=bsDdP ztB~b;Ub{c%Z;6>_e_W4JZao+a)%5dG9R-GO3Lj&!G6aAP21ybVn%1|rYK1p7g?7b` z{w{ht8LF4KHpIxd@KugGEB714`o4t+S;S#|%O^^FE+hP-Jfon$%%Csm_njA^?s0 z5t^Dwjfp&@K~55CqS5cqd&-boqT!2e`|o^$oB3ZOsE$vhXFN9yLJ8A6;=*7k8$ZY& z%H+NA^{oV5woMB1Y3Wv=Xr`Q>nK4LBNts4;@sM(dr=2QQxCmk@kZNhcJo4Y5af6pp z6pMZJmF_DLZzSo7sSl)8fG3?^G1JdXyAG@<#t3LWf0TEZ@hgr>9bqR zFj&FmCnQ|mmsYBWdd1Zo%ulGUUY&Rl-Kvye-gR)d)@s)=ew_zNus^;I`M+OIOvRH9 zIS%wmVXwJpi}@JVlPHEr7z5GjF73?2t2h(FTA&H5HX#+Ijtz zuPu&%P|KMAyvCYmVlFkr=_K!V-tznbpeF1=gsu<-d;R`#RD*lPwOXZ7e)AOZTEYY} zXF>TT=N%gp=dZi%DvQwS{xLnM-AoSjvvWGe_iaEfRpK1~L1QP5gt7QD!ir2_Fap!Y zbf7Lo!WG9T(KtSSXqMM+;?nJ3k-JiDT*DGo3RJ5Hy)mMP0~;L0?Yl5Ug`S>)fuUp4 zlKqiT^8yl7jta8|i8vC5Mf?-zj=U586FSMBry7Z8=vSiB^Z#@fWTml$_2h{jmZbaA z_cDsSzSN}8_M`KH@~hTgho2WoIW59jTxEiyS+?IPa1pBxvL1xu)9_w@uwy+(jqITN ze|8YXGqEICh54-E#{CnS zapW%fBh2SHUp=)%n43vP54eTSPKQ<}~jp>|arDd)F-nHrqJ3K|F*3V+&j& zp^4_+Te9c+rH($I2ny6s&@|&Z+^7140}gP1ZJSWCezUM`Xk)Iyr@=bc-;+5I+FUwO z^Lowi#INANWG6Y!%S{X^W*5B+o8->xzD{sYU{#PkPrxWOD0=rYfhw!w`3uLk8DHVN zf8kDTgd3u0OI#eXl-jyiyWH7FsAhPL>CC>1P#o8DJD%Kdr}3@w8SC}tLT42fmGfDm zr^RmN>O4IZ`~(IJGgDJj&wqC<5}c*ML+2JPHFe0gALG|YS-mc*?JZ3i!)H+Dp6*8) zTe|nX#xoazoeP5{xb9vLWclQ>yKNz0wr3+m{<>C}BkNbEPR{4K(6ovmm7DM7iSjzS zT7`l)zo-_f<|LmvlbS&lcg+I7|3y1~Jcg$?>%zUUrQD6trP^^Y>%bUlOQt zm0C5;^11rtIN^8w9LJL#**=MrspUmmJ@Br_Z=OK);Xa9ChS7f1hrM0x^e3_N8=a&q zW3D&x?snt5?TMzbXr_EHyb=eemP zA8eNR_%z^gmPH=DYgCgmC%S2)K9ujtv@`*u#Tw??RicC|PmfMXT4JZ6E|f@CFk#se z&j0nSkk?nS!HI47n<-~7)s#nx1(TZ8k|b6uu|Pz{hqISn=;d&d>gmpOG!9D5?)6eT zKDT^GvTx1R70WM0HRIg&&Mgq*Tswn`t+Mn|s^#*IGwqMz+}oq8=C`{6;Z}0I)hRls zS$LUw)N*)J=$94gx%nY~TNmEY&!ne1)hY85O}=F)5W0y`rrnU@Jbmm7o3^XcX@;M> zE*MA2!0Ch6eA4mG>r~Y+f$>T7*Nm@%!<<#OrJW~lM6oUyHGTW0*I;l?HK){heAKPG zla0ve8y`#Ohw!)*3%AjRnsrL7b+&Wm8$){pp9LT2qbEO=X)g{)A*+NZo~@J>UdY_= z_3N~oT*d~S5=%giT!vun@Y==KKTHZ#_7*k6e6W4S75aalAa|=&*qL*f9WPzFY)w5} zlf!KfRDwz)R6+1^?wWEAQ+wU{gq?N?<$gk^Kg+%kmlk_-wE=B7Trzr@fa5Lb&cyu< zxBIl|)71#nHu`QI^pppXbB)()y2%-f6PiWw#by3-JkvejpDoGKrtzS%SR&*3`eBW{ zA4*&8SG_NF=qsa-I%c!zSU1^H2}SlFukSr^r7Ky8I$R_??yzmUCT(BCVq=kX!Mj0V zm)dOD>D9s3j1c?#b{z#Z#?ob4Aq#vpKC|pw2X{?4Fn&=ix?|HGU$*W0hB0j83HhgJ z8faD?lzA0RR#Y+=wP0&^Y@6Iy$a4&RF~>iqN+B zfAVpf!1Gdku@drkW9fj@B3AmiLm*Sc+#_*S-4jkmb%|U8&%51#f6H4#IN`9 ztzWR@qx9wuoO@@ZOdgz|lY}RytfFYSbP_OhZ3Jf;&#kOpd?C;CP&uU| zZ+=Ge)_9$?2yKy9xn~?^77Od&lXqN z?gUu6-eR7aUIMQXC<~x>l>J8Krhm6_vDdKW&l&s}A-4mAzDq^oy^tmZ?3k(&qx}iB z;#y5UYF}##Yc02NI5{n7Uv(|U<|yk1?E@{i7hF*#)+HP~X0kii?5H0rQyPn!;5-d% zG{|_bXFoFo`x|a-iW}vPb#+rxeaq5#Oa0o1skMjxiQ(Ey4^N!3rpnm(L=?_e^t{oy zI54eJyq#uVyzm6RPMK=D{B-iQGh%cUdDB82iwV?9~7; z=Btz_273#_k+-Th!{|aKryUP2WcBXcotz#N7~m}$G-cw?=~x>*O+g8AuS5_sKql8_w zB*n@9l1xKMiIYjAEUd(I+wc8*??=9bt+OKEiPbfKur@U|G26N(K^!4>$c8tF3%E5+PlT_@RkxM<8z|$3! zHChzbn^xD6Sj`=k4?~{%vNC&(@d@K{6&RA%NceGCNq}Uytg|)bH;^Eb*H6h@#b0^o zUu!e!?4Xn<>tmMm$kcS<{tImJn}kj?`%cGE3cOI@JiLe+sef7^+ncF)2*|r_eN*^) zqkoJ3I^pZPPp_fq36CG8A2F|5^`nzzPY<3)uBA&IbJmpk;)jnwm(d?;To58>j zds~6Z`g$7cc<7_k?f_#rB`z+`9LT_~y&6MGfxk|jCx7o`yQFa(DCnLQ)(#8y2~i`FA-@kRK4=HG16{1BPr8N-^iRLK*6G$?85%x*x(6^(~WktlO!qn`tmBC zUD!XYGQ~wUEUXxcOKztqwx7roK`#2&}ArS-BmPmFI1J?m)9yY1wJ)BTo~jpw-M zH6MVgL@vG#{qmIb^Z}q)4brDr>226Q7ETh%o%W?kN>2viHwWA2SS#hiI}(V-$Dz8-~81izc-e)avES7{1}1J>@xI z$Sw&qe2v_4-IJP**dfY;^LS#o#M<2AgqQwqy2y z+@R~twLuu@yCtS#j31@_-2Ar0XMoWs89h9+wrZKw zUNb5J=}-^dTHwX-t*vt6ksW1gvTer--1z20JlvWckD;unj#{oR!`63B^v3t%S+V9$ z^`55o@_oy>D0ubc)p(gQNt4oL!k=>w;}Z2hrQly)A|HH12&oF8Yjtcr{+zUak=U8LIm>UIZ*1;U z=)*>BXWf{GF_Ij*qc)sX-l2M9Nml2{$zzW$Q~)@2?tsJPZO~;A4tl8NEWw4SBr__5 zvLro;ur5&C7y8b#hr@RY_R_5D3yKApUm672H@Har;;sj#JAU?<4~{C4-Lx27Txw@# zx6ramFjG;XiejDC!@s4TC?EMY1-DtwnU}Gb4CXd*KC`UhZqZKTnZMIuko2%<`{oi8|`n@oRj;$cH!JS z&hFl)@Zp!MGfvi*>%*m;y#)7mu+O}L&5F%=KaIiv_t{PT4okIFz@V*!Q#R7cKB2Z8px-5AIH@vltnebsHIoZ}^Jzkb;tyz#I- zX?K~BP)VLPSfGI<>XJ0A{1lahe{ukMhC(LSwrGF$v0XNJAM~fP(C8v?Z)i_u@*I zs&leQ?aGa&EMhUJavioZ`%H?fY1A)&G47FF-2#{IgDGN<<&s=X(O8+8+TFUVLwl|Y zfkvei$k#wgB>uk3r9wOJrFDP3G*UD$ph8i`|1d=^C*+%M|3Ll=8(T)QS6`nle`mb{ z*q{!u(POMZKokcI+2?`xs7qiPDq{+O@#WU<03)G>u9w0F*q3G{>-kd%Fc=JPd_PuB z>AWIhb-$Th$W^1hj}FWulSCMpc=mL_Bt932+x37soCF+DfmJQXmSQk)&~z+lOX(tt z-a7*Mk{^u#3%ifw^%P=}yXLBJ7qsYOU@U9|ux;KxNJf6kgsh5-Fm0to>&?YAhEQXA z^r?#@MAcgHU;Ov!{ltr2EHpkXxOv(4Ydo~exxK)>aT_M?ylQwy84n|lS(3R7J3ijs zdIBtiCV-di$BZI@q%j4w#c)AjHE-}SfxeXP5Zr#N{lurp8H*4J#V58U_%H?DZ2l>= zB7JF^L8OJH1&eqQbs3lVcMLo27JJR)^qr6^D0gx%Z%%0cXubD7hd%1ryHh>&i-oeY zO64Y=_$j5`4m2jK#~6c~n3z}$E9dxn;VLgLZzw$e4P8CG*D&mWc5bl9Kp(uVpQpcQ zoVFr?5e$S7okwcVK**~H&_}NN*|fRJb~+0>QkBPs@7PDP^M6wO4{D1VuuCgfFqrqC zYEGgMxE^?6i}0L@Vw&P|4Z{W!}s;YSC7K$Fi_#2PEg)tOvRmX2J zGvle6qfkrTTjMO(?d-T-3_DaXX6SXFf_%w%o7(-H^OqwrUewuyXELqFW z?l-(IPYbw^?Z;j7PH?9Y4J2!u={l)!X3Y0d7`!0wv@!dn5dvur3cG`4KVzk?Q>PPepa6f%H~qS&OL6DAFF(6}8Wiu!24tuh@M5kYU%lO7nz z6hDtftFH)4gUl!kgb_kI&}@s`?uG_l#z=vV&oHz?li@9u!&YG*uNa5O{j?-64w@j$ z=H}*{aigVW%ME==BjB2gh8U~|EmSUWCT})^ou2x6x4nOPX~`VqcX_OQeCi`5X6kk6 zkCM9VPmKqy>{9>(#S!S_&Co*pf#dbL4}M*Mfg5@udb|2Xkpru%9md6Pl9QubM?_h^tU5FH?9(8z>SNqS*0qgBvVM5Dm+fwJ}Fjv2Uh@P;U(X%g#kIs^01YB zHerf}ok|&GrbRzFp901=a|*db_kR3wg_Y<*_bBLKV0MS1M(i4dj0c#_nJSs7kwp zk{CL}wgzZ9Sa|3OZ30y@+6kC?()_2nIXDzqpMAe8WUH;9tG-aST~Ssx@av#ASCjM; zxYCt&7_#TW)=&tFMQT4AUd@}wgbM<|Q5w1SSNe$yn`o<)$&noo*w)1-|8)sGY3Oc_ zYhe3x@F#m=;>c&VmbE8wH$SM z`P?>oBGMF0!riK2qo=C(3+dFq{lTD^d3sQ5+N#_PZf-4uwwS=MkVzY0xtR+J3L<-K zEI`u2+fn5v;m+o;g}_?)>v!+M*Ib-H&fNv$=32EM$pDM(8!_BCz3P3_ON)zUnlMp> zm2$Z&#di`&foG8QA>B060XNGm@OQ- zLx8`~=Nda`s`YRpK!Kq*I{U&d2khrG>t8ERh{oFSJElVulx?L}l6+ZBdE;5r4v9(_&Yu~F-fN1XXDnVFj}X$E^E!^9mzdD=Cc z4)z>WjY`|!d3G9JHe!#8+0#3I{CGD1ugyLkki^Zv3=Ma_Z*Ay>7n((i*)7B}DA}93 zf9vD5`$)Z*&58qe?8jUctfq5)9MoWV=4k*0^n}QS$Tk1F$PKG!$fPJv6)QvZa3cSo zi!~2M>0Mim^zrd2Ua?kIRz`<1D!)1D>*(O1Dpl0BXOohg91@|x#KJxXqIu>k&`CNGqD>S7DmgwxVipr6We9}1>0Q58S>#%y z6wjc@9=cv#YOT39OGE*T==|{LPo2voZC4nyT*P;(=u8xisWtO)LK{)oy{8$mqjT?=nx8icb%%=Rg=(dl2#z>}SLj*UkaapB@cxgQjb?d|x-;OOfm zbQ)?v3*HQn?Nf!G5fN7ejtRg18-wkqNKIZo&t?}ut>jM-e|V8`aU0D-PR@TtO4MgF zb+Ru0d)^Y&)t%|bXTRyn%_o>kZc!~Q(C}JqUKi+{ybyGsMnP+#xOO7Ke!^_thE#9l zYN47LmPq*_7GjG#62Es1C#!}S~rRLI_*&Gu*fbEz14 zd3)p379c^xpPcXK%98{AN=S88!M{NgBWbCX$`Sb>TSioT8~uGBs{V^^weadJsw^j8 zWUsIn4Ql8{0+AUver8uLO@>_RfR)f!%o=S4bf5ECz4KP(+K-1X6O1*Km2o@3V7j*{ zqppbjvA4HZpPfW(y7(Q`p^Y!$j`+_Jt{4f&v}DIr{2T0n-2q@v$cY0=HsP^Ns`& z;!Cs-RihSVyWB7?;@Q&zdvdgoJWX(brQevn4n?t9R_f}Mc5)O)R#%-r zHg8<*4omOZ4LS#{Q|bjOcZ($OuNRQNkkKOVhM3Y>8f37NtYR;nCL?6DbD;9P zjdFh;&8jEa1jWJp*Aq{{a`X$VS@8ofwJ(0B0LBit~!-~;rj%JS5Tn}V@d@WA&XcG1Ufa+>yGT+AB0huyd2e4N6x!GpgH zfOfA!&6x~^L@E+JC(tkmJ$@8uBscjR%Rt?tU+4+MN@6?;{&bZ}+nkZ%;bC5&(J7SF zrWTsI!2r)YD3-&T?S=@0tD7q;!jO6i6GPZ?(3Q|Ha`3%-z2H0)5yy}^7A5mVzerk+ z{<5aaKrYM(;cnHAx2j(KD)4t~V7~-S$(GJh63*W;@2%oqx$=<(+fBVm7wU zC9S>6w5ZDJdEA*FH+9Q=JZK@&A$aGG0n2oC?S%ar+YhzQ7PvtPAPNL_8eX8-x!_Ba zT@;uElVfXrBl(kzjlz{P6#gJi=efy{?2qH|FpzP`;y~Vw0hV-?BicId6UO}52S~*p zGMn$ftPM7Y1|L8?o=fiR0T)W4k+1`B-GQ&9AG`*z~7k}*OpV&Xg82I@|R7Pq6GrjzE$oc=r4J(@2paul7 z-!larxl#07ys=9&z+ocIerAuAm;9tZMt))F`H*q3)&<|Mcto*HB(!(ICn5w&DlaW;}}Ra^{H%|*y=(6ZrlGy+FOTJxpv#bOHn~ZQBpuc zKok&AK)R$=O1ewBJEc@W1Vl=tLAqPIrAt7-MJv)M4btCSAp70#KJPi-IoI#`!^;a; z&wApHImaAh%!yCFg|>@I+#A0}eUp0Io=oj5)wCA5Y&~#Z%pb_AJJc7*8Lhy=z$z>< z@fnx2l+-T_8@;H49KW~psovu1p#(Muf25jy9B<8?_QLT4EnO`;HOM#8kMbt420Oye zfiLuEqbaQ7e<)4zb36@bILyXnG0+-+eUhC(TBWiQoq$G35=HcEKy7@{iS}h49 zYG{N3=j=&|kR0aUX0~0=qOBn6WK+BP-qF`UOXI;bt4U|j^*)v>&fw!9BK;kTb*gOQ z4nBk0V@~z!V9xl0B{Jp5VpnXHP^N;bRBkors|@*zx9uY&qTEvYGfSiu-g$asE!|Q} z{qTVocbbH^(iagO)To2^+}bJb@Z6Nm%lHvsS2%3CnEM3;bkcUNn#K)AY=@un!M%F5 z$1_HDW8Hb57PfsjZfkNEmXDHt)zu^XPb)Pc=D8=|aW<3z1+~F1})Fc$Dx$d8W%w&^&q0*l=oJbqFHFRajj@*0T zpwx%=`qt@fCnt=$YzL<47mTwp39ji+Mu}LSH5stD^{Ct+|6N!j`gvSb@X}4ait_8rM7GX)+q)t3`2^7>Za&gxZtwKEmPMeJ!vs zn4se6rZ+V1zj&R9!^JnRBkF}qaNXO-k3TMc2(sZ#wV0`tr+TkHkg;SaJ-E3(I&%9) zOGF^s)A0nODwXy4-#gB-basfciuTri`KGQ1=N~3xe}_)z{PBW5I!0gfTGzk%EJ=q@ zZ?vquT4h4R@sPcCe_ol>`UkF;4;yXYjN_GsMnA=LkpNl&ePvOrgFU^WvNgsVpFdJb z@oZdsNQDjXc;ekIW-F59 zr4qj1O+kim(Sipk6u4H<03fhd)HVn9z3gYQ6}SQyTTEFkwCw~+yU;>w?-@go17VJw z($fhj@!ku9|En!$B|xX%z%e(MYc#kFKMdcQZF@b>P)v|&!b;5v6#AUG9~U3wN}6cl zcJRVn7gyrlK&l`es%*ZxwHfcJK72lIxM1t;UB=1>>KUs0`b~m%iOydtAMRI}a~T_w zITxtg+(;|YGZcK(+L3e$dV8kJXF? z6`&)!9#EZWAqxx+U+H_kNR4}5s&$`nbD>$3AKXzo;rE`_O5>bV&9aQ>}~$V2y2iljM@tQBcr zVwOeM3yWMR^T#Z6IP~p}Wq+*sbL8>lIo^kM7pl&=E{q9&v8YE+B4vtIslIYkyq)QX zwDO-)@&#pwHKWKg7hU&#ZG_)tqsqrwwq+3!Ot;v=X+s>wNrVdx7%4?J<2A2dhTz?Y zlJ87C5!X!NugP8pMtr~ROP@#M%Av@YJLpasBu07zHQ*2)tM_jJag4qIr&wh)+>Ylw z;?f^(%Duy@(_eawyon<7dgrldi$T%!@wK7^>CDa+Ul{%u9csI5qXAXcO8oN2B=yH1!nmdpOT;$ChBqMkS6>cVp zh=Nz7uD0Zj&6;pMyA3`y?QWB?i3x(Y-bxZE>W-tLhulgg^{hmU^w z6UH#7{hey9p|mG`UT>oAP1-omrw@94qmkvk`fjvFQwm{e0T9PXd$2^meqr|0!GMi3 zmnEpM_42(J10no^BYsbJ#?HR3?H;YdG$vH_6p&*HNBUr_P>9cuSN&+1?-SK$&h7NQ zJWrXX&UJ|cEjB=5jw03HR4{0cP?>F^r*f^J{~c8Ty&}8G;)~@v#o^mGdHfV=xKhLh z`sDc*QwFpHW+R%1FeZUC@Js%vrd<9+mk3L@tEKIRg_OhdVekk!0f za(@7o_{2-Zyzxub!@_IRt`8)l&dI`RX*At&Z++MTeKs@qW8s`da9kW)S>6ISNWa$R zIwBsg@2yp}#;A{nGmb-jJrs)C1j>9^o0l$`k?U6EsFs`~;jk{BSbN%pnF5-%-e`_? zuNCzQg*>~Fj&m9{ZuF~qHRlDr*OMTy>?6=LP3h*v>2X;KpmrhTEMlXpVM$Jxzdm*0VP z^@T*6LT3My#cE_s|JhChy9W{19Nt)MTCfG~6YCc`SDrWhiZ^+!*|EpUt@Ein+b{5s z|Kv8#gd7jJ1V1jl8{2irYgtvx-bB~UPIu8?yTOP$WNrp<1!@@%?cqpKdtKJ35-}?5 zi+~lL00v6Q9k6J(?6Ae4UZd$y(OWh3upi=b0ncY4eiBaEZ)i%!zE_NCrleb*EG?bc zXnfO5jXOPRj{xIlnAnAB`7=L#3)eeyY7E=*Qqx87#-Gpa^?zEtp1Dqs**gvbpBAY1BerD)aun1B-fDu#nxn96^fR?B{}(Rmi3jW4I0} zT)v;G=N9B3z?FLu$%b_kQR=X$;f-z@y7NtKAg`T~m%2)$#Zi)EH(6sSgMs!lLHnbS6Va01pT}%!+{Hf34**zZjMQySgI62iPU{3pD?J}ACLaPeg68Tn4R-><~{z-MLnNeFDe>NVb%23 z=KQ2F7F&8gRe!GPf%&7e0WO;lQ3O6W9^01#hkNMRQM~Vf$alW|I$t>d{w;?1!E@XX zBwiRliH~EupQRq--MypszQ(%EFrgdGL-YLsO?CvQcjV03bxBly=*J^j!5gEJ*NNXP z+G8Un)Vt8Vd8H}b^dQ2Hi^hImR9Clo$v2-_j3K0VJv^3vHAaQijQ>T-Ga<#C)X)Cm zamk_n;yXI+xuNfa9|f|Sh?7;Ve7N#ierUgw>4(ggRbk6`bBM-lk0(XJJe<8R@@BP8PbI0Plzd^bb_fs2%=A}N zqoN9X^lHiepn7yl+LsvC4C!&^(+W5Z{#9edjeEvskh*h4}6QBYgld zTOhc!xEhcAp0?nZ>Aj>G^igCD+XY``~VPW1s;fgYRifO3@L0K8qie6 zNyZM}v|~C^$jn}7?`DY#G-%}6>1-BGks#ri_-MCZXzvze73;*xw`=MVIAgYOJ4-*F z%ynn;)o@CQqL;Mt7Mr_kqXeVB!7qA$^!+g-vQr3Jz_zLd4krU|VJMqi%v9YvU@lr3 zDvrz1kidR!)zCnU1Dv^J8N#r^3FQobk*phRVEBfp)rJP`o%g}<;TkTkF7>UT=;%9R zHSRSZAT#8suC8|cj1GPEpq+V2Sw)3UVV!%6B$SZ33n&YbmBJK3N*IXOH>pvN#*&CN z$}CtQ;XR0o;Fwsa3XbY8#BX;uyGGmJ>BFF=_Tx*XlVMQT__)t6MQiJf&$&-1^R$M1 zac0uE#gf_99w^;0tUxc-%;F^nVwc`Kd#A8R_e1T_P^|0g_26;9W54+I+apP^#F4MG zos-Fh$4Yn#41*^gMo?k5{?Nxn`ocP$tz4KAyhsJ64!M1EI;e2-hy{X>e0jf`P?_@j zSjiFNZuyGg*Swt1z;bsm?oA>+dv50m>|p73CU~9EWuYjH$J$1=cdW{1Zg0DN9cdst z>$dXK(qzy)S(NmADvD`1JBt$<67sk?Fiv}IAtWxYB(I~|)p>Pgh04N0s+@p(I5#{T zeSf7{`&-3I?TA8lJqDuf&3*eW#`aa6e0Fxm#1o-zIJ>VBke zy9KckVX`GSh>>%DAV8ta{;r!4RaYo+II+lMEu%{BrUAr*i9o*agoY0SZ01QlX-~Rk zEG#svgw`{iE~xI^f~a7&Wz`Ru zEG~dIeeXI*F$E!zaxMn&LFl#|2>_CA?8R9rtqIoR097uZ|tpXYzj93kuNNrf>D?7pG)|A z+fSZ6aRd4yGt~EbfYGi7#=64LeYk9?a!nF+K#%L3zj7nN8+D;>=+X}j4UGY4m!OAo zy5w>{fC~A@*3x(`$^w9i6?|`lP`rboqV$#GL5;_mfF9m-F9XxDR@hYN0z+;|wV4cL z8G&}#X0vLMZMV8#!)Yo^&YtfB*d5ueEHCG6{u<>9u@fFBG3X|31Y6Y~_+(^^7cnu5 zij4bd4FGB;6!gYCFPAP?1_cALPR)0&Y{+4YnxEZo9zN35)x8XJDc$HF(DP#;4Zvh( zIcA2VU<1@a`W8GCf$0+!$$E*JkrC^($7=ID8j~=^6a7CxG22`Cv-tYXIKFY!%zj#! zz2O|tk8~Z}!$gB3B9y6EQPczmRJUX{_iN@*uQmee$~%D2cYs8VuWSyKiyZEU&6Q4T zIcxlCr0*+GGk$LyRb2u%l!hg!CiW6&INsO~5+%L&49sdYphR5pVc9uHt&9RX$X7Lk zTU;;lK)uFxF4z`|k7pNJ+uE=p18?7gs|gO*aHa`BpFCJ@!1`629w*efo6jBL1CaD?7X5H^giV#h}FI;EsQvtC-mHV}8S# z!2VD+uNvCLR{(ab3i8ye(1IL`N8w%62ZhYU7Rj%6{l%a?d{hturNAoSwA=)GE7KqP zo&uqsZkRO1F^K2L4?=Chf#o<6XgV8#h}X$$>e|***0_U@KBM;q>bD*jaN)I1DQi1P zo4AR51rg;B%Mh=`7K20rITk0iCQ?G z`SkI&U5f@R4Y8r}4OtZ75m0heMh&KTBabR7JM~o|ksn0aV9BMy%OMyGgu=b!U6BOo zE8V{$`OKLjX2Ioe6>##AJtOYh#lT5vLQTetxq;|4t5Cdu@ZbS;>^(MUGVs3Tg}W2= z&>p!;4ls3^m<_sGe%r75HtMutHBG6hshNV2+Syh<6dP`4n6{EsN~)WpM@tWBQ7z?F zU9&t24O3qJ%y+^49^nQKMaDnkYWiUuMm7Wvf}4@oof<+yLJHE3b~HOMGRM{$+*V#J z-{(b2*=raOEDmMs=yh41_RzT@h}u_Lw~qa!1a#LZgJWX)KKSMKCh(s47Alh<0OZd8<)U#QFGj-p?J z_Mv{j%wd@8Nfa$s4WH`El+Uzp-oP8OxK}Y=`joS27r9jLNQ~aSH~Z_C#^RXs@Bmjt?L}X}F7{m$Lu@3L=Te$#~Jb1v01t#&`h)jh{ z8(@P4$vct)n<8}sY@0AVOCe$tAjj<%GJz6wZuO4we0Dpum<;1oYJ<8Q%4~?MDR89Q zji7{-R9vl>iTg3CW68YhWYZ<^UA94a1@(-MR(%kD+5d@=b8n$;P8#_2 zOl#ywl>Nniz1PKFFw;>fwM^K`uFFQbhO*nuhdu-6o7k)_&1#cDhAHsGnD6$v$mjqR z8(<{0^ZZ^1E8+@L7%DyBmU$;aoVsHPq=D}Q67o8uIr@AU3*l~27NXl(P@R3zHi4?A zPcJBgx7jVMQfMKH&8S}fWnp0IQN_4J!=TMn8{QnaZo9(fnECs=A0sy~|LOTcTB$l_ zkd}gif;J_l$nUWc5j5t5IWg)5oS;ERdr^1yG2lH?n;|iSNG~xenS3S#_PVl z=&L_$2N5ZfG0smReuxF5ufnLnz`&b8At-^W@pOIr%ETDhob-S>=maIcU%JcIFJ-W^ zU}(W#n4Z>G&C{yeKrtX)x}rI%85kHoPE2S$RYp_d;pR5&OO=w+sC3NVf(k4eYOzMS zaL<48#o7O*SF_}u>qC-CjB>!y-TfsC9jt6%RW3;CJ-jRn>$lCe{qyI~#ZBE8BWbY_ zwL!=V5+w*ZDY=-UI#sE#eZ4>}cA`r;j`t^C{4b`cG}w0y00r_ELF@peWW%R*!GR{C zy*!C4+Ydbr_7Bz=hnw`WRnB(paKmradiQ{gslS@DT!h-EUpRQB0#_vx4A^CK-QA$i zS*BdmKGSR+btfsKz6R)FS;( zBCIj@#r)>Q%}6^0!l3s5e=|CvNhoB-9Le?IJksf?ne#YVMims!3P$frkfsYA`pgHl9D2jie_K&E-5JqfVJ-`YDlKb4Xq6|lbPlXqeTH%>OWCyv#wA> z*eUpq7~z3ls}KDt<<3MKpuQH@#6O_TWckh?z8Cyx;){s?wIGo&X;}5>AzHK*0X4i0 zl;oE^t^%2P(;R)kxcGn25*Y; z%RrSz40;zfh*3~=v}VV?rMi-3P(pD?$2*0Sb*e9SOl}UMeSLj zOi}y(?OW*#ww#fG|ERM-1r?~Mc3G=sPfL}QYFp-gwDZ8dCz5X>{6#KCh~t0X(5bY> zMB04QSYGop_@s9jBu<^ck45t^nIc&1Q$0sG)(qSb{}etXObmcZ9w$t(qffJ#qdFZM znUAi{BjnyS%tD|Z@)UaL7Iv9qnHH2A|EGd(zQFt2e~8qyEuD*{tT))1YSjf|nLdoD zT_p_AVT!s5MeOtEt-rY~E2)xt(1pEz$Pk_!+yEJhJjDFo1u zU!wrLv#Mdw;*)&eYd?1K!&&LmC-6p8C+oum>E$}$=OOUC(S=qg#7L=HUsyOjqaypL zWU5;{bfIAO^oZZy+GC0`r#CC&KvDZa0cL~<#LFEIaeGbac@bq)lD{GDT;+xakqG-+ z4-bz+z*P~Uufk?hmRI8>Q=_Ep|7SMcH^2M!H<$pXc)s$!CF)dJ@N+-}7HhQBK26r| zw{$;m@6Oz-wTQi^c&C~JWy=wtbt(VfGw`blu_1-4*O5IhJ^sc=GcGRw7p3$Bibw5) zs9_%#m%zfuE<;rwQC4J0&cO5ozKXBe{8C3Jndm!|2pn3Q{G}-Az0>_mYA^!qTs}@5 zhxz>501O?yWMYy(WO>(O+ND#{@N99>PLln^o))DW;<$feIK0_SkJczVZH!N6U3QkZ zaqx7Tgpa7&mRa{$X>;oe{}s`}_j~l^J8v(Ch+mWAc3_A!}F;8EZy^O!4I6x z14ny`gM+R+=--2o{|Wmzx{5S8R1BXilTOdd$_gc$;bVzH4n6Af;gCMSJl6n`t`X&K zt9}fSB5-|$GAhye{|V1M^}73q6mk4HIqd(pXL)oMxeLb_R#^EHg@3V6kH27o<-ggH z$hltm`u5-;LNWfl{g(vQN|e#Bjz5No@4fxcW$gdHbRC^5UIs|1e;b+>g~);bI5Yzm zZ$;VJyJ!I#m%d7h5aws#zjrbXpqlNESC7)9wpgPbU!wHGyr!>dmFK!;^jLc5YyoOM zIwYINe%Ah-<9p`}qVXg)&PSSt;9fXO7A<-F#|UYfJXjfm#N__DGQjUW`n0CXXe#$o zfz2910zuf|r%ytv0s_xH7s*i`t_W$0la)#1w@!fNpNtv;-NgU*8Gm$r9*>{`^fx-_ zpX~AH(DOe#%T%}4-3}SrFxG;&{}Jy}z`y~$*NygLhzyJ~>WH4Al(c_~9^nhwNnA?M zO#Xq${3kNt(Z%s6*B)aq>BM^SwEfZp%%JnXbn+Hn{GXOn-{aCUL>>VJte;*texIoH zKQ2? zF{R5H|KTw~^a$Mhk0uw*^_rM*3uDy_9>N9y$B1v8*85~RS~FcfWLDw-Ce}In7^E}z zoBmBTL_9F@?1dfuAJ>lP|6?c{n;=hx{qHl_ay(06!6;ve`~A^3BH9T5a{#lrIuQ6z z$~S70`j1al3ms6F8Fh8_pWAIp$9JNWzZxAKHq-Lvf6L}OzMNW;KSC{71;dallg*4U zN5*)%=k*7UbY@_Wd=goZVRZbrtKz^i;y?qt`vgic0d%L{Ug5XUpFtbaNs z9q|IN4ukF{rpOdY-PYEY^7>1u)lwgPb%`fdLh90mIr4Baa4tV4{bBC%u{3Ejb9Dbz!sz(4mw`<+aBQPBRf zKo*KAI3@ev1(r+qkM09LCEW#TvfHl9b+nuy*``$y68dy8YbLkfm>_h@hBGEd{8Xi7 z_Z>n+)9+1K1Vrlb8C0w-}j+!LrdpJPd)zys8A zn;>gXqUNAH4$KU~)^{cy)HXjSC}k+-;)4YS#)FE7582F#rP|YI?zjMqcnC~mHc$jf z$!GQ}PIpEP&W^huUINusvl8W;{6KE^M-m2XU+%BJRR+32RB4jt4>BKE7xTN#$pOJ( zUnDv_T`_GjmHTX9&Q=w*5_sQ~p(GHt)v5tjaI_w(E25o;I4;YcuIptmf+_!my8?IH)bqu*y`~|*n z;?qCZ;lh^7ztM!V4B%#lTTkJcKL)ln=TLv$FMt_TESI`|%~(_fivC%e>*zX;t{Z`9 zBQrrHFIB4w5in{boV}>f^R1!zk=o{3_c-0PY0uKi3cI~y0d>MDv~!CFA%Xelq8v%r zxuDHQAfPI{2cYqKIiN5QU*^5&k?nH4r~?N1l^_#($r`eFW|@5QmO4UWpWeNuPZRdY zg*Pjtle2;+ueGfZ6_krrg20EWx9Pf$#GPtt#n8EGF)86 zH#~jBl$U%HHiEt6*XXe9?k3UBcfZae?FOmJ8{XF=P-08xBSs6VJexm`Q>An#M;LWm zPN>*1^D)!>KjDny;4$PyD^?Sj2xlx#(N*lem0K@*DTJM_L~#`<){!wS&4IoZaR0{F zJFHQSerg{X()!(ep!NpE@@Wwfk)f{~E#oqO%xMf7E^6+b=R++}9=i(c7+ceM7@lQX zifm|BW{u)#2m_FQi2x{?tWm|;ySJS=yZkNjN7^TVOUCGgKtk&IFj?kmg~l!_k>e*t zC0Dy>1&Jr(WMy6S+M!2TUhm6Ii-5UC>4m19Zz!t7NI@cHKvX%z%MU(|HUf zU$+rklzg+BWmjl;#>F3CpYOJ$z~($Nb(;G+@KL3H4x6-GjRCWIFoQuI|25O|aYnGv z&^)|;!|Uv-T5%CDvriuwNNKhEXdLt8K?sPSD44aL1jOmM((64ZaaGzv7c zBl{;f?MPu%gq4}?FYky9C&wo>SKLqMm2_GSB01hkQulS<>5xe;B{yL}a9qTfq2P80t&7Fq6&` z+XV$FNg}3NgsJQec*r&#oL>a4+H{YOs(^57ah9Y(FGN$pbtbjVNfXC`;YM;(ExUc+T zKZSY)(f=BOnvQqP-MrNjtX0JkQ%$DTgm2qlSUGvCx&2zPx$>Y4A*})Zodl8hr%8@+ z07UAaHIW!8#k$}Ru3VMrI(8Y)TrcCiZGRKqV#xAZDJDwj4tC;4g0`^tFXJr;HXX>H zx}M*S!dtPq>&|6 zudjq&L`(tJ{C#_NcDDE=M`%5X)}A;!?`#3fQT(z9MbN9SZoWckmM>Os>DyK4yr~&g z>R`Ty`}{rXJrPOq>TMS<<> ze*{vTqN6MS7qkfNVc(=&sD0CL&Hg$Q(n_g8=7#l2n#S)6q$#L)zhHn=JPRo&3t{|8jeo zC;|;ubQoUiU%|hA5D8Gs=d%>m!C5KA`cqr2Th^{nwnCtm-h7a$i`AKlGba=H7@R^~ zdFt~C3q*4>GxGA>8vcDV6WVK!TNnjwlRYd+t&@kkp)2kfedU9v=azI`z+=G=hX_Ht4C?c z$%UazC_pR>?JY*f-e>d}&V!^?Uhc9k6O#PnuZK>?HgZ3CAz3VpSf;{9d%1;ZJ z2h8_hgN^15i=qfM2F)z#+Xu~}&tJUYNs^g6#rnIw%756DHN3)f3}6{oV0hHLM_hju ziaKen(Z32){{MW?0jq}S;Hy>j!@A7B?E%R3RTtze>~&Z@ek67~pB zpsTL9)HkbYq|Ny;^q?XFD8lXx9>w7M$C_?6o^N6}B`pnF{#cTLL1qvh(_f_*1YQQH zDMta@3r75^ZF@y{I<;|LD?97*<~d?+h>CMjp(Ov=N8;k#8p)5syi6@mA;&4~GdV*y zZUG8Gy%=kNQL(l1WzIG?-$(~MUqUzN;T43U`4hM}emyu)Hr$>-*2KYYN5c}?a!)6g{%;m&BGpumsG7QBbS@wz9kG|TedNzw-O z08~kb4)=8&a^l9oZ`BaQuMP@O=bVvj*DoaeTBA)rU;zO3v#&{Z4j30u`$b+Rc(@9} zyrGkbWJ$N*`@NE>E4mmf((GKB2(5~Q2nfQV=$6qEW%hLR#(_t~3;&9#CAJF2_9Z{% zh{X~5_KVC&hkURTxPFsBndCX>+!sW5wB|$|FkAXxX3kZyQOm5|y;K)-l4j*y(E8&r zM0hmFVj?|SPp(b!2-X2a{0(*R4IyC%O!69yLyp!h?JGOajw?%ZYA0u(^#%>@{% zCu)SXMJQzQTm@P*f3i%m!PHy6wCj1B`UfH&78fK6@_)L0FjpTypiD_;s>^DJ49`HaYYC zPfaoY`pOS%i)TeD*LZ;(dA4sOwX5eA@qwslx5kG^`Muc{Q3^x3nw&Fl7=hLc=}YpL zFSfKJ@uv_%x4N#3inUTNTxF&Sv$nPhdMi#%4JEnqdXh9)WaPxS+`ekT@D#y)x2@s=dd-Qwb|gL_c+D&A?2M?MB=Pf4&a zmD76+dtp|ZK)*S#rGo*<;rHeZZ?;0_`0H1%t`vS7M_T69Y2Cd?v*-45G^#YRQ=d#h zqg7{3mh7XIJqFXZ)s-oN7C#~o7*rHKWj=&DxC#Lwp;HXv`k9lohR*Vuvf$fe0Jtpz zjAD_A=s~5@$t69e32gW|DR~o|EK9{Rv*PvlgC9O=oSlUdKNRxT(UX()q_aV8r&5dn zbJ3fK-%{XKmeV6}&mfB`XqjIv$daV8_*-DJg;bXIAA}M*1#CuU2 zHuRXoB1lCH2dW^kJC&mLwFj~2$Fh(4%hH7375yoz1xeVdOXDLGup%kF{LkoF{6>S$QCskC!y6K zKYPPr@r%{`s<=ZWpA-HiCuhsLbzwS!zURqgvK@@*bL&XvF9yF6JL5y0EW07wxGsCQ z`*UT(@hjQl4h9Y+OxRo{fEB}HTWiB|Fg0i~+!Tj?_(9okEVYoJTecnJ5`AR8$DZr{ z#pyxg9*;4%sY^s$&x-CIw6=B6HILhWUTDyKy1NpwTxOp=^tq#CJdsE~Q&!Jw$Qm`; z|G4;~Uhdhs(Q3V*6b_CvEOI_F^L1$!d`YrC-X%GSxfdzfWgTc&r8XxnT5qHSjdt-LLt>rXip(8txQVj8miNSPqsJwa&z(16I?T1NRex)eBX! zm)0R6r(?a7>Z8`@Es>`2v%JXVkWBcr_15C}V>4CWN7ZB1ri=b}&AzJUel99Wkq(&< zSznw@V9{?Q{xLZvp?T+b^Z{p4+}N%bb-EyBnru|d^NshN`jH#0&xkhm9)~`ojKF6& z4ApoVw>!PYxKyfnt2;UcE8JCFc05|ht@>bH=1b=K*mJ@n>pGbXppv2@hY2C57IbLc zeWm1;drTmtRkGJmkdMIZfBl95X6|T3jQ}XCpM$vj2zOqrkC(nZpZ6!WB}G8C?xHXa z-ifOu@)T0M12OO1i(mUwQ?}|^KazZyBDmAQ;_%&{qFut(glXgFz~gJ?!yhjF1j);2q@CeTJqNDCykn4u+5!3MP@sZzKdondsTxCSnsUgTuHSc8 zHw;WJ@D3)M-5ScDG05nUwz+(C4@#$=VrMQ-{aKl4s|NYhgv)UZX1nnUFQyQ7;v4fk zJIynie_z5efl)b2VdqB_nNcq9n;fc}AsJ72B6*DOf+ZyGGiuY%#Ontpg0o*5GmGX1 zU0E_T*@*UpT#h8s2W>QoMmw)9jQT8gy;f$%RONK}xYh91w=$g0PVUIg7&gAs6l>q? z9PEpUT^jR@{W+AQbr9Ui*T;zd)NuZB_vdDC(n|-i$aovanN8rISx0hj>z$cIjh(NG z+zZc@w{D>}Ah~!H77yD@2~fBJ$#VsU7AJsFHQi0Fckmy7X<*eDxi?W)>SU33^)Xej zRo3A;cv0NtWMWz+$T$-_yUgxduxhh2S<5@$o0IsKB%CZH$JAN-euf<5wM|QhTT%ln zT56K%(!rU%VVE4=6migTSZ)z&oQ-y?rXTkwioEr=SIKnr)!TAm6(}`1zyILevKBhw&nPb zl6%{Re5D}gOc$cKI+oJbl&HKPJKVtDRc%lwJME-wF@s3jYq7JrPjpsOs#;R|FC*MzQ3ia|kGU`0{<^&uv)!|$&pk%?5(7g@D(LQ8 zs7YaT>>D>PefjwWualHV?EQG ze}0V>ZW5w4L5wOGF~B?W8mo|3ifc#y+cxk48X7orWYSMxK>v;}d8byl(5VnOrhLzS zmCcBoR{p-w=_9?ABh?#N^D~KXavblpji$?r9xYb-T)M#caGzhi=|2~rvsYFi@tBvjatj`irj`vY$-R+@gS4AkZ63>P|iu}jrx{^zHx}L z|1M+tjNXZJeZBe1TQs-=ggW3c0>|ALRn|nKcDCMtb@4~7Eg#%1lAfgEcfNF*Qx>SY zUsYlI0yz5jIg(pS<5Ibhf+8P1b2Ow9J{vTTvM!B>vSeJHpu_ZQqyXbq%DkHO^*bmi z|LDZ*QF~fy4h{};b@F5Kn98T*g_sh>ztO%^F%|I@qQ+Lu#y>Mv&x7N4lhvxRU1kbgnG*oXp7FWYMf&clzUsH(%IGuRcKjCDA{g&o z8cGa}4WrlX?CgG}+TSfY8|a$CCCq|JyUO8iAw`SjSv?kN!qVeHX>P%MJJ(F$2@-kk z2nMng0nQ!)^uiGnrw-wsOKN5hlGuz?(`F_Ve(7wLN0<13D&)4h0?Xpt&4fmsR-Kva z?s$~}F)z5U5dc|Wx%Q=x&tRTP_G777?uZBWpWHM@@h&u)4~#wYP~XzeGyBxs)I|OE zg-p6!>YV=PJaR_%!54O-U#kPZENoaks|WnvQN)#FS5m{&xwwS!ki$#jmnasE+jY{w zMFBdttc00eKG98Vxl9J0(L~0o-8xK8SB6;9{-O`U%=lMANlqZB6BriZwS1>ATY$J% zv!|KnK6BJirr<*g{EKVPP2_J%Iou?az&Az~osxeEhRbuyD~`r0xvXV0>ceLAmjpBU42G1peguMxYpizi>4y6|-)%3J-FSDar< zF!1dmCG5}}s1Ubra??E29<00y&M3Pr94)V-T5`Ixl?ec7ASmE<&osR(&s6v!<-%yT zO1kQ2`Ta7AzG=y5t6}TZ1AlrZUi;sM36tgaj{c9V=i>Tqx-pD@8XUtfZ^Qf>Ee9Nr zfqT^@hMFS?CulK{7+8JaiCIP+$!Bj^XPfL7?Y*%m{+RVp+|x}%F4Y)8!WYM{>c%IO zIp!J${_Cw{=j{BFavcsHLVEMsduv{tLj-4d?18a#CQ;SUp|1{KNX*kDMLwkm5Bf7c zyHM`nu-`hE=l6IWd^m*i1$Hd`lBp;KO-1y4)fg0C=_zo3L!Wx|OMgSBigt0V_fC+Q zH5k-h=0iua(49hXlLJXT;5XW7F#Pkq#r3T&Giyv=8Dffp4L+!6uXDd=r=a-2R*|x) z6;c8c5V9q^5#wV0QSA^J`=4)g#^?G$L*ROikkB_tVdCz|!m5;@1A4C${wI0&WHyE2 zG(nUYb(nNghEb3crL)7;(>E3Omx=eIf+g)T&q~+4$!-~ye>hdAJ}02reNA+UVVFPH zy)+oKVYofyuQ*FE=vJ6%<|5X+^ZRgZR_~m){>je}o*B&4oJB0rA8}6WrV+b zmKex(*z$IYC}h$z-VVP2j&37SM}BU^Kj^P=^4`IxMA7Faw3%IZY@YyOQyBUvo3aq; zQRK^uAg0793d;&&!-XiU?niYpc?sOm7ur)xs+aPFCTZlE{cX&Xk)TCcGFBg0qvDdy z><`Sdb_!O={MjTzzugBK=64%KTU@Z|##S^;(=W1jcDJ;=KNzv;UU}-}<5;Wx*8@0x zNu%WG_OW8b1sP(hRv80GepA)$gGh%6+%Lmu1>9=svFg={qaK?CzE4ZJHN;;VYu@yL zDk;j)Q1-lpvmDr=E4`<#Mha>{rLa~I>?BC2iT&y~E;azzWa$ulc-#P4yd6~Ew>DlI zdPq&uJdj{&>4z@=@-sXOfhkzm-WN>{mpG#-Lj$=gv`9D zV^v%$-d8hjgS`|zJ{??2NGq_QB0KTFMYmh{12xOT2kSIt0>!dH-$noU2yQJ@f)fohb^L20<}2VQubT9mrDqjhjV8MGw2Er>48`nxy=A$(H0)r>)_M-09%H7QVI35grKpN8TSQ78aT)789Od z<9#KL5q|q5)Q(}t0MO1@9ABq#@j>TDJmu2L?sv%Ursh0W8FL7?3JSmqHMmhHVfWj71~~x%2h0_TS%utKiBqSlIOtP$b^ARvgoiLP6$;+{8R(Wn4DaBdVU=Xy$} zx)d(k`U(ZB8mu1H~1*dm+hdauppbJ1sGYS>+z&Vk4YM;HE*r_j=$#Zl!?ALW$yjHz!P?UGXgy+0C zlvttTLy2jAbiZ+c0S^ub^vCEA4D0TM{d>5D_qj5GW``|37ydWrD&99RBmPUkadcYL zKg*wi8?(^j>D&0-61Cp_9=b_Bs9(7KN{C`V8&OCnw_y{_MXk}>(b$`+LwKlnypPdf*M+6dBHe zUfpXbX&X2wM*(P;pEL!XcCoxFDk=a92rm`4wk~iyJlKDYk{IUwR5{=F!~9S~Av0{c zJ8r4L2im7MXRcqt@f8wGmZ9Mr{4*9%!l%FPR;zN^tJxN2L#;VCx7v}l%iWfa4hqrD zK3@75cK3+u{h4Uxec;I@1Ky9$@1N~-1{OJOojMMR`B$=B9Amxd2;DJlOQWKOAA(PT z&KUdG)`M{!!@AJiv=3%##eS?gBf^MH%Z+*YR_N{S`U2D|U^iOc1Ln?I8S-X&ZQEIf2dlmoIWF;OABaq8{BddiEt+c~50d zumE?)SZTM8_xI9abCF2)fl)fOg>KLSF69|+fQDE7O=SK@pA9eod^eHV_yHFW=FSGO zXl@PfOH}P%+P*XD3jycRn@qa~7+;!5VyjjRLFTSRqEB3$7?n!0LZ&EGzk*O>os{CC zqO9071*L_iLxxz7k7QpRU!b(`@LI?_WAtwlR9a+E&3p&db7yFz&J1~`fqsZ}`e{f9 zh@C_ya6w_LAOFZ>pErjR9kR&=*q{z8kRq2`^o5@r-*#s`pyeK*GbcUKOe)-?1K;-` z6q@Z3BbPnTsQcdW8r7}TUY8};M56q_FF4@LY=6jR_$zX$)v!8Om-XmYu((L? zt=?Fm<*k}S1C@|Up|zpEO14{Ezf(o8Ao;iY8kYEmGrjw+(TMm(AaQtgAZ60Oh#XoJME_D1Nq$^Q81 zANPboacVNCK=Jz>$iG>@9MZf6tN=Oa41w|@a{H}~1>%+<(sMpoWXYar;F*d0tFq)i^P0_hpRMdHM<>T4* zACVpFjRTs7Gvm&j4pW-iMBPPn*nV@yy_Yf?y7IX=T0ho2cRd&h6XJBg@B7?DA(j#lb(B#Hy)l#-sdUNz> zpSli3ozV=L^m%X-wE!fayqqvel~4@C+_(!^y5p`ayT1-85ow_y7rKg?W;fix9RG>D zqkH3Pyu*SWi}tZ97d)`dwB-SDA8=^F_R>(BnXXp1?J0sm z;E?HVLRSdCZa_aifRnXzp-FaqXJ_XQ%0(U}Vdpw51a+FtIP}qN2G`KsX{o}3od|HD zcD~N-C><0QcGG;cytvMk)z5r%=|Ah^v)l8!0gTTCFSU^1U@DX-5&Y>r7Q2%TLqIj+5^BiE(Vo2hA}##XkE=F%y9|IQQ#*kM?= zHK}vaEu|a<)a=h8bwU{ZGLTezM3D_C5nnC5K?5?h+V$YnpM4jD?)Lx3)_KQM{r~;H ztq4UZWQH=!-jY>j%AVPq>`i86Bq7<^Wbf^ey@_m&Eg8pN$M`+Z=R2Q^c>OAw(q1auTNz9$&js9vmCIKOQtXD?1rRQL&b%)G5d4|K* zge^SoSAcvxLhJE*^U)P^6-4>t`1r4)smm;czKU%kBXO+SG8tnQ^$fZ;3U0N^E{!Jn znP~%uVI%zPamYTs)!CB0>>l9}($%&qQzi`6nO=;e~~S$Wk+uY}OT+ zp<6}#XJc%L*JPlb+nIf}HkS+S0#m&8UN2x@fsG5X0I7-F4IN|JQ{-O4Z=PAaq*LL@FlNaVu zqMG%SVoBY{fx{=fp?|NaG9AheZAwIjC(6li%iU@9o_2fZb>=0K!0VRycep@4m0>^g zrK2Z^!g!D#9D6`>2m&NP%}zt-yLT64q8ODilHg)|;lqYZc!BsZ0UV6@l~dJ@IRf~f z7B8j+fT`Ww723q7d8!48kGzlJU7wcq?Tkt!A|*99L{pEfIIzNCA`f615$HlZ-=Y_HX7l>(jhA}HCM zovb(nPj?4nKp|X*#&}^N`uD5SVRfZ`3pNTORg6913VmUj6mV(@6VzjpCrsOf3XS@Pns_$k2$e#M_1V`21R;$hk=Sb1ATa? zcId1H2HcVE7!I4wBf);>){uK%`T6<77-B_&r_Oc@iLQ&QySt`TK=9=BaGw1y(wiKYeAKVn z$x7^Z4pK8UDfNZCeEPvOTB-d4IYdhO`kH@99j#ndknU+uk+W~Z5zW>*ja6Q0i3v8V z*nj9~Jst9sbSN1jOT#-XsbiF$we{+xP*}wdp3yS+FM{SBGg-S#VPS8dfLJ5E-xZ)OV%)(Kl;j z+)iCt*QiT7pOmp2AD-GhtbQZhS6Y*_-c{3t#_?&@l9J;v=ddHV*f4cp$UdA^OD@Ga zPx-;4NGoh8nivCh3UpiCa-ipi1t)QL;6zFNdr%yHj(}_xT$!S71L^c_I_^VZzL-qi zKeBo(zGnM}%DX?mF@SH~{Emj|w+h=u)?@uy71GCRwxo|wp70l3Y?y6AbP8RTY$D~99-8Bo>@3Ng zVx&p`8f|S(O?5DnB!zRy4tGrQ7bWitw%Yx)$6hYF`gD$xqF7W(7_Q z4o?pcY+n}F3xA|2JslEE9x>N$z!6}wjD;!(GJpvnM|?o0kp04R*67>Z;WUGePDA*`L?5k zghcwb85HYP0BOO;bVAwyAy3eB5s?ZdrLzn(Ib1|;0VkmN%Oyn_drMMI(>H?NXSK}U zx-NxQKp`ydi|3;?i70k`V?F(ZZSG04!DxG7$P~yoQdS5_=7Z12J z92?_hU3>Cv)JP1uhSGiQiP+gD)K*b~mCiu8+Sd$YzP0K?gB1oivt?VybO z5n7f!G3waxrAu&i@Oj%t@|h7@Jz~%GYBtX*(-`tPq8G+?8v&tM$tCt5bWINTPDs&Y z&zD52=p!CQ%khllsP+vbyuHb4SZV*|wvGW6S#kp<35m%AOl>c)y=|ANT~q(vsH;9* zRVPLsv+PvK`+=#lbJPkBHSrTA+B<)oaj2L0s?pGd^*HF_0e<;1R=r%)dl3o9{$r3T zM72M{{&8Ck_GbS9%mOje#jpBj5w91k=yhu$*I9NsvZI@x=v86qKF~MKmRaE}##EH1b7i(xavf)V z!Q(uubTRc>+pj^vP`?&$R1mJ)(BuB|jLjkWo=xue`GMuE7vi@Tm%g0}-$~M!6;IJDz z_$UEMV-;h|p8c?i%54(rO{dv$9{(*o1=BxKnM?iUxb9}nah{+g-)b0zIaHQ(!R^Ji#cvO(Hq>u9nVFd@ zHXRagM3?muDg7W9a#QLp`MHFZZU>?wiQ=MS&q%UR$=enaOj$DkL@V6(%y$;@#&@Yez;youJ{;s+*V|tpHcEM-oIe=`7qO>SbJ= zo70~k^WJF#hLiSTJ@MJJrNFb9+zvw;@QCw&V@PyKd229_1gU@GwM_z>7T(IkEY9R z`Q?uG_QIl5_7Z#U_fxOaN~X}!j@(Z2CdKZzoQJClS5DeUFIK%}JFGG^TE2xyG%4Cy zxwe{L!kUm|e}eK!@;k!$_sjUPFs}ARE>$l?G7H|pFibu}Na0T+sh9QgiGq&|qO^-4 zt;2*QpBy~taXMbE@A|h!H0d8`rAFRKjQlA{)M8vSw#Bclf|6yxD+;`x9`a0M>a>Jb zvevon=)ORCTD@n@=hWwY-8A?{1BR-Ce})FNUyOXQsZZysH0H7k@A`8XaHaU8^|hMq zhRF+*3j9v{G;|qhUuu2@{9V2}vrRRcGxGZ3?wDsq_V`QTE-tAh+cw@#| z_{5D2IJELmxTgZXeRr={1j>P=flm^sF9pjz6(QS}MYP5&#FrMALnve!ShZLOe;1Y} zh4FbNCc4|)w$gl@{QNOy*7%g}ZHIYTefG#IVxAUWH?OQ;yOd#kGAr5YccxQB!&f{! zey32je~yxou86~bw#75D03l9$q{Fw4w;0%NT&xnDUk@Y_2+lR>>o97u=3!kTH!@lJ zoZ%SZYj&nwo8`8CpV~Pdc-Z$h@G9?-;qV9b~Mg8V0o(g+(>cUps56R=iLkr3F~ucaajvM zD)14jPp8`9MW>&MYlHdQw}siv6TQ8?#5;Qj(7KN2?HukxhkD~2Pp~lhH0}<$n6NM= z84Sbu+Uf>4Oa7k6?tm0-LG8A5bwNQv)LO_ndXduGq&dGzOnrjd8{3nZk7~c>z8GF$ zS%n60T+ED@HSkt{!Clj58ryU%`1VyJ|Gm{iBpyuJyGQwqx(qt;JB_sY;}RR&)HMTR zlKk%TJKXyEpOR5;@d|BCwwP!#d7*C=ShnbNPR#UlVg@h)aG1cmexbS5`GRJ%=~`D- z@4pq5MlJ!ENngN$JJgq9sxle?ll*5;iGAjOkibZf8Dd`bmaa)tWoeXSQpw$1h*CJ& zQ)G<7Zo|It{YveVLivQh&s4)*xYZ~=cadGNw^wiTqMn*uxO3YURq<3*lPUwWx6f=#OIF#$EeO;OjsbG5E0b z`t9hT(uOKaZyLgqjt!HP6-R#lNiRtX+lJ%8=Pd(U6I~T^j7@ACZ zsM${Yb3Id4`&FitOgW}3CWA!EzCY)eyq{<)?~VGHZmlqNv!SP>mx$um=~fK_60|i$ zD@_7|Kn|)G(Y44;aj403p*|Y+5T&UyUp(0qNkoA3X z-+E}+$!Tp4dyLYrxC2_kf3hG*uPL^Yw7J(+UueWZOh+#6( z2^gIBrT{YOedmk@aqj8k#J$ct%-Z2<6B;7>n%19S-6M(j?v#G}>5F3+pdTSzS^H>u zzJbAwIBw(Tk_-zm4jIwTH?7hVv6!t3Hq%8GjEMT!F|%fr(NR@vNeLN<*Nq^{iQ9{H zdl8Tma1_mmW6T-8c8z|V>Wu@7i_yCB^FGBGcI2QZFZ7lnSckna91K-ypidOv{Px7) z6-s4aMox|hgR=@&y;24n_-5H^_x&|RdOErnpm%Y+Bno4vZzhc_Sl3}r z3uhiaZ zQ$O$jY>@WZt<2v{P{w+4>`HZFto#qjy`bEk$C^@uZe>hsQ9EQ_XTh9ue+Pd!>!uga zA-VXt{P?rth-HHX+&^wesGY|7bTITWK-`wHzaCCa0f)da+3xpCn~3Py65-58Z2PGu zHRXgEJ%{>)rO+xu^8SRU)r*SLm$Ueso?vyE?OcU$M5L z>J5(F&pQQn9Mr}tZUZhA-L+4(ZFIv3MB>7~Jlgd83bv{@OyK64bYOn61%GF7N2 z_8!-?jts_CpUCglkYJlwWuHvies~8dg<@tvGLJc}1Fxu_KH7A1cQ+Eiz(J5E`Qg-) z>MqH~J%LQiHJ+9wD7oYm6qavK6FbRo1&5`-b<)E7U%PmheHE20h9D1y~obSGjDZ7-B}u5HA<4afsvsU2wYq6gclSfV+)J|NDYK;PYWqIJiS9 z{e5`)Vuy1i{AwhAjR>5lMK7_Ylejs24`IH{GI1RIxZw59IXfj39&#Y}6uUQe?eDRv z|KmK{Dbi8{#HakJ=jqgIB}dm5^L9eRR0cM65+1dgrm!F=)2@~M7{DZ;Y=4f7l_V*k z8|X#sEv&A{L(s+#)e>{j8RXA`iirK@dm7|>1g^_QzMXB9vU5o1gW1#}Q9|iQ_hNQI zuG^tZo%!uGiGN6=pv+sdO)4X~dAHK-_eji!L5a3O_4?0luBj1wl^K7H0PZyFupfVR zdPH6qw5$9?b~x7@ydLTozB(3xc69SsDYR$Fa-%8>HGS4qf3AN0xm70i?IlV+d(rEE z_92iZ`L#%L9ltyhVgZf1wK_5RJ1yMYEwbE13w_}KZ^mnL0 ze!70cLEJrX+*z4KHtcAblj{Z!je<>uui1&7#979-lRfeQWQeNuWG-tI5i&ol04pZM z_*I#?(wv>(1?R44_bfL#Z|vMz%?BaW`wP=*oI+B z+QsqNXDGmSl>?xk;x$g|c8fL-Y6mqLK!pPne365{{mFjR02yy49Qd>6cGaS$gGOMc zEzyK#e|x*wYwx!zg&+>Q0I__Wk9M947Vw8xVfNVj<+47)F^+|}&Fzw~hzzSijId`l z7a(i23Uq{?Sez3v%8c^)ywR$(S>qAs?HH{xGFbk~1v<7?j(I?to~%`p|98g!9HTmc zs5u|)E$PeIN`I-?3W0U_&YcKkGLXmt*%>|U1A+(Q4?>S-a7dq^?T_t`EUEq0M>tvs zpnW#${o4~6owltfOwn!*-qp?{4|Ido_FWhp( z$2+sP9VV8S!|q9=3MOc-+&upOQ{$uY+v@%awii0>^?;c^r`hPB!{1*-zMadEIknQk zV=@?fzMc_5lK=9QRN3t9$o|zGh7x>j&wB zOJ#_G_AO5wUkA?rV$IQ3O_h~OJ1 z)O4M+7qiQ|Z8)udq4!ozqTfxzS!E3Tj4>gg2CG13{2+#_d{qA>LLU($HfBRFqF@q! zS>OBhlZAKKSAnairBh}8+f@4C0_RipE&JdkdziD-SW*1vWv$8PSR$fokjHFT7uzVk znQNO?VH^Gn!s8#p4AsVEIl=iA2RpksCcs+IZsCIM7 zB7ENCMFwq#CpV@sY-IHoA2<+uD}-9Qm{e8rwN`95XGA4bRK8ZiUlRDUK&P{9KLHhn zy37G0hZ zK!TH>-8HcbJxGfKmC2 zzbf{>lhO;m69iFupE>ZM@mN<@R!;VwNvae@^?v2@hP_Lo2V$f^H|ZPV1cQw|L=eU~ zCn#TcT^}ovdfwP}?&;dLzu1c5RCghE;9C#`YPMI|X1O%lMtj%*I4wjbla4yct78&`Be|0^QxdqDyJH>d?CGa z)KhbSgXYe%(A4uP-`Zfaow=73ZG9HwbpJy}@W+uyY-lj_EKhEq)?rM3*!vZ6acJGS z)F#`lT~oDG-#1#Hu;@Wk){p=+)_D+2h5mNu3V|R(iIVzU?cw??UeOkcdRQk7lY9a(^f^{$#DZ z&tjZ2S%L$R9Jy+CXS(>d+&8pGcKNAGfs|?2i2FnHLmG|!Q$uRruQt&m)HWa;`jVgi za^3BBmIYF(qeokDvr0qM=gwpraSJ6vJWqgRDk!&NTOnc8l|qI?it+A}xY)HR=*$MoKr&NH90E%~jch92kwGoY6q zr>h*feK)j~FjqBWt%V4%EPDnBt0mAvSuK3WHetG&^b zA36_{hdiBt@XEpvk8^*u-6bPqG9emeJy8}r>e_4=y~kmESXEuEq3bdmunXszG-UnY zu-VwySiHx(kIg8A;r|=0?#vV@&lOnDP3XcNmPCM+N1ET-vaTLBIbXI%Shg}lj+`T& zKPZPYD`RJb85a_MJpn(h!yq63c`Gw-1aQJ*DH6ft6d_$A2*AaJVHo;Sl9HsOTOI!d zF&{5skb8L_d}aRgsO4pou`2sa0GyAc2~tIG_LC{oYV?s=_QpqM4XCa$++VSB^cO=v>rPiH6M2anY_`pjw&>(d&&gLAR|Y9zt3 znFi18>My01BavQw$9xwryz_)uH$x%5#}HHAyYc?;bqgNZXPix{|8cQP|J%hrCFDpD ziQU)U$)BplTCsJr7~E65<$^L+mX^6)K!1+;a^B2}Pk*1&^yQ2*(sNnZZTFAw$Qj0e zg@)2yXL7KDRx;$dJG^!Q451*KYb(jW2HBfkWoaXuYtRxznfN8}*yz~7ddU1c8`aXZL3FgwoiOdIkdu7a!>b(qm{O*~?){~Dr zy56V19mk4|bl~CR+C(*TbS$l3-Ws9aIt>d7l3pAH5(#8{Up_xW+mLw0A8jqi*d8$@ zZYKpH1|tS5=8!z+E2@d>+~>$LUZbN5*3}}ARl1CBeQ#oM$9q{a!>=@jl=|kxw{q?D za76F#epakqD1DHC^G9K~d5KF|rX2O7;w-V;-z!T<0&g)Mq4K-)P^&5PaIX~{K3ZYbRzdW>y?ox z7Pp6R-hquKDO1qXWv|lSb`Wv7^)@hhsA2>ju$Rvr9CptjX~8wOe#HhJw#d*V`byPP z!0osd8t}#aru2G_7mthKKUnJ@h{UnfHs1W7ILUwUDSk4gXAnl_V4^rSfkz+@2v{5# zizM*c&Xp4%Vzxb_s*v_`jrh)UkcxH-?yN)Rh@p}%1n_mbUYj_%pwSC9Lk*W0V9Uw4 zzOztMQ?s63@tC^imrS)sj?cb0rh`+E19NFfid&ZKG0*91s>t+MV$jfF>Ty6LYLU-2<@Asp4ih~VCA%3n=otbWV#QCO`)xxI2F-ys=V z22dsnWqC()KZyE(32D3Xa-e)eNPK*Lt8~5T1e+Ku`&}Lu{&Eyk|nzSw<3>&Z+%Jg+0H@u{Fog|LhbE+e$QFEa5Kpr zZC!wYfjtTW^U4d|atu{eOJfi|!E!++dwN^ow22j`5hXieQLEceD85lsY``hlbVIlF+x)#2YvB{vaol_aS4`qa{w*ZzK@Q=KT;U^<~ zXzn&aqc;&1Ev;BLnu3Bt!dDNdnt7^lA+S6jgnS2;*uCnSnh6ZE#zWU0s!_FUB@I+5 zUSc?pjqXNe576DVAVz^s$Za>vX;o0TPNU5HV0V|Xueu8j`_5du)!OFfW?xk6<V{Uf(A~E z&3h-*Q!=Mh2^8zpQ{6st21A=O%R#)@S_h#zzCwnMG=k&VuqFq(m208i`4xqD!s{(M z38u3n69JaR;GpU+WRY+^`>?0ZO{sVWs{@3>@la*2R^o9co2y2}5G?Q1s8MuF% zMv^iy_U~L1wZ7h68#{ihV=IwUciK=TTtCx+30nU*2K3_M)Mi+0t>QSX-4Lp2_dQ@J_`}ALNE%#L(J$2SE@V0=D z{B91e@z)+6jANF@$p+30&rC|j4#^(>(b?*AbFF&4KK?sPGW4nMdAEnr_kN;bhT^FH zMGK9Bul-X!{v^j>`D8D)Z#R5&bdQHZ&^@z{WVxqNC}2b0Wq%U41j)?4K8z}|>-;kz zT;VlLRv`ysF@a>JTm?fJj3puK;aZ}L$f{&9e*>>@?_a!{gr{WxnFXNM0ki_lkhbx6 z=#uGGjl6OeKHlMt@-h9QN&7jvu}5Iw;N^~1DI}8P)H~bG?YwF+IKL)C)2PhZtIL<5|a8v9@E=Z z;z5bcMjO#_Xr~TZtG5=gUXsV8I#gIqEOq+XSin&Ib22on_3D6$iI{-jw&$Vn^1{Lg zr}gp0&XQ3)GHzzS4Mi9(1Q_f9|I(#oFKvgp7=3_J)q>w7zw^c3<4(M z&a^C2ll2gR*Ku_WoH67OWMcu;QTBiIAc-u|s2#BX8-W$W$tX!-N!@&>qR4WL9kn`A zV6w?vjv2|$BWqq~%JT_k@h~yTIKb55Q6D38_{Im2#P$Nm+q>Sn-Uec8ls5Iem^DjH zZ8a|x)}7^H4*j5r1gq~d(fNuhD%bAa95dux`rM*lzbYo?JU>U1+1zYczLDc_w2jzZ zhzRF2`_;9kb6dHdXcjZ&_o2;{j`ue0@vu`?8n0l*oC=e2>^ZAmnt(LcYjTo#aN(uO z3g5@QbC98i=T5tk=ZKK7X;p5j`Za#;`kQ<-=s^%Fxr6V`A|RlusUQEq%*^cUq|(*Z z^@dGT6L0I2GbAtCeIRNP^&(H@y!BXBohMo@*l5Q?4I#vLu}+6l3|Qquy_jc;_jdSm zL&K}Z?h2__jo6JkBO?LfGqn1i((A3lix;<5f#bst!;u9>iCP4B`W#Ou6z zYk725g0f+$#VtqaV6upo$GqdXEWS=;Dbi9eKGqy=;25nx-Jdw~K*O`;G8~~G9Mi&h zQEOYI?{f55`Kv==hz76m66COjpXH0pvG4)f24mNI8P5p&jMQqz|6^jCpH>K*{OM9Y zbzk5t&1pTbf2oI(*1-DeU6D#2h*~>gzxppEN~EcnipuaeLI(K3ZvvPh01ad#I0P>vgQrU2?hi*Ey5G zM*KA*0uXSgE^lq2j^)1eZi4FD^U@gwv7Or_wBGW1>rAv81i51?L8re#ls}EJ+ z4b6E?2i?*Cqy%^7{_m7vE$$2PMEJ~x=iy_P$&*?*_orJZ*~261&hl-v&$|)D9n3k; z3MzhxUf3`HZ&+@z9d0{I?(0kv)2^=y9bH|1ofCQ93WMj}G&%9-LcbqeaMyI$WJkMK zM;;t3=pP_5#RRMzSf2RBmUBf-94j=Zljo4e)_x47Fjx&X@fK56yKH$3Ld4LudSd*` zm%y$YTt+Bofbi@qLe@vCX%1|B`C3z!$Y89T+CiOnn&h=`kM82=#2N0j>RaAhYJQ0% zw%#hzxphm}7aOcb_nHXq-c<`Ghj8*3y)unZAbk*z`J@)$&xjKK8ypJ1+IRO`66(as zyr-n-O9H;@%f+wN&)bm1lQzulPOo11T= zBvaL&V*Y~*cxxC}T{jyy+`{%hT|l5Q_|+y&Xgu}GBE)W~I2_s0z{vI=faL{pA7Gpj zP*NtzyreP6k2yP7PjXliza(@$bB^^_m?henkmARc%HMF>Y4s%tFwil4!6c@_sl5uF z{VkGfPMIUC2KojDiXB)lFJ&G#V*dWDH7J31NkffafE)*h@iFH3YEZ1>|1Qwdnv{v5 zt+;#|5J#?`#gUHWiM~98QM3Q|$sfw6V0LAE51tWsf(v(YAbD=(%H{>_`fuXrC$1sK zH#c6+vA3o4^}k1XN%Tzk_haSgWCoR6o*ks2(Y(KN$)3-$kP%!sF*!ZnqljkHh9+W z&J^LgZF!O8b1K2}@rWVD;zwM{$>dlUE;#?ola>>XOG8ES{qA$Qe?Uuy^6|XkaIJ`& zmmU8Dy#fs9Rs422nJ&x>;zHKl4BxslU!dVM~f@_hC^rSJkR zNPbhGnv~M+<0F!f@}HED?z`!Ja=tc&^@h-h^4ccD%5+>Ew$WgCWSvAfotWsI!>300 zSH(YPzoRM^A8RML6;914b0>=3SHHt z&=IA%S&{*y!ARQQGx$ zg~`*W4bCZu#KSoQBTmvL&>hMLZCUGcvz2Lhw)OR)T=XcuhN*fKy$)_OVGP6tY$-pU z{kNv^lT?iT7}NhJ}*#V~fdEi+_(mP)e2@j6;o+dn8hxM^URRAfWgf5GtnIQPB; zYMpS~GV4|S zo%-X?2pRWp{{G^(;L8~pTm<^0HhIpxC-ZeEJuNK@^m5j>DJcuK_xI&Vh1?wc54)f1e)?uy zZaXho1Ar`hEG#UzO7H6nIR3qp#O(~Y>+cu@lP>v#g6eQT|3410C7t{2~#?Xafc^q0$6cpioLT;!?L!vb`yl_ zAw=34i?Cd1+XmZi*$rG=E+(DY%6iC&{Rn;NhZTSV+1lb!n}Pi_+-xVP&6wMK=%MOX zyf~-Da0nK2&;?s-{_EnAv?}eG>^R1>W}oRkIBX(id_MR^{r+w4Xfse2-8A>qm}?;P zc3lBUfZjb}S%|Wilb0`Fc>JC(-u2KGA>7g^M)LagAT9(xcivza(C~w2iytvavNgy8t7k1DSI>n?w^y3EfeoOsX|U{zq0$oWyWfa4DKwAPueGM zjp^dqT+gJODWfmjYC@r(%mmY!D%KEt#S3FU*}8FP*nzLU;oTUhJG-t(F@cDEcb1?r z7nkHTTOoGQ<<9w)#Gn2xA`dUlJ-R%t@~q`lST`ijnU=lBnR9`BDG%v$F+o@2Kt=8; z;I-HS3kx6bLDgVtf3TsQ*vEVY;~{XJX}E|}`xHJWW5E0O2wHSY(Kr(TsF+~nQ(q-A z_6LPRJPpxpo~^})Xj47g@g4O3gpJMHQf6-oi4Vx+*LOEtmra)iZl|1P0$5A>zHyDKD;6pbgszCaY}Oy4Lqkm)_efTZt`8rWRVSpj@*5UN||P_t|wd z4$;mF5xBRBd_7)sYI0~itgv!G7acKS=Y8bG_93VmYA61n1NttgrP}uY4A35fKJzQM zregLbKtgX>^rrEWlx;jY6jGnSG&=}^a083*@nV)h-xKBt!8hihL~u5`rFzXC-h;W% z+^29$|Lqe-cP~Oukb$a4TRXtnPxzHhccTzeRl7pEs%+;2SD@=&b353$&oYeKfRj>= zgjMTXeLRqOf5XZvp+z|21qc&T4evUG53?L!xV$$1pxCI39HuFIFcrhM05`%<@Jio@ zjeylxZXr-9cz_u~et38|aJK2a6euuw6t96SsO8A#!IrD3Uahx>G(UJh0wDji2u5c& z=ZSBVhGvw6g(*ngQY=@aj{flBL)I-ET-?yFdAw>>(wsTJT7zd#Q_R%G1F^ov#Lxw^ zo<5{~&(}SB9+-5ns!Xm`!%P|)9UUD?PK-6KLyR?r_tEdGv#7YZLeDSVvv=+t`rpus zHb(|G()q1pzuQN@eRz1&7`s=K3fQblPT$CAe(g{<7r zpYh_`_2=t0rPkj?`?z}|S6Iy5gC^F#qEMZuX)8mu6xW>1@^+mqeqUMjLWU(BoaRh& z7pPcH;F3rQjj;QqDo5Z`~+82x7;Aq zEA~Sc)zNa2H*-CJyWH>Hg;II|a*b(g4LiQL3DV!=v~_YCHpy+@{|>|7F-uq#s|3nI zGH}9Z{1O`6D=b!4R=65@+8ttqBd>R$d6F1Us=dVJULUB`=k)M(K> zeGu=KVC3yKW9H_fut!v#vGkTMaFr6|9HlVR0tf^*F{)@JG#@{NU!pB`aNW1Y0w$yt}E7O%aK=kZuXbc=(9 ze`0k|Y^?P24>CVnN=CMNKRZ=TpZj&uF?Kfd@w`?iQVG-;Wc=Cb`5x@MQSH1*lOj+i zb3zZwpoNFn?qs?Fr=!C}u~BenrIp*Sdhw40)sSH$^({6w1$Iowp!KI;Ln4sUfqE^= zA0|hNzDC)@6v49qAV~bKaS#Qy2bd4b31}X7H-G39w86Jap_8lj#E3Ej+S`xNAs0!< z)!Q%2um1UCx(Dd_ropeT^R@V<{BICyQJB<0B-2Hvnshxe>67FNh| zWB6(aue!Y4GXb+-Y1dtI9~%6g0D%v~2GAd*Ra(G+C#U-O&VObB8SDt&_ir8v3q&j! zWTc4ZskjH9id3QMu8K!q^;VRIV+;N$$dYG;MC2h5=iCr|_yd^dEtuywVERo%^2}h? z>p|Mr&$)Yiz7I-k_LZ0)^IFK*5B*TWyJ*5{7(3F_A$nt8dVe^3*-pBWH$$PKq)0r7 z*EW~uZpkETD&wNe{BDayJ5$2+I|J%u(=}xw&v*~!ME(1IVr)jSBdL}z0&OY7{rp%G z#XUSO=_s9}9azolgvfK8*E(zy3r0{cmyX^H+bu+g+pEsDf3(L>U}L7y$Y!3(>fGS;wZPgp9yMeE=`}-RLcXjH$V&;8A-YdK96#EBXR1FSi{P1bu;wAk^ z@-91jr5FUk*KY}3I`TB>OldS7$j6)h^ZSyg@Y)9htY>eZh?#N=JnC?h)#biZkDHVF zs*F8rq?>SAUb}-`*G2741}nLLMuE9v`7>Lk9lN$84%H~Lk2gA`c@LuS_HMZ`?zwCJ zSs5}@7Ghd(JI7~@&U%Q0jr~e^)x*Q%m-m8!nb{5XDK0BsI=ZWw@(Jt*P%B82G3X*; zwJ9%bzZBxyy4bOqb8|i;9Q~?Te*Um0Mm46+8-o|cu&htE07-X#Syng zf%PTi#fuj!SpHDv>an7j=Iz$j*Eu{DJtFtMu13yoF@*^|d7@Y)k|2+zzES}pu^nUg zBh2B%P4TGzM9!C@bQJpWqhiP7f}4MRgKqjY7OEGF{I6Q`_HD)b?SlhvT!>>BYHno+ zx{Q<@oftP15Mt!!Dw%s@5M@?d7s|ytSs9wy*xN}ktN6qH0LH=P?E)edf? zTP{yfzI_$5-2ai|`S6OKwYjf}==8|HfDS)?y z`%Vg0YNe#esw_t5g@(#~`n_xPSec^lv+^6GXxrGhIL&+!wc_$}m7jUVv3ZujPyY=< zLoPEoH#)GEqvm(qxGohSI%{yJ4hueRzjLAhSzcu2TM2jqZ^WA$QI0Bix1`u)l*OQ7zbyxC3Sm{C5ayPiT!E$d}gA#_FD& zoTNbQbJW>5OiH|D{NZC)y_%M7^w8fj_HV0}=ep@brcV$NQxVGYJuf2FoSvAx7wluB z^ot7Mi#4~H%Tpyaj-{t06N&+c@YiJGs zrsDYYx^8PNu0Z6QoJo0(Y9fk{9MLv2O&jZ5zpJfy?M`mSnwrn3AG)IS;_DsmYa+;l zgVOEu<@dX$Y3B?r*md&fuhOKPd{*)485$b8o*b%aMG9-3dA##2Xa2+=y$|_a%Sa{6eOr}nx^;{&TCvJa-DT)uaQ|nf{`5b# zXSMWehm>sLDM}{G$|g-nt3#z0{x8z=MrkKeB!PMkl`;OaMw zHPLN=Oj@f7)wnk;!y;SGGug5}lLnc+^HUu=MUK6^9wkT4C$8ehVmM-tu*t-vZUhJ(;jIglGJTdM6u3xNOZaJ3lDqVWz07~|w2^)lZl92nb zmdXpvoZ9!Bh-5;t9kf{MGEfW)&ds$18$_pOQb4wEv5=3(iGWNRVt@}c6X6}NLuTsrAQmww2{74WZ*I%_n5smW4H*=<<)XO1n_lQPMHp$ecn!<(ydKt@4$z=6 zS8dnwY@-pT`IV08fvzLar5KaLG^qD4IfmW5BJW$31KYX}; zcHwA18K|KX%}#aNrA?^!ak^?nirH+G0`J?9x_w~nE`D6`xFvvNMSv>YIXd!!zOF1MC#RT_)~~*OX=~A_j#83!84wOj zd~zhq?+KuLxn6`YroLQdcaE==_Q6xbrbw5y0&|cSCtrgR1N>1GCS*`yh4`Uwn9epx zR9j>I=ibEK{Y7bb%CFl)!Sn3hBYq)|AC*9-c9d1Gzir{P*4XQJ_UGV;ru|YTs?5gc zWb+i|ZO}xCwTbGm|5kKNG8z0)tiY+qJ|5XSj=f}@ah>1!o~refocGO(CT#lq<9VHS z<{ibN0hVsj7 z*&CI-qmT3^u+|Uo6`$1%e_b;DqkP}{K5nm*E2ZaN-YaeA?ROQ5MGiNZ(Tn)ZqosuP zzZqwP8_!=qE8E`tJg_wN{yQOqW#-MbPm*(7f_oD^ysoo9*yS>LsCaja3D)j&dE=7q zQl!@EaG$tR4YE5?3VgDtXo@OiyRGPT_ldr^A>74Lw*qde$j7kL)v6WgAA?b<1awS% z9YN+O#JQItNOcKdi)3A6*g=5CiY_u6q{l3AV!AGvgYSRP?;FhcOQMno0RBN$49`<_ zx=b|xAsW4WEMx~KWI5twJ2+1=^~IO2hxL7-xOqC2JB zpKQ;;CSudk@}B(}uxr%rB_ks<4~o=C+ikmk_UkNu{AN2)r#2~_y@TD<^Z=03Yuy2D zGzhxm4BeEc*DQt6YaG#_{r`s9JPd#;KtZkEqpAt|YZi`tU2$=LH$ZyG3kwUsn6n|J zPAa&HL(JRxvh+l=_Gl^Y3Husz)AM^a2hf6ObiMo%-!?HJ@IsKSN*Lb^>U<+MrmZ}+ zqPcPpLFg}>s-Y!G7LrrJR50dz5gJ z3tW>VOE%ql%h+nHBP6m45P+ecF@4`&W0&m`%JD%|hIgIBdLE}2v z)sCWygrPz)f)jYYyZe=hFzAu?c)`)TUl6|_i0L@LahiRJIBC2^Aqu_I+@f8xNnYI~ z<#imK*Fl+ryt+CgXuSoy1+NZxR}&V(J~y8QP66v-;menllZ@-dq}F*FWna9`j!Y)t z`f>zl8^KeFAef%!j;wlLyloUr^sh?j!$aiJ(Gd&0$wFMQj2mi)wjy*N1l$^(-?Ay+ z)Ydh-@;YM3vPqS8x@m|=M1QedsFLhn=r-NtW>2N)!;Q6fC;jEg#5Je#R5R!u>9<=u zjZ=e6JH}FZDzj4~8gEwmYHpDwy*o-hW(=E+E4sY3c%WIdaez>i&5gTB(6vb;R28lB zBREIZhB0~a(d)pu7ag6#7Q>c}a8x&Zd*V5e_K_`!;Czte7GctdYl+H{v&UsW9unDc zNDr^rQXO(0JDO+T9LZVnLE;_LDhc*c7|9sNR`>@K((if8tVD|**;JrJqls}JSF17@ z#pgPpscg1l?}E8JU6)ozVb%FG^@^Q^3NzC%i|7s9^GftB#z^MC0aUHeeXNtmMo09O zK_fF=jfT}v}`i92>K_mqM=@0~@q(LwU>F!SHZV*(YyBm~F zkp?MgIEN4rNkIt#k?#KXac1uKexCRJ&RR1%BTG2{bH(1j+Inb9W#683M~{@B6>rV) z*g|zp2C(t7dN3I~3YUYXy%+8^|EsuSk(`>vDBFw5uY|tJ@@cWNg0_pC6i2vd!QL* zP7F@CGzvi(w?v$mqr~8Xj^%v61k&`llUTx;1!EyFNhX(=C4Te#xmaHar^+^*Dt*IW z#R9bSAkga&kSXLN8E-9ib)lt|18R{_NJDob2~x|@Cb1O;$-C;LGs$jnWTbk3#={f6 z$$28A8j@WGYQ7P_&z!^~paL^5XO+q|a>&fvK8k5ItbgyQ<4X9_bg${%(?F&{zx@2? z+o*lwp3v+npC1 zlg=IrgD`_bJh3!y$|O!B{>hfnt4o7A?US8?iY@gF)5URZBTA!4@=Jm8^OK8$1-~>O zlc+<@ds@GyzgWbeY88);XUgMqdU*Y)op398$qZhJT;2yfDGW2m1U z0W6VEdE_GFZh2-5-9|Sc0Q5Gq{vp^~_2gG+5O`PW|9~BX$wD0T#W`2e(6oB4u&)7X zvj64{-#Zg}dDk8S9+=`Ze3O`+3V}p2pXCHLa=jJWq-HyEKRtA~;eju%#zKNZ=lP;y zo6{Qgnl}v-ANL^_DR(~3Z0~O?$!_O_Y1p|yu}5IyLh7`0;gi(#e2_xgqe4c_JUZS4 zd=QC@*m|8kNFfA*51j77GO6l9JeA<`st+-h=!tcD`+NXGo*wHVq^-xIp)k+SO0LNp zHkDBO8Am-aU6RDkH}WAh_Mu$Kg}_K1^h0VN(dz{!=VOKKXc+tiYLz~Q1vHPUt#Dc{ z=*q5ae~j2QhfNkl={xP;749_`ul_6BdIDbxWEOvAb1dx`j+M<0I83fhxo!Oj9O>k& zo)caC3$WLBjE90$SAXW+mBLjkQZKH+cfTp@Mxqz5?1vfnTAumGWsB!_xTz+-wFM4_PrzLi;#vEceNHF(r{g(DgKc} zzM0FA^(Tfyk3l^8D6ivT7qXieoh9#@;ymUFk_q8WKSeWMbO?l0EHeRYs>sKu;H|IO z7W4pl&+wJfERn5N_V;wf19^MMs1U5ekd0G*HFJV)!np4Re0foYIt@Y@QBhF_F+416 z?|uWm) z7A|IPxjamrf!fI!>j&nXv>662 ztl`3JeZ-2Yb%&hpVz2Xs5ZwO>oOU=Ky4Nl$6}DRFQj9|e>}2g8BsxN01q@JpzaWMw z0n`u9niVF!=}-&gXVL-R6j?2l%mtd0hKkqWr;F8%Ttg5@6o=%?(`{DB;EPUV1Bf** zxY7HakYaqfmeiyvF1VU*-}j}z&$h?N=Enyj7B5FnRO>6r=5Zw9ahb6JDe}{$2`Vic zU8o&%P(!LRPOFc=RS>7I8oDG}_?1SEDH$nEiulF0o%n6LBV5Rk-tYR{*4^M(YNG85 zJ4cOw`2$5VTqEKGemvjEAKNDH*h%1c*`0P?*=Ex7Jv041T~DcAHq+MpLIRI6Gbkq~ ztvzMz{WqUwM;x;2p8y^XZhkQu;V9&;{IlGv1GK8T+3F9dg zqBYU+R?r#R%)*uW2CO0Cf`WoeUSfhr2hv{WH)yxq%6Xyf%iwpqizXi^1>wp1Up<24 z&Qm1TuWDp%?)2DXjkj1(f24BocCdsG(d=!|(d;K4DF$xO3Bm58bG~}U?y1}r!K~Qf zMb`!{S#68*r9R%|u3m)?za6!^1MepWEgPbWUxq1k-yBgfzj5DPqLaq$w^!hbm@uG1 zQ9wb<{4iFLJDyO+q=0+P@nwahOs(xVPTgWi_UfPD3uW=W%IsH0(w*6Zp>YmEmBQX)%b3-`Y&tKAu(qB1Ftb7->w& z>8%YXmx+V77#myo{o;AOM)x6^0HdwzCN4T8+o=5H1m@8m%9l&7+8$UdkdC1)Y_brU z)yYAf4}ok`p~f;tKBITG+|*z`;ljNfU0i-XzOY8hN68`Hd83vmq4W2gI=A8|I}Hk! zU4u_P!o)mEK{~ycr}ED6PN|QD)@SkY@e@GXfLRKBkVXk`1dlUBNZ~we3KO}UmG$&@ zruA1Oq)x}({|70}$bS2l>c+(J;bBhZX?a!E8zGNa9v0^89?N^%F|RD`A zC9^IvwwG~+rFKD;BBsV$@4A*!*m%`Yk4^vZ1Cr|J;&x9hZe3JZX|1LWX)3V4k=kb9?U5U^v_%I=Fa>(N#vL262u~mzvzI zZAv-Z?Rj&5y`R?SBJ$^Y|6ys|Avb;JhnM}WNRIx5mPjLHvo9VIUU$zJ$AI zR{%boi~m@t`Zcd*mO!%if>0R?yD6;9cRa%4spqHs3c;YD?O3cR1oM~)8AGH)PgEha z-3TOS$HCby+tD_08)&NgDY3fE=-5_Rii;sO=-x<~U8l_ha+WB=F%(Ait;tLMe#9%r zZYC22?s=hY;$WQwG8h@QQ=Q|kmvP4ftE0W0_NdMOh7?sTcSrp=1lr zS4xYfh0)*zC&qP=MMKp$PVOn0 zpF`I+jUA?u+GO(OPw?m{^v`te>Jy&C`<;9agFX^3`HU+!@-fma1>2IXbn5~F;x~B2OP_&%YqE_jrSPdSX)~=3b98g zB^AUNqHA7LgCjRr)wx%45`*~2%4Fi_-nPGo#zvst`Ih8Y!R#vJ!=Ebj5*ZyaqxM&> zTrsWV{|VNc1WqdGonl2lJJDjx2?oX5GHto_9#{&%ckv!A)Fj!RvluPn5I+5ITSqrt z;mhwGoX5Gtom-YoeTg^;t@lWJzTLLRkLDDhRrrVQZwMw&zP-`@JWKafewt%xmN3!f3;q{*$ucoz1P+8=s|0R=>7HK6(B* zTfRFnegz<3lN6CHAHFeU_GLu8{WXAgenHFMhk{NRWK$NvQ_V)-qkvLu8cjh7U)QMi zWU9%lwz|Y~6>JcP;G-=uRoDT5aB!=;di%r|)!@6XPg^KMR*xvj?l{o2)mZNmSak)? z(A$kN4sYJ!83#A9 zsF^k+^oiGzrHDw&M9*`r(*2uTympM|MCqGGL&4n-C32Nyi6YYzx$-Z|Hi~Ek9h74j zrIORvXx_kmC<@i7v-_o9%7?w!DmmbJ7??X#_}@hroxFID8j6Fc6p_qut$*rZFI)%( zSh8F|k5ondeUY`8Ad5s7NFTUu7MF+=5$^STUQ0%Dcff)|liuz8^eEzB{hM;=l|!Nm z(r~`kc4_K|5_1N9_9S6McLB46;}GZ?gVV$F0_AQ3F~thGNLq%$EcL0Mnt2v**?dJ@ zKDi=C&3Ttdk7DtGzXQFKG6C0iQN)XL2FFt3>Dqbb&#N~NEjA2GF6JrS)tCZX0RmMt zFRGgdJY=i?r|!55-(Q_+WFOpj|B7>ULc<%X{0WdXr(xS0FEClwWIlKv5qnC##$48j z55?-mawBUt)EgYIxrnyWYv%Tu9HtmG)46M>c7KgBi=&AH#wX3-VVaKOwR=zERZT~J zMt9@gmCqn+w*T=&g2Q*qs54{*g4rqf0kW5&Klj>Q#$%p>tm_FL8k#4%S)v$CItg`W z1gcKRRVP~JNn5ZD{nE{`V`_H~);su;)soY})=dvHyX!cXFL*8e)<6OU_c!?pxuH~*?wtnc0 z)P!zpc+j#K?ZBCP=nI|t*?~u_iaf-B)L1m05hlh{7We{!G0sra~+tG3Iw1tR5CNmbKhth+gfi(H?Y-nE+b{RQhmv)rO!1*Xu{`k ziUddd>QA39f=w;1ds2Mm=d0FBcQ(6yXc#e*0A#;UHQpVz9@cdG%qTQp8tr8 z_b>!H!n-}|tte-dJie}mZ7sy4O!ZH9fpChtyC`X9W~LV|=N@M-Wo6|sVvZ+zmj%X< zkH(5rnN2~9p8R#K)l`x*E|sXS-{#>6xamw9($E(d>rwu=tYyyo#gGVqQQ>7j1Bg;5 zf_1*`{OqK=hjpIMBY7DxXa6Pp#0gdjpP8o9ZDeo-a>dodgTibeEqU$iE2zhFp}RW5 zU%!7HNObg&B^Jru0Wo3R?mo-lc?Q=xceUu|s(SY@)pc}|c2j@FEqC?aAu6U%|6Cl< zv#`sH?y{r#8CIUR62yqcMf^kLEfqiqDnJr*hJsEX3JE!*w0-^Qf@52)_Qj3UKOmk< zr?Z#N%R^J#gTEb!+HsJRFbEirqhuvNL0em03|oH~9+@l-2)XVRr}ZEOq$0hJ+TgAK zsWNb4YtjI)5eSY|#n|SIsW|RO2~rk~V^xhidTZ!3d&TtTwhc%1msfUnc94k#%BZXB zH@Lp>Qh8qFs&u2oepweVg+<%16*uB^p8BK0trzrS`L_qZZ3D~UVnCdT$?i}xa|+qC z^QP`PjX&={T8W8?v3wm=0bwEX&i?*wcmF5joKcCA+knon-2xaUTY#6kAV5k?x89L{ zr1>MfYk+Y<`&vJI4mR&v2S>+Y$Z?}X@j8hP!X)eQ)Ke&qpm5X@G{rou#<_{zP2NBJ zwmpx!K|j{svlz6rG6Q1C-<=-?<5@J7#!$$SCJ9407B%w3!Ocw`Z*}Jh`6*)%d^+SN zxl5lueR>80QN?$|RTefVrKqABd{C%~^FC;fNEp3gaLYkFdn?L3C3HSMo1Bd7qj~k@ zIlLMkt9)VsTyqih*un%&gd6HE0}0~+-Ps1u@N{$B?F5+ho-cv$_Wk@l{ON1|*( z;o>8jjZ4cNN16AjvRMAzyaN!{g@vQ{wG0$MnwKkJp~~XxzE2d4yEF=rpg58>--BXl z+kZkAjiW5l*L&RaxtnA=unaRV>{0w;tZ3rAqk!`=ZmrLmCkhiS7qGoVh24df_|D#t z6V>j(YuR6^+^93|o^swBB$3!NPzReX(8fzGTC)>xdlMG6Ns-Ya4vCqAyU!BK$~JId zLI5oc)3kk65QR7Ofgba(t@C$8t6AI}93I+OYF{m@^E>NWU%h&@1p3&xph1_7lM^V7;Ne;zYIYKD!yTJt|F9>67^yu^KhXrRnyLSod@FTE7e-1+dDg{ z=m?x|B_$=32&rs%x}lxyW$t2w-vBze7>AOp2Bl8K@8*#RHclg&=x3Ng7k+$+ZYDn^ zIVtJ%?&QU_t5?Y`;|(bruoLsFUIVq?KTkL7$r}6>L_o1P2Sr4vMUo5dXJlt*@{PP1a(Lmz-9sk=3g-W@* zV89A4L?JbN3J59EYj60X=iZL3s=|{5KoIp}%4%$Cl3sNdP;*X?=3G-r8EB&Lho)e zrqNLnymzmc3F54x+sS^~|FQ>wVr0I#xv#(f+f6h-)ZK{bALX8zVrXi*hdgW5&ALOK zkvfoNb5bI>HT@oGquc51(OJAffNJTs>3Hs5s(l|guZht>@~X$H+#T=e_zuH z^Fw60G5jAH7<|_oQrX?xyN?b6iM#uWjh*Mw3_*QXZ->7I1692QyxuzA2 zPmlIG2$Ni2Umv|muM86lE9@$s;-v&nQ1F!gXU%$zBgPYhZwYob~&kuc8?8a+%h>2{7{jAj24aV3c?D==m zXx2MFA;+$41i2I`WlujH^P0l(HJ%D+iTB70(|GS(sfPV@O`O}_eZ!%I;J|5X+GTt~ zGuyF$+kNS5OrhM;;`0teO|4ay!(|WyjF@w!cY1}%rCm&beCNr{KU*BN;9!ra7mv0- z5>@$Bjw|xe#*u&^Gx&R++U9Ri?p{2&y~(AE(-2sGqosR-nRipj`f%s30sWSnG@hIp z85wd$nLkiR&+OaFra%vUz0Ib_qH-+=rO!nX;>~Uw6oVs5&6SmvJGa8`V-h>06|A4> z`TDhf9tY>gw=CkWcoPGcjR<4&12bBz%<-G|dhgXa&1Z1hw1?@N-$yAxcBTa!ro{|WDEAdaA{g-65EaT3x?YMiL zrwS?W2j=GTi_5J9SHw%bb+@?v#a4&hue&+;N2V*}6mSYt)?Y^R+j_V9ZSh+ohmWhB zX@;AKyKH?6sc<~*?bM(Nf@Z(cCT{T;GdI4WRjEB`;xw1J=66V8$x8YFRG<&G&gbqo zQ+hyw(TVvt>mwSs(b1apOmp)pEan(RjJdpPbiC<}{!i6uDpZiBdpe$EBu{6?jFmr^ zhe@RsDCF8X6^<;{bVl|r*(^+}5`U@Z1_#NUMZE{_<*9v2F>o7f3H9l>Tp>>xZSQ_4 z_&SJU7HSq+(FZsx-%GS>2i5_}!$4g~;?#H~B!zkvCc%EOv9ZlC%|nt3p-*At`{35K zs8b*MkD?xZ*TudRehNK2*dRDGk(=Eus_mcpqBgleNA9DsFDS5Y9&t{quinM&Gl5=f z`)0nOvn8ulS}!?)+r(PEaax$Wd-|jFQ?hA-l0I#amhv@Bwogyr8t5c@Td2;B^sI}w zS9(%yVM0G0HfnG4yM*2K(`B6&Z*?T^D)dJ|ezOX-SniHU-r>Ei9 z#7Q4`tAc@#p3wSW_kb1w44;MRjuZ;k{g)gT6=+PtGAVvu&SWr9$ zC|L;@O2{GejftK8Lyy`+>Z~^AYNbL&3<))RE-^`Fs(X_D3ntu3O1n~2iK7lHl07yu zw)$pfciDM)@k+54iZ;{{ro@Rs1s{f1oH<4BDl5R>toZ8gOmP}i5Hm`tgOPl6_vp1+=5%GMQGsnrE0IOsX_E|^W(c!?xomh;XcaKEpX5l zEJMMS-dV1k&UaCX(u4m)kp8_@epCp&MNt~p6uLg;V9g>7HCw+->)cH4G^I$)5Vc$; zlDe*LYs?wNJoV)fYkS=_$q>27p`Dg?;R}KfmF42Ia%JB^-kB?Zab{0dbN=Gi()$@v z6>Bo@BDIbW?`;&bjV5+IvWy8f_m0>29Oqcp#kxN=R0sw%eZwC8hBT>fDHwNe zKNF}HZUX=+mARoOLuOWTjDh}IF1XvsU(bjiXL8={vb67{|IV0Q>(@z4?r+Gs7cfL2 zf$bU%BDt`zu;jbO=PR~idMITLM1b$lb+q^cMO_Y%V);aWEl6Zg9hIj3N9SI^?v*~m z7%@?>Tj%D;UI0<4E0w@fC@m?eNG{?tO(QIJ&IPGI*KdSg6e)*TnBC#Et%Bip z9B%gZ?9R}+)_`7V%VK1#MAO&{vgwLzXFQqBplEl6(OEo&(8z3~w0NpnqQSe;hZ#a1 z!`7f|a)rcy4mRbyuyu%Uj_{q{gOJhcYHrjBNU4(Ak8sLh_@Uhl;pF9&*B^j^T`WMn zsi%JatWXKu+Un{kwT%&krv9x9C{7#)`+O376%kDBkpx~^^5RE{yR{kM@{WYa2y`xQ;VhAv!vv1s^agnx9_tn z$uk0=G%=X9^I1L^S~VY5id_?`FLkq(N^t4?UalK=KJW7`iEH-`3y*CZ+$FCvM7H?d z*vs_v0A>0VAP|vR~}4 zlTn9O%=%qXrDFDc8)HlQ-}f7;FzZ$9!C-U8uG%`R(9iRGVv__)t)jxBiREIMrzcfs z&2gJ+|9t=}8}B1)@5?@?tGL1`4VZ$>DQ{07=HfZEi1l<9FV7azhY0c;jjTVdqi|)D zrc!S%3rnfhTFKrX)^j^HK@3@ZR@Bg^ZRe}NcB~Z{Mr4v@F|TC zTk2sROE*DLXSkfm48jA-^6&FLD?4GyEoiMvtoK^K%?(5xE^cH8g`KhO5T-`Gkxx8* z`zAOaYdIh&iSN{v@vnR~ePgP`Wol4e6TQl4KzX(@1lnIPW3#q1_oJH3oB6 zs4Fz$^63Jj9w2qYMg?dx)ny>^W1g

xIkx&;yFMh7GB@V(RC`S0r(b73jTIpNRvbG#n^nW0g_RNH(r_+`vw+yN z?6Rz@DEf_FnJ_x6g^71(HoGr%bTG`F+@s7gTA4%C9WI!ZOx6f0Q>o|k8XUc$25H(`EZ(uNZIl;i zdGaDoM`+k+nXL>jW;(R*D>I)qFRTWOpLOL9I?=M|VEm}DC=e?~D;yn~@u}trTK-`P z66q%}{0cmQ4tI8SP+5X#=;+!#3RWP+ir2rx1uoHYXlRq)Z@>aF(J={?kMqCP38_c_=JM-KHd3F_q=&M0g#6uw)e$bnZ$R@G3E;@Xj>hG5Y z!$XdjBRR8bQO?u{Lq9pSHrdo>z(}-7J`?VU_6%l(soH@!Et8RX6;V{jZS_@!X#?%* zRSi!M5BlCkyhZKYE5t@K`*Dr}qvT?(J7HL8Tl?=TyJlbwsqU&V#e zjm!E+czx#C%Z6IoA4+|f1bN6Goz$i@;+qZr1bV!o8IK!lmezq#uPO`(r zFYl0e@%}s0m64R9b*cCXF3EcWEE8}glVf+pPq~fE-kFc-5fzlybf%j5yWQC>=HN;qBh0|YEd$P+{znU~jz z4EFpwJ+Gj7DEN&|J`d&16)HkUWr_-eb*Z1MmCx|qIUqO0(R^lDE zp(~~L*@Qree*KMmk^*0BHOS+w;*|56Mwe7geYa~faSYG4XAPGO!WAuTPdCU^*SreF){8HrEPBYcF;9P+F8 znHM51D%hHnw_uP~ir-|orNPgTcgx&$_xDeK1yUxQMGP-ae?DlJTi$I+e00qZ5F?DO z$#59Zm4bxmo%Y9~Y;-V~oGsYtX<9KqoRwX%&PV(}Cq2b6 z6$@M}OvVb-)gs3Buii;|DiyJ`gI(8qpXY1c3pS<~?q8-y`CL{=#m~!VNj+8Dw>~2w zecj=Bw?HHJ87-N$Q%i?^+u3GGc&=&Q7ALXSj_p;;ru1su>GU8*;FZMnM7#6M>VB7$ zI;KekcqWFC2UQCm{K)?n$g$d>A176BJnL~~V87;VH$X-qq}&?rB?SZhREg4@8-=;OkJ| zZuM9^jG>qQxq{zh)HDi_7WI0{=O|Y9&6}(7jcJXgr8YGO41SHENH#ElGr5~g*n3>b z$IcGOU78>Y+rV+TF*tup9-p5)wr=@@zq%}cejNT}0MT{X_<3XEyt5{~x-0)y(b}tr z&zpO>-rL5eXm$}YFNUp1i}Y{}^p3J3y<_t9RL#GJBe>+$s$azIef?S%V&_AVX`!>j zQym|H$+A_!J%F2;zU?xFExP*zf7Y~lWOZ*ODzZa3r*?cJ4qX6nO9a|~wF{3kdW3W$ zqJoy|jUUAXafSqk23G1?*6k1Xv;P)$C3`w+8LGDTq9VOz{0y^lXwH=t+m)ZSR*YO8 zbR@y@iRW)se#oZQ)>YER#3*kFDNUTRej7;C1 zNd_oacG1XgVEAvGS>}UdQc627N%~l*Ld#aXx>#Ll5_OiQ252pqd2g^T9}e9nu3h%> ze&G6+a{xGdGC{(S6hdTc7vgdxvRKI@_aW`qGNVExsg@aop4~%=1#p2?frDeWv-oXe z>?i~Hj@ejr4zFab+tI4*25<0|M4Y7celM_wndSY6M7FZV`W0sZmvMG%XQl6e=Q019!0vi7ZYUGB2U6N!;%d5h(Bb0}OdKV;ooN(y1KcP5>t_=EP`d9FD4m9Gfm8ADB| z5=6|z9H#Bzt`!?iKibkYBi~MT*T=Yww;1$)Adb23@BM^0VBRV*20Z($%a%Lq?e;Do z{8D4D@SM5e9vIDSwty|)Vja>;hTE`GJA^8-*6OWz%RRL%FV(($u=Ha^5gY2-w?=Hwa#E{j5%l#Y*EVT6;rg7>+1jWW$*$U+`;6-PgVzG)ME51$F6I6I z(~DLh1Au0bWd0+>N}hm_m>zT+Vyt@FP0sB;gMaZrGvMI4)6Z*6KtP}hC4B{}`unu^K!SV7&4WPpt`Dl;1-SXc z2DBknSeMx#MDa)K(e}rgf7wYGf<^OVy57kQWqpQRH_tk6>;I>3Bkl%#kE2!E=L-ay z7V6GtkYoDfk?3IG8Rpn*@ENH`Jr+*6o$?rXK=pE!9-fz7Ua805$o1T!u(_Od(!oPr zR)xzjxs#>K(A?tOs!Y>D8+b*Sq=WA4J%% zqBUL0+pQ6n|r%A>LC;Okv&dncez3++Iuv)ujnBQjwJqF2w^-l;cyG3`6rd?=$+ zL&03TF77CWN$Req$~0q^pImcyl55y#-%UG?stjwu=VHR%d%GV8EMl0DPS_4oD)6%U zOYALf98#dv9Ctr|+-*d~NtmPa20xd4PsC zd#j)KPPxYpo82t)vz zorIA50RR!kY+t_>LNdiii1z4CPB}l|>cy>Sq;zvTxK%EUhPx=IHh!a%06#PHN7l+3 zWUEMFzYfYkHwG-+3?u~9Lop+fB1pRLa1{!LwKYA-&3e?Ym` z%=C2gC`e}BQjI0mVtjI#tWtP6er*i|tZxWbTL!q+TRo7s+*)fhf2Qr-`BEQ0Y|51- z;gyT*86CoAzKb=$^&VQfl{2FY8H_8)h;8vSgN{Lwjjk-QRXoD@rPoO)UU8CW?nGwl z<;$1RMp1^-m)k%W#_sg9Z!>HjjK1;oRM0(rqZ{&HtYINh0RN?V)o;g?e88TL|Hu-! zn&6R@S0MS``(B)Lpne5r^?!-C(J33aATqH5C&CJPDwKL#4pI%~zLx3R0r2!dtvfdm z{{-j#+|DL(MwGiqIu7c-!S85pHEU|zy@F@D`tFrZ#-rTlkG+$bqgvi9?8^^6dHn4h zCgI4RwFJSDF0Dn&g0xv1Z z56==bFpJlfw4`?#0b}PVC7geUtLRG@8IgoPDvxB*W+cke@glVgx|B5S#IRU!?;)*Swf)Z&60;hJTcibYNq? z@`nee@H>oHh0SSl?FGs&8*SsSLn0nGV)UeF3=>nut57B^&ys+n3}K$7)LTMKES}SC z#)WX&!M!Nly=xYnFJ-x&_My5u9=$uJvnHRQlwuIC*4Hxy6Z&I#Uvc^!5l$wPqYQt( z6=o$qnDX|`(`?6`1eGM6zNBTMCGOK;v3WM=Jjs<;)X7u(pf-P27-|| zC9VAibEO#Jhfy1@xyW(fvn)RwWW7Emf?7~Mps7i{0h^5`iw1^O>x1|7#?F#&WcVFl z<%k{l3e>CV8C+toABplKl&IC!&;g9*=HTV6RY@kkKmCxrPbif?)sHbVecTu4U2C~3 znqR9dnx3qT%x-UQuRu9W23HhH)K?O!J5w)MG*}-^n-W=UnfFDmiF7qn**5B4zLRzxC$RtT<~EDSI}VJTvj2?oeBac>FRqLBykx`1j^v`U7?vN$(EIsrG;`smQ|6kKpzNYY~=Aun1d&t{}i}V{vhHX&lmdNZ(wPM|s)zy<=I5%%C(3Z=S-z&TN z=RsxBNS*(+=6hji$Ox4Ei}uLkT%NE=_HZv*lp0=ZcYpcNszGvA}k)#*BS= z>I1C*d^7ls3SE$s$P80Ff&e5C+(8-nUp^O0T^N8PVh2FNIihe0h(_ZgV@P($XOAZ28pxlY*0Q z4=6Uq0v1>Igdf+an+X!}bpL|Ck#RQY3S+mZI>k}P;Gi8V{GY#H6w!Q3rd$sm5Cj$( zJPW%-V@L8RZZ^g!oSpRT?Ikkhj<*9K1dWP`X;Wau8+v*bUhwgBK$ED5N7c;O6_Smw zzBy-aXlMhg=9FGoyOZNN0hGWf&4t6ZDB(YC%-^d@2p$(ZM8_aQas`x~o_4I9ZE-xu z?tmpOPSC^r7qhwn_x9zIU5yS``g2th>T`k@Xx&U`9{y$SL-fIN47CsIZ^FZI1P(?3 zIcV{Z;0I-az~nDgJ89-yw&&sFJ0#r>ZZ%*hKsKT@4O!iEe+wG^y;xB1n!*U=q+M`7 zlYkp$7X)R!)t(u;3=tgUx4M%Mp*2-Wonp>BSq})?EpZ>xIGigdXnzf6m2>`KbojB= zAPmk;t~?8i#*ri*o$`Gm}U{q z-h=A{CHYtB=|PHwlBXf&LJi%9sv|&c6ySX~L0gjxG;*jP1$dpGf9`t5%v>|OB$VEZ zsR)i114bbFSb_(<10-5b!O?0WnbbV3;#KHFYa2FQdM7 z>5Nu`AUt#mreM7rTZ@}%hf0U(EiJw`7almw(sx$0cUH*5ZrBU|-in7hp+ZmbqWKE` zQzH=?7PdZ1j*ffWYcc#>b3xwC^9?bB8GTIn| zP+Y+66%1Eq(aEUHyx48lf%s(Puev$!WGM=_%R{uB930Vvj*Hkia=Q$nHcXGL<+t+k z^0wf1b4(rafAfZTu?F?D6QDj~5y|ZQKgvl@IqTB2_w{jwHO0^|yn`b8Bg-4zCQoi2 zc+>RxY#wvp+tR;(|1RhrV)9vi`r_6CTe!wgJ-7~rZan?1jCC8m(sTpW;weTakVdGy zOKZYJw-cXRy@Kbc|JOEGEnjP?jP%1L*5zlJVKnu?%%kedrb+U{n!)oKueM??Qa^Z-E2a8qFrqM6Gp4wBl^jZkVhCkfy2EYh3`!9pPY5gRos-VE zG?)|_8JRuqa4c6gW`~7|Iq83@s>$L;0$X+2pL!rvG{ksH2Bm~0G_)|3oG2P)IxP#h z_EF^vjCi^xDe0M$L;QB^&L6|&IsY{W z3}kcn8tdvymVPuSr{vi94eVsap;s_!K&H>)22`illP56XM=pCvXphZv&L99(`Z+n~ z%%N-v@nYKQVHBjdZdF}6l3@{4Yjo4Q1na$tz2nkv6pEKc!&WVY5{{dBsuX1#GX zeW{c$eRDwybcK<$_syAW8R}p3D!iZWTClgIN;HH#r>v}HA4c_k#D_>9XlM}VKH;R? zhpqBQcj@RLCD`P;dJT}V=S2t@aucs6e}t~H8BL;&M)Ic zTCU7%)vo7M*-SdO%||76lkz*_uj~8lMfc!-_zmovzqrG%ynl58r}iiNvNGucq-;%J zNH-cET!#(xsN9JDQJi`Or){P%Wf0qk8AeQ#&RM96vvv60ZaGWd!@!Pq+xYtN#ffYE zhYuf;z!TAN>v3bPP%LcdN8(xLSz>N-&c2|wtnF5QJ8C(5TVHPw=tBLc!W_g{W=6@i zs50$Z0;==UD^rK*IO3=iF{BD;d`|Xc0TyhbR8p!Na=j6TI-d9zQ|gmEcbOLuJjVX0 z+$$zeitFNzfiW2=fA5)X_=KEc0;%&qJ(Isc)JdI*LA83>D|h_++RXvoLoL4QUrMKl z+XEvdeE59Nu@)9@&3ISdMkJP9M`WlKe@jS96FLOmT>Wu!Qfev~P23bz`jU4@ASl(J zkeMg@ZDp-Pz1l?Oz+Hz&KXQnL7+f`MgIXkZL602MdAsE~KH|kB1pZnEck>QF`RwcC zZ=VSY&s+U?sB`5N{k~1W>;>NZ->1yo2hpgF#a5h%K-6&tF;~`MEeyv#D{V`g%v0+U z%llW%2Kswc74x4ilFz~I`<6gsB+-}ezoVf>5Wf*=Bh_4tuui$uCucTG+NjzuDE z>@cfj7czR0ZOdCcuPFeU|AOThYDtnh*0nD%1nCAcC+uy$3J)+d;6ie zJe{Z@WVfBZy)r-Jp3M(SH|YFKq_0Xwq@`V>=C{>!qsPtBVlTtp*b{uAh@1H1i8eB2f*W-r@m3g`B&Mj+@#1B2Ah6j?$`H-9~XRfc5>T7iB zLzc(v_!=9lK)|zRG)ZSVlP>71_7Rjgx0}3L%EADGzT9x z5C&ooqH)%*PW}}>iLB|jS3Nb8XYvQ{NHtiF66FdMG`1iU2WbTaFuAQf=fAlH22GtO z278UqzZgHhB|i75B;4E#+8I{@8xeT<-m>?YU|n$c@F~mc8b@0IEDG_c|RGY{N$?1(KcoL$>CCF3%l>R zo6*URLQUt|ly66&a<}30=aFXpda8Pq2gOCf9&W~nxX4bc7qRX(_001;cIOn*i9Y^7 zyWc4Q;k3UqDDmhhBKzy(T^*=}?H{V_h9_=Th0@-?vF2bULi!NfXu*XHu$2$Bw{l zRCV>_*^R|K)o$6F-;0Pla=qh88@bIezXO#Ge~9{XYp@5PYUe_pb9`=1$g|r28x^_6t2epfA0gEiS8; zA;|A*ZH@Koiv>(gnNhf$0srtIJ`gi-FH3;`zNWTVe$Q1U2Rav&->_DS{F~wv48H-ljJ48D138XJGZ5@Aoj`4j-bf(NZytkX# z@7MO$K)-tWOl86NV8ZMNnuOQ^Qy|a@rFVD>0 z)m8O!oW;TmLBWRaP^K`q!*z^#1--dc1veqyZ=|OifL$i~o+NQK)_9YiTA5@=sg{yA zspX{av8W;0^)fIjifxfNUX32QnQby;Rq?$GIHF^c#iQ8!2M4nem+zMO2F`U#8xH62 z8%=SF`D4b%h166?Ig;}GW{b1ki+9S^YeLJCP9#FC%A&P9(bUEQzLVQh^J~m5y^zCL!EU)RK+CM-=V#|y}#^y@{C+rc^-Fbs8lUiFH?oS zGKR|YNkveqjPI%ncCmCzqrFWdE&)L-V@;C@3BsSHNlac;s0lK%sq9gJ=dyp>C%V5e z5In^pIxte+!3r=LLZXb6@Imt$)9a9^K!jA=(a!VDf(4A3s!wlKD)S@x z0OtO%Ji#^XoS%X?gId^o4$mMCBg4{ku+cNF#V<586~9Z?*w8RIC#PfAFnj1PX6Dsh z$c!;EqN#b6q%-!Tbu3{z;{hu#<8pygA@BX~Ouc)tKh*2bNyb(lgOyNzV{CPA^FZXa z>zcsx6bai*IP;YCkWgN?#=6J2yhw?Ona@1f*MA#)z}hsfCJoDG{G2)T|Ksbc!>ZWY zc(Fj~?hufW?hcVsK)R&6L%Kof29=ZsDQTorx~03jyK~>QjdRX-pZnbTLmvS*Gqcvb zv(~TPib7m|Hfm~<2hhqrY6CjTd<_l?Vn(~grpcj+EgDM|8|5Ja=*Cat>2S&Qm*0YJ ziN~X&q8`VeV^1eHfZ>L%rZ1J)`;6AF{nefLum9@T<0tA3#lvECNyxg#>=0H2I@{Zk z<>X{MDHM2l-7>=hANL&`Ed67pZjeq;Vs-cTU!oHzM2eRpGe8U!NDvln>X5D#*-tF zX$JgBgW@NiAMQUDgdq1NR5llCP7joC*Ggcmrg&ayJ!t|pj!@>Mf6e|(wV!ftP=d7eLZ@_ zs;Q}^Tg|pR@0K&fXJsl)cwmB<)21dLH{j*<87$kRo&5QEdbw}^)CHH9VBMU!e9Hm^ zb5gY}aAyoU|FfS28G7B7vgx49UifHVtH&PpEF5St!AB3k*2nZ5tJf@}vU1S9s$JiSu zr>ivbb}mmUy~xs=DZv&JBo<~pw0+Z?f8+({OZ}icx4ixW(GjEmP%q&#@3TW&0!(_Z z$!p(MfvP{d3V};T#$Vya;J!eQjp|=UoND$zV)!;NyS7dtSV=YRm-o{%GGq(X3QlZT z?5PVfyAraHdVhP+zj*S z<*5^w`-OGp)rpMYZlAp0*=xn3J-^haf*>5_0cdXEjDA#-%!L+dn&?j7GcGx`EQ3I1 z?5^Eeh+a__)|BdHwhf})WyYcSHSmfmZJxSf9CBNx$tT2r*my3Vpr#sP+4uTnE_ym~ z<_wt7lx)>8mqSxKD3kja&B{wd_<`{M-$QXD=+|aLNXy|96nfyRe6iQ;$2$0Z9fpgG zOAqX#iz}UerPU*M zkL{3YH|k+Sn8BGDLV!FCm~Ce$=CZtvAxOD``0G(Whe=NFQSw%(DLQ_U$ z3XO7p`a|6Z4}AuEXsE%2L?xxmTc+WHlyEXyD_Ck@Tk_kn={V{L5ih@{U|6GVNsjnme(H%XI{!@dKrTzlg^=GB2GHT%rF55bhwCZ4@4(&! zgosfq`5)V99xE8^BuT8_aWicIUM@&iSNHYDj~|}{NEEhYPE32g*~!!~V-T12PAn*$ zp9;1=q~mB7!~|M-2W~Kf^-f+NkXwYw;>6MN$f9Mklw(4sKwi>ShoY5Rsypc!0$H2q zhkv1KFtUoza1s4~gDC6R?@T6-*uhdyA~#&UP(!pgu0-UCZrpB;Lj#?f}6KbQ`7zwqcvYhJnB$0quXJ3>ej}&+7)Y z0@n4X3@dJah?}4*@e`$QBeM5fE&)Z=cx49P9!_*$T-m{-8TD*ep0C1 zhY^Nf{v+d4ghO{!HDF%_vSdh#ED|iI8$Jkl_-FMivu9+b>h_hfx3#;brml*itkC{`|2JomlUKmxtO)SCQi(!*S!Tl5 zGO-etGy;{qtpe$}Gi$Bu@!c~siKIjB3+wBg(9O+1hoZqBW*}-)Q+Z*@I<@n-4<2L&C=vW z&#w2Kn!9pM_#2u*VA=V*)8^I4rDWZNIjjG*j|rt>iK z0Lietw;fx3H3ji`lr;IRZY3Kqpr^>!XZ+#2pHyD3z-f4v*SY5h|ZHNtN zj)a7?iJ`!?CzQ*)5XgganNLaHdHDq6Yu%62dMqa=rv!-Zj6-j37nWB~<~nur6zbM8-8(6QJ7q=c|2inuJ%77`19tq&J_ zwbrSlV+!p+b)t8B6%EJ+J|Mn_bM^crk4{LoKUd%Ya(8V(O=1R%&Y8sR1KUN=VJhQey>!{yOliYh97kWzkLuvC{tcE_!coMA~5Gg4{r0D zT@~gy$x9mcK=WQBLg?v!L^nBP!$rJ?av+MY0zG1X*Ck`(P6wy+A7FbO6%&}upfaup zo-brj?BT&)8v#&sQMBvG1r-7yVkzhvt7n6|<45i}IY55{4fYXRqmNp77+dp^`o{d|$;=H_tL`%_QTjWe|B+a<)K5`ZCx zBG9UOL$h$yY=0E!tjM1|TOmG@$=O(8WUkT|1LNm?aC++SFO81HWU34DGXh7!a`ZGl z(jps!Kd5ZLGD1RWFwcxWF0K>ageFs;`d2g^fD^j|*ZjfKkQ%ylfqw$cj3AsI`lC|g zJBCU}GlTzsEDx}?_pvliqy=G7ZKI3QdOi2h>b?H;Mj?ZomY0=j&`dFOQt>41#hFMz zFIEdzFU9cUmX<{d7T8&$)bPdwL*zbEugel@=8fHx^PF~G%b93T2LzIu-{gp5k{0`~ zGu5&HM2)%VF_b|Fgh#X4>zLMIdKRJu)ptN6A_wjC%vbIEGNsBjK_@iCdazb8B;5g# zf+b+KJ*RP@?|}meB7q+G!ptRh?^e(4i7D zi~{^NKv=(wt2wyR%XGv5e1)fdl zYEa7n#At^v)peaOCH8*-vjq6r0jez0D$r|G4+FaBK{e0)LH}PO1uT47R^G9?5RKNK zUv~g)R}mY2pM}j2qi07dbwIjNYr+Vv9umRI*c!QXQ#E=g z*Gn@$DWQ)%7K~LotChXTTpS7%CNCXob8EsuF#jkSY=z%Gib07~)s%=aBb=eyzIGQ;d zjg&lEq@hC_qh{q#0{1YkJ%ZAMuxGgkZz+E6mcfDZkt59nTye-P!GEo$eu*h5+SWEO z7mS0opzo!_+xNpjx&p)jCo{812rbF{Ug>Q;^ovVN!Rxy_@d{iHG!J*RwqX<$SW#C+ z2t$GX^63D8&9PqOD%mQ~uCkzmvqfC&mbFsD<)nuyHT@z$Tdvyp_(|?VtvOCUKKBU_ z(~SOmKY4N=ZQZjDcyCKL44=kQ6F`l=Se~vR?j&{4#B6mr^WKh&C_P!aw{A~NpX%){ zOKW@kLjBxrv<<*5Rj>N)?@ZSc0B3TJW-Wv3*;d%M(QnJ934;5y44gI!CGoeE#7#Imv&|G#_RAFj<9%2lgpnwqj0c~88 zF_`m56SQ#J859@{17stTgWMoxOzZKX%^_HNJdhLmHwppzS&E&L6BC^;te|=iaA>`Q zzTG4;j~@OT({5XAbP9h{vduYDXG7E$j1wTHK;Q$5;#ZJFp?k3vFcAQffc>!##p52(nhXMJRZJSQktvvv1m7_CDSnDBo7WY|1zZEsyjpg>qy zKW8K(+e=fXw?5ex#8vvHEZLZH84{BrwaMaKufKgV&2G7pVCpds(Ro9#H^V!7ne5K+ALzfB$rku~B4sw~)wY z`HI~T&-DC!eb0xfviQfAb?oAFbWgDpq%nTXYjQ~R;G8#@*U74-UXLP_kR6#gI`3=$ z@#26GwMxT%kU>>qx9-^5)|PJA!{O|;@feU-KEcE`OqBno>?n2y?Q zTwZsuNu?hpYX%Gk*!r{Qd2;1u?4kJl#EXlIxB~W(eDSdY{ZtrY%SDZjKvm4iWV^xz zFxlm?f`qqYU2{!n+WqR@62wZf1+H&0wH;ZFJd+IP7E)oPZVc%13oMvCn~hC|b|?%J z2X)^2WoD|TY;8>BvI-=y2)kIAD;NAIocDU8nIeBxDrg@5e9NwCM)R`{k!Fe zBDk<~@Ti)?oGm<0~cr%mN1W1)9d_1sAhPINt|TLj4xNg0BtD zx`V#wG3M=v+Ah~v|K24iQSb;3E(IEifMvUR$2IHE10S;ptE3J%{@*K0vBkA|-@1=Nz?ChOXd))B?r^zFR{LgSywuvl-v z(jR%rw;V(u{PSEVlwVl&*_lC~ORyw`LMUNk8Go`&$fn_|m%io>>M(VtYa&VxDNt}Q zWpD*%a(-p$wnXX21A<6LMSt&#TMV>8FMJL&vO6W+qpwdUPOqh(J$q)ro1$K_w0X-? zwY9MlI$)QpQo?6*RE6FRB$z^1e1%q4)LQ8eU$(Msg5viabk^Yz?96K=ygq--rlw61 znn2_NX%WDEUr~^dVM?x@$W7#Zalys+t?aZ&^Sbf0vb6Lin4i(X&3M(p>*D@4!*S|r zPoI;bDY69-Z2=6#75CTR|M?^56)JdJv|WnJfYhkcn=hOIvY?huC2#=m>qpU~EOc)j zP8I0_kJL|Q4dOdTftX?N0gyHaH8nRkQ&$S{QK48t1{b>)&SYeSLnrRS9$8#dk)`)a z#L$FQAIIu|nW$Q4!qAX-`v`E)1Xm{nar&J~rRCp+6%EXU1}5TgGn4Mx3^IE*ekM&z z5D*b%mLVe}cQPK@*f8Oq6oYVc$E*0^Y$k(u+V&dbYWtm5P9M zy5%#kedUqOK;D_V=YqGDw+Xyhb-O8nfh@x&=Cn!9DeV>Xg3r@5D)rh1N)*-!tucu3 z{LGZ{Xm8v0RQh*0bsn3I_1*}};i#x&I@r-?l>wy?V0y(oi@#R}RQplr>FJjyHR#@| zsj8{zb;6M}12{=0Jx+Z~KQt)ZKjX8)mGh-DAt8|vBg0=8)vrIzvm6a&>Z*NPJ zu+h-&;TVqtk8FMp$ce;KEYc$PAjT*U8rnjthG?}8_lTQ5cyK##lc^GQ2h4=P?}NTO z-H7aJ0~ltWz+1CFtGk>R5)#tQ?Yn|P>OFAmd5X~0+3!Qn>VIFzoj_~sk0wgan2`*~ zf%LW~BTPV)PZl6bK&jSqU8(={Bk|0m*ME}C82h$Mhh zZ3)q<(@;Tpcb(m#H~^qpvhJPfXvyeEi{n@=u}9~@2ZD~6hc+cSDvd%}mkr6R7#>&1 z@9XOyDAQ?^sfm|ajtj*bnHu^LL)^sa%<+P;7(WbU_AJayvR<5yTgLHP2g%D-7}3j= z^oqqDuiDQb)jm*B;k1~&!r*b-^2TPYY+ZKUufN0P%Ry<6APQ1ZFK>%y&3?y6jjG+J z?hB;eP5TpQJ2NFn92FH46{p6}C@7cG5i!L@o93GCfww7j&*bwlU|`#lFkAo&D&y)D zwPdaCtN!H6M|(33NH`^Tf>u{TJ9N1Rj_1kX!J0V5V`$ldT7m{yafmR&w9j{5ey%~1 zs}aeySU*HK>gZ5tPkZaruG+Z4i)o~L-h9w8?>6vlvge(REmR`(`&bqHpIy>Nib&c# z)|%?-=O0AswHSr<%xuWm-$J+4He>1R7%jGh4}wm(LiGq(0(YrI%St6oLN{Wkm7{QD z(o}%_?=W$t;x;4(D5!Jq*MmYUXEa-T?p+?ues^Vu^D`h>>1FYoET{QRM|h1ngTGy7h|yq>=0M3T+I(R1N7yl zdvN?_XWbSrOpZ*d`ZPbpyitcLpno4nDgTJ8F+q~H)T-f7SW*4i7oaBP7zA+x>BB+e zvUPFTq-v~(=`3>djCLX?T&)}isMDXdEX1BKJ*=PkX~4uxN;<8rt*}H7}>fFsuzdeW>)ws*u_%?rLPf&C;7NztR-?Zu69R7{R z53q8-M2IzNs4sVjarp`x_Jw-ZXGNcY*)|k7imaPBO` za!*vY@k=FFPnC5{AuN{W?^Gs{M_>G^AHkk({SlEvYhB$R=7(C+?^ms(l1a|@+ASZC zOiZ*uL_m-%DK35`o2!@wz%@&d+{(estQ$@4YN5x=k_AM4dn)jwK&=0@^II8EY1RNG z2N1YI#hZL6Kxl4C+xg4O@OK9P`ddyKT211ep8Rf0NCpB^l#MW-3I~Cb$E29AD(3`R zdl}Hu(nf#~M=LddIlYP0$=z@v*7vbOMJQ1~%I zW60E;S}5TKDPP{`s}w2*QsR35^R_g7aoKuXrO@jI{gLspHz`^b(uSevm3ULe#VmZ* zZDcza=2ZTtE+lp;bU*xPV+X!!kxSv7fs<&>S&_J+d6jP+{0_B_wu`*hxt-{rE8i;Peu31{Q2F7eU74*l2n)~F78EkX3vv_ zh{(fq(YuZZ2ct)iE;tu(zqu$1#X1%lyJ;s>KzvWty+j7ObQE(H@ji=7y&xjd{=M%4 zqcfO+(XsKLz3(J3X(P$w&rKqD0&G&reDS0ru4V?0On z!?Ojg3!UbGced|Zk0wJ7`WxX6H}jtlj2#Jui1kHX<|%(e#4*M}+!#a|x6 z_A4JSakBQ?X!a)x1~4{W;$w)1Vr(x2-;tm+Wq%iJ37(W3TL0L??XZXFU&jh_=I9uA z+{b4a|5;r6M+=?CDUuQ06*}1HwqNff|ImgzYl4WRqIdG+Zv+UC!=>#?7BCqvAtnlV zi9MkL`J3)6?)kRY6IH5poO&=bt;ejEz0X>yp6RS!vA^9jo=>~Qz3LJ-(WpdgNaP~o zg|JU*zy*(L(7>)n7M(bDd3rv`9OXA?~nwXz1DXQmCp&djmf)rqjD zcvN>It6;o;vbDWJdo_2h?nXArV#YmTU2Efri3=`V7Q$FgW_G`@Xm)w~=c-4uwkJC? zL@AzJ((z+gnJUBU35{mV-;} zAqseRrzp}MjNXdT0{eSN-6vu;xt&aTO zzmd7Zd;9n-198v}*m%u70&i>E!zFe^{1d$P(0HF(CvsWYCIsTA>eNRGZGAC~1WYdd;JGBhSe7yhEGfy%9(;VZz z@Fy%oJAFO9PsAX>gq|K1ha^S7{a`{j(^9MP^%YlGcBQHnUw8^n8ln@y4e~dRQ|bMy z2>kp|LF|=?gTQwq=LHF?o`$+%{BUPM9V1M`7p`A;y6rIDk*VU{aW2H6m%Tw)mIy~i zj<+JG-MTy8C#@SPHofA)+d2KVnA8C63iA7K1?jKAd$m7|CK6TP?Q|>f`^z*ez-&+$ z=)-C#I!^lZsZO4W;ifpNPt!XJYU+*r%1S5Gay892MdR8C$jAc6IW3?~jzTVIWAdUZZ{|ryrsTL>K5hVa@8XU>X!G~Mc2y$H*#-xb z9R%|{4nTgS`{O<5V7a+@+!yTR7M&8Cl8u>t%P2+#Y;Bn@K|EikE?g(?)2W|ZUh#dD zlatt9SqL?qc0+PIkriMD) zmb5(Y%4tOPUo4RX>trV@#@6GRf&86DoDbZ;EYdkvHXywMYwh5(Gf*opT4M;OW;C4Tr zd)uMu1@RURxF3BD`f!6><0Ym5?!@7P8i&TE%K5X5oZygR2)WF$x*ub9iwrc0=dd^iTJs%K}AEEi_i{Rn4YeuV`>_{)TRj3q9Aiypg zIg2FYLATl+B}w9R)7vF=JTg2YHzn)|NeAyh=a{Xl5oI+%{7^96P=8bWhNxn!LimL1 z%dYGA@JM^(J%|xL)p|KoCF;474BlDcVi5R{P~Jsd>a|b!Qqt1WU5;-n_vSoT9G?As zG}3qeNIqNt4nJ5(R1FOD;0oTE(`h%n#RDw>?~8>eo)QKy>h;EP1Ey@`C4!2TR`2jG z$=X5_Oep>-1w2pDRh_EkaTwb3$?MJc-*vd+3so05Y!g?`-p(bDEW+H)5Zd4L9Rh9*-E?iETJXey-1UR)UTIVjYUjJF=dv14|edPt{LkNCQ)%S5e_nJ;g=^?R}E z%(*Y#XQs0d8BkUk_bRck9K1MXDv3t&1nqhFIV^6`@;C~W?l-htBPwT&o}IOwA2+t) zAQ8u=$t_R?bMKtR$i3EFK^8emOXuUHlpHg=hm%y(7Pe_FQJji3Q zSvk08?|E#=7X&bzo!M&~Ktl!qM19FL{(q=~bf#)2Mnbr|O9J2<56Jk80X{hyo0V0e z?s{(QW-eS! z52vSkJ8nqaE#!x<-b951CgOD<#!sy!-(#ykc>O}FQ^xP$=-<)auMWpk8g=jLxSi$K z8GZHEPM%jeTw^C^HQd7K4lL;AtZsr>f3hWFqds8rrSb-}%Sl;hcO&Q-;CJsq4Gq-S z0$hQ*z*`xzM)>zmLZhRbnwqG9;Z^UKqk}B{W%smthCR6LQSl)m}#~BpeXd z`XBWF7ZaiL{~-W!7PQcm@{~HhjM9Qcc|)m7ccYl~MfVME_evuQh7gB3*VABUM65%{ z%4FxuXcboaJdI0ufFgDPbP)}xpJM2z7jDzYSv2u)R)UuGG#i@^7oM&*OqY2ef!lm( zdAel^C~fGIAadCR_F-R5)`0EyEtJ&+$N!zK-~B^pK!4D?XfR{F7JOUw<=4*wL?PA3 zjjvOTcjC~h>=*CXoNqi*SLX!{wlD$8jVrLUEY+jN1Tio3DB$O@cYYvfJx6VIj#gnY zo!M)yYZ~-TDG%r@{Cs>e(7QDo?3saD!Dq};OL#boQ5Q1r_Ks%d*|+hWT)O>Yi6Q~){R~)6xCYJ%E%Dib;A80V zk?emPV6e#PuEib?wdAn`@))1lCklE==RPCAT?kO1l3B?3s6Tjk%FxaClY!yFy<6mD zm-BIjqvNLJ*3hYC-CcWvM59(wORG%#!dM>xHL!uO?1lZ*9A38^C@w*dj8<|od|LT> zcn!#3TGE6epyA*uo12@svx|ADrrle=vx&i$IIhc(6PgMn0!~qYO_wYNluL|GvEeZI zE+u5<$<-Utue3G|qFFm!YhS(Fc>&SX1V7o3}_JHOnJjEGROpBVth2!H*s+f&!gtk=Ov}3!*TW> zJmE=VnABm~XgvxAR7L6yd9r-cg*yKbH~ zS2aTBe6sqqx@})_^)*6><)@~~A?k1d3jxst7)?zd;@2FCHa?o;a)u!;SWR6#DAZ{9 z$|v?(xvuY(@=&zy4BJ`^_A7~3QY6UmCpZy3?EIm$latfXd$}PB}CHJln<(;d%MJ0Q3?fVTxA-V6>APu&L;f6s>z z-AYW(Iw?}eY?fn$tl2W61|q)la=TU&M47f$(m;M2H8#dzH!%v_KTk%CR(4iG11@cr zQQ|nAD&&!>gfb}K**G>y_H8Z7wY9hZXm7`c)+RP1*}bvsq{1i-~S%*ryo zCkO@^K6pi4Y^F3+sNC%N(y7_U{UViWcTEiu_aL>l!oa3sJ(o1l&&9vG+U1vz540(3 zg`xiSprT8-+&Y*ReJVn z*Lm&o0s%aR; z3#gL^O+ce|^^CH$m>9qzc8ye5Rjr*uU+lj*1uJ(ALeNk8lPNJ?dUOxJ`$g&oaw?Ey zcdyFZEp4u5lzsT%xw#BXTfoxvdZbVjC*q|53flQznnBml=JL;E?ywHIde=9;0rN^V zY@ky>s<-G(-~IpO_$6#usmOZN*c|C7&$ z8DP~Ul&@Zk5Afq0#h?P!LE(6qGr_z`sE^uaF?Vr&zD=38Wu*b( zhXUbZh$M*77yG+={D(RH!qH}&|0imgSNqm6WEK5#2Oyqc6~0{oNSw zW5#^Ja~@Y2!`s$+071Xl>e-}LsGy4}xIhL?p_(%#A$|d0IKAHHCeuDBMZ#wTy=GTy z*eynI1@qN?x-dG(XlT&?Am`4CK&B)N7*J-@C9Zs}a>7}+ljg7e4L^X9I90OC%}<@z z&CQVLWq%TQ0TeCyoL}p9MlPm$x0$f{2e*S)zo;+b^4ShI?02IA#g{cFH#1cp7>j6& ze;^jHvTN>xCg*IQHiEntL-=0}(z5{%>Y;P>Z1|Ktb! zD-i6pi~@J_FZAK>FL@3c$9RFxNyO>b(kJH+(dtn__=Ep*1?&vHHkMb?(n3N{S*uy% z^2P~l_OrO&8-8ow<>D(54)6xzbmEi!c`Q+(iFzh?W@~Imk{LLR@+VrBXYg5}SBiYv zS&t(gi+}%FFp%$wL6>+I%>o(Im&DsGN3s`(fpeWCW6ruj8avz?%Jo z-0wg@*raO7V|B;{7H`A#lTrR}e^!*>Rg%nKuC@!Zp+1Q+0tw#V9=(BqLqLbze{_0E z^mWusUx{Xv(nfZ*4wuM`4c|IQ7XyR=SXo&yP|)M!uznOO^%4?s z(b3cMCh?s3P^hV%@g{+i`muqm0<5hA5C5l6CtMW>#U;$*vtuYlk+pW~cZAuag_;PU zkvhTNo*}#l#lp>i^$2Prj}z$LfCmH6sNPE>Vn8J@yR1B{;;Pm;iA1|_-f}+KpM+zl zQE3Ym)lOf|D|)W0vDst2rZ?9ux-pka3){$x8Zu5N96`FjbnY-sI(HoH0{j2OyJnXLVhF;qan_J=+Np;=f+(zpah_Q5Y7Dq{dW0=FDY_HDbKHI({+msPUBTna8R2e6Z7Vm^=(6Nvc{ZU$puJ>J7khxWYi!<(^P7Q zCV7wXPmy!2aET!k`Y#n)b=TcB-Gib=!?0n)*4oVlxHM7pC=iT$5>LE|70k|yg zc_c^-7R-;?2F7~W8X77Xj2OQ7a2?`W^d zvK=@>_bxq(D94+DK|mY*w7=G~%I#s;i&1-{0&Aj~r1?>MXpfhMl5+SWC(b0(!NwK} z5&S-|`2MdY8+5Q;DgP{@M1#<+obiE|9UqLEGup^$Zb2Egk&%gNwot{fMuX=gyI987 zk-^Wh-_4N9_U4GUJtqVAl4{azMNudW5~32LmUp*Jx2ShX8@&b_45#Ua>FMcGhc{Wm zYB7joOecETP7gAg4(6F%UFI328MpwKG_Ga(S>Uc1(m3FJ^`ol^5NCf5#e+ZY4QQ^@ zpMxI*a@F?lSOrL(qdCwQrb*%eZFuL zjc{SL2XB}hksTf&{>Z6rHZ9~x!^v#+-tbzV$o5*%kI6wipZQI|kHrUkYLiTVxmn8P zvWMw8bB8fTuTk*OXn0Tm<|L>J%MqbXGem!uar>~5vxZh^$}BpMY-di>SBnQl#TbVU zqRTFw%gwiGOQH|K-CbOxJoFKnBmInwD`f9mFKaaq~>iWn4tb7FXr z+`*ae74iPPI5aFi=rVB7WaR&T6@s@UE67)j<2~oSxx2mxZDbB4q!0O%+q8Sz{ssR~ z`nSplimq$B%laDc@*iq&GHS*WyAxmEy|REDtGEj|!2<5>fsgBHK$A}EC-$Cq%V%$# zt5jZ&pK0nCo5y;RgtU5uCUM*gQDFo|Tb3_l)^vN>Su6#hRxhr^qt*?sTZ(kF{{jq) zjkS09%LH%FfTUfO&5}Xj+7+MYd_UX>37__ZhReJdd9m(xglg3m0oN2S&GtyCDZ)RG zqg>OoaCX;!t;GNI{X5&eMffSraBywn=fdq!7DawF}P+4K50jtG@4{yu1M5n)??N!*q1v~VJ!b&nbj zWCWe12B2%}*<2op0;}4B+#4Xqyt$27=o)nN7UyPf%cxW69> zbn{ivQVPg68L$TYlV{D30hDXTWoo;S7u8cG9tf_E``#NsUI)e-rK>Af5dI0WfKL+d z`SMh`diOyP#(J_d7ZqrP(-uG?Eq=b2anORo`)`2}c@zQ6_&dwXPcV~C9=zKg(=_B_JL$$i5$vtDi!E{3 zCjMu@(Bzsjl=JG_xV52*KdE16!3kmzqY1qT&dT;S?_b-XN!<%z1wCvl>*BKEdkm&E zwRXdOEwe-TnsaBk*?CVQ&O&X4HMe?w^UPbjbD=nORh_;qEU0q#yK(=InO?%vEzTc5 znuGzIc=O{(fywabAt6^WNkv7)#$+BR&@m-$^UT)bgo`4qFLf^ZFv%sP$}MN%9uAts z#T{*fW|koa*Jt$`Lz!3rfyzR3+L?H{Ib^?eQaZ%nbuf}EX`u`}+{ga>ro(xw_a`n;2M;HZkQ0bnZ_oCNAB^WDeyYp}x$ew>1MX!$i;ojXu zqZi|x>$TU#%5d&P?YWG_g)Ti*2qgWJ0n{X0r=lER>-oJg3@~QRTS`4?YIQLB?H*qY zFO#(Py=|7M7RR+KmwMg~%NA<5n3R>t&L4xJ{BbdXVH%fq_?wDZ_m#3bJGCYc1zHQY`l#DkXH&r}D4oh83^=ZPAP{n=6? z^PWCB=Eh+9(@X))N{RcWQExmee*dSSpeHpB<{=oH$SRw{j3=Gh|b7J%{&UM^X`=u>VE%_t2hfb87cc|+m z(9Wm-@lF8Gi97(^TEN|Y7A3qtjBHHvudN1K?=F4sD%!I>8}!zd{Ag1o%E zzJ9YmZCwAsl7{zYYCvE!%@s&Q{$LE;YiKS0ry|o8Z~lOL(0lC{@>k;p&AtQYjtcbe zDY#)`PF`MKRG8@CoF~I^BFIJ9NCG=b-M|vBR571Bm?>Jq&vBQRM)RdR-&)@-`e&+e z;YreMgSZb^wgF#LiQ=?a;o>zYm%^C=6;7u7ZP$TlH@zIKL1z z_a+xXX66zic;-V~j^GX^I^bi&)_S^Rqu+W!`p(9|ugIDRlUD0~0!N`wbU6|qzXI*N zt72h#8L!u@KY;053RIahqsIy~!+0FFmw{4y(OLE>ItIE8000#Wl=*K3464S#LkWnG zi5f#zpvgTj8n@aUPD;{5CBpD)2|!NOy7kX_+oMnx#$CR;DTgm|7_>epm2K}?d zM^8aG8bBI!AfAFCV+R&GJ^viGzY4g`>YwzEU+Rzamo1=+fWJhhE&P)wL87DvZ1}<= z=cS;lsXC(?t_r#rFK~N22@jXP(4BRgxK~wR^i_MO( z3+EMC!i#n55$l1+B%W-r0m!#d*r^S0euuL)B!l1H@DlPmJ{$I^8#jize-okGZHytZ z9S|WFCRyZ7TW&UseCCMUUD}`gx}cQTa0}7d^-|}omyyY;SDee~3=tH5MCioU(^~>r zbj~iQSpU`yk!lc>_P-py9H|~?HCRMJ6x?k362Y zNE5x4ihIKby8Z$R#yxbSk*ucWk%e<7XnU3jI^52O*f2exLqyvJe^;`Kw+r z990cb+#uJ7ooo&?~8EVZFW3Tt{%w?Fe2c_+ushZ?z;Oz5j#O&aO;sdsetwCIb0 zUO3*$D?J{UMi(p@ekBk1;_=rriq@q%yesbH+UECBba=T>?( zDc{)yD*~+H&jkDwYm|rheqkdVZMHBbUZ|MQ{8xz}@2s#bsX71UZ~$x;001+OpW$G?5)F^WvoXDn317GPN+B2AJm z;9Vc{{qfmO>LvIkFz>sE1_qc&@9xS#m?0M{OadzO1D_gvpA51&Zqi_IGJ}~2r_k;E z`NIYQglYb7sYReMs^W&Md^oSf9CwJpF|IB9It5cNG(M?&U z=q=T;*A7O|)1`THQ$N0OQ9E4Wto#(G=4m7XxL$NVH#bbt{zvbLeteP0loRJVBJ#NQ zTXd)wHaE{DkDQ*<+Iqb5?Ng8X$3*?EOC<#bEHm@GC5|U6S>wvxSnc3EVNzMz#y@98 z>)qS<^nwBWJMG)It)F0l2~(V*D##S?YyH_%zNxH&gXj}oAs>Tv+m`{$jmL|W>#FFT zZ>HEkXy`%*1%^f;O*RhWz15SI`(TKPT{qG$@9DsOG9df>&Ok|NBS)u(k}FJ7({(8$5kW#i!dTju4gnTe)(6E;K7fy%5aPd^AYc3_j_qqh z!p)$lGXBuf0z4@0Ghe~jpTHC+ZRg8=kq#)gMDGlHS)HiG7)Z?ocEk}^qV(}aN`h}&h{u=ohb4*UQXUdnw3m-@cy@vcOk;H_mxX z>ths@hO~~)Gkbfro&*98-KL8Hhr8O&hnJCE#Ha$0ON8bD-IfPf<|9*%uD>t+eOOe_ zs%fSwOwHGqVDRf6K~7f@TC6?o#4kEaIs%RvtG<#ybUTYrc~aDH)eXD6SLLCsTJP#` zF~>e0K-*wz*ttrKI1iZ{-5z7qta;|XDY@?7cz2q6P;GZdPH59Aw>Ujt!!qO6zt1u8 zGrcW@XYV-GXP$`Rs{eIbp?E}bzra2`3BTvds+}WiUz7-5hMS83PJdp={#p1TRieFZ z)y1bCo;AVC{cL}0FDD6HcC%h}PriP>Yx}CjEAy7ODZGptysK*mmClXO6MV5MktzQg z)k*Bn)iGeg`*GU=bv(&?hFoY7upVkTUiS;Qv-OIz-yCn2+lRd9C>2I_leyR^5f4!J zy7~;xT(HqFKR?hNT4G#?wT2-%hEC!NCs8uGd_Qd%2C%ag29nRl*%$7#HxwxpgbRw};y|}G+ z3V_>dWOUz%i?FxIqfr_yv8r^c%gFe&yXMT7srOvtcGkQll9bos1cm>Ee=#|%xkWKX zgMpLr_hr4{#K*^{6p>T3u&_wPd;ccq_m%me+*M}~@t*CIj)V5I{vPMEg1t%8RZSC3 zKCn){HoUtf>sq>}-=Y`WaFX{o)=91;Crmer9du_}YtNjb;2G0FylLr$S2+bf)pgG2!@Ac};PbRDMii$$=7gDR;1}w|VoBH>D zpIr^AHaTIEM5Y*Qsw54xb|jSPwH<|5G|0>&#he4x2;X(@aFNUOT>UohlwnV--|Uj( zDmbfXKSrmAW}FopqoTSK2a80A!JKsPo=VDC(CG&Qc;9TOb8)HVeCdENtSGb!Nl0NF&Hx#Gxzl# zTF&QuKi~Ut-;duP_v3#5asD`&_wrh<>v=t|=XJfxoGN^Gzi=7bSPGj^xMp_5rnK2l z#cm@Qq9kNn!_{&k&ot(A(DIjBOY>m!i;o_-a9N#{b^h1@+Oj0S7mgSZx_zmjK1-gZ zbh+fE9I5R}Qe9i~mSSf4efiDG*Xmw6YMf!#j7XPNi9!#)r%SP!jsk2)m>lJMfoa3l>KhK zEkEyci`}00FxG;z#EMy?>@lVOV5{&J-kI@qk5N%5co#IsK{5TE!^?PZyp(kFY)KW+ z2GiW9O%xJSu2+-T&dFQli4?23u&UlZ#0$YSaQx`evfDd@f`0J;o?*uyY!&2FV%A-2 z3b)|J?Ka)CVvWc;zrFONZGs#IP9mo8eT$;YgwzeD=`O#BJrDN3g?LK{tweAJ{AXj$$q&jsdmtvfG zggQIBXBfXZR<3xI%$_D@oS&Jf%dsE?4;8=(&-@q`g9ax+WHmy@#w>061Z#lPu=SF0u}LDxY3-oxx|2PEhn2O^pn=FFSjFK##b61bzO( z!S1_^qP}_T#IuH@E|Wv!XwGExDKjI%U?1{anPR`6nkk)Z!K;g&CkD@HA0b4V)9B+J zjuwJ7%8bm|ZTs<6hsK1wRO}+Tes5v1xBUH&<+fpJpmjg1e@7&{%t@|EuB)&XOWx~d z!>n=SCC{_nI?_1|U2OB-G#r?|@flh3mc40?l+g>BJhw&XscD>R-nf36t6RbTTD2VO zIOqSq;84HknL3y+tOS3D{}&DppOLBNVeY?b&sBS6Rg~S)xSgv|8FC*s3M_-0))hJD zsiX<;9*RU3w9IZdgCLacXCf*dPA(!Pf*(Cb~}yXIJ{s;qMO-R|S;5K)Gsh zVdNuZk^0*oZ(RFfboJk=KA2r9lLKU_-jwIOC4Em=HD~j73%a-M7pxzYBVd|OR?5cp zcm&@@fQJ}j)jp7GHwXy{*{rZ!kL+O7?UUmB)g1J>>xC(yS*ja-gCr)9ZIdXlqBu=8 z3%}v0iOH@fntD4U!;-iD_6p?*$I5=t_9L&xX$JV+YKYCxmozj=JKL<0?GAT4vz@(F zRf+9@myQu!gf^&0o3inOpO&)+n++=-DwUq{*+%vOq z=Ou7&R`JT%L~-G(wg$rXZf@6$H1oLNq%PT1MpvqQY26M4ilIVZzK5ZDwFZV^oxf)3 zDLFYKVL_KLKO-Z_#^yxj(%i?pWl&M?5p?)EClJp9`V|(mtWm0z9jkbtv%`Ra&~;Seq@&F6H@C&1Wx;F zhcAK;F~ox@zg)XrJrHr3n>Ob>I+38?5Wh3@APT>0m?yUR3yx#`Ib=6VKC)5VmkXm? z41c2N628}vaC*UXtPcW3pDWQ`kUgofAN#NZc`iW1l-l0pI0x1uI_)B+S#3GvGY8JbT^zsp z)N$5iZGh@@o0QK?XjPd^!C3x#Jb=P0U1YRx+lrhy!@`k3h50`V$Ga!Dg{l7O!=BuD zJGSf&uArk(@nKg4hd~*S3>5j@K1~{YYjhbDBa}VeyXHm^OcNLY?p1R9bMHi!{_aH# zjDK`rh8ePlZ7s@AB#*~uT&V2c<5hpGE5_SzWAXGu#{gZwi6`R}(T+dZtR(asA;KhB zIUZrx6HHFcoIbO3qs(e)aD#+mA1n3cZS;=uTefBFxscU4EW7Imy++-~W;-0^H%*RY z*1FzyLUYP_%e2vjJDvoUU;BE@f*Cl+`jV*|D3nf+e?iZiEX_7>82g>a!j~RC+^n#{ zx$8x3v`A+$DZOiB!=*r8+2;bM-< zpJ(~C|$5~#uyxQ+L?*>ni@<<-Bv#ahXdA*4D)MK|{ zo0=CQv-Dxn8s>;%EXTjp+XbT9KTsNfA2wXlRR+=B$h#_;t_Un^=c!iby!JvLHMGLQ zBp%v`7|{ot_xHsw8PEqc0SbRNwk!}AMeQh1i@6@C24@LO4PT$So0MPI-d^Z%(!|7s z*;S4HozXr|8ZVu!4cvLoV6z9L2ZiiBK0VqdG{tCf!PTAlzH(3FvDb2us=xp4M5(XBx24>;f~ zl(^Nvf}9j@R&00HQ!4m6ho@9aw)hWZ87a+9_E)b7@R8Z-$6R|ONI^2@I6`p1HE;y+ z&ywMOn-}pv$-f`#E6<|wGj2E398}&q)5##jlH}#me!r!V^1R?}uT=AIPCR^Dwsr=U zktaK^eaWSi_HgnutTneXzOJ+?{eW3xh=)i~H7L$-;Sv7a7-Pvm1VRYdEdvU<{VShn z@nrr*T^073NbCFM-T5>6$q)rjLTmjyYd-$1C!k5oO&OANoawK*GIE(ga{SvU<^bd=`-M<=ip$w7(^>;Vb>$lJ5RR6wg1>Y)+ z_fX|{1D5Srk?-XqR0g0P)6sIJ!C}oU9{!b%WVf90Kr(rKgsjOHHQK!}`4)45@Uk5o zFTYJ_tMlr67>PnSUY@O<*IKM=i%LzPW;ir>bbeZaLtMKW4wvOqCfG;rx$sHn#^(sc zT53yTYjyb-UNGbFzg@x#=;!mN59PCC;BcZ3+SHTnCA_2~wRooJk@vv+J&v92<21~? z_qXZS49p%@R|w;dm&=wi{~OE7Fy_uzHYr~JvVx?Qlv;X&hoFo&mcWZzk+=7*d3LQb zQkLJbN!cA^0|6?f?283E&U(moiYItwB#YR)EnIWCWb^CnG%h;>Zx^)_;kYWXv3oCP#F>@7bW}l5L>B<*nUA}d3Ze%W9+d;vz?%Q~PthoUD zF-|kj0=1h0`(%5wV(?xY!klW*ugJAh1m;-u1}Vf62E$ zKJYcu=F=s<-wo4$0Z-gJ`9DO!Ht>bgG0_k>BGk^I<$1Hpob`9skY?m6e7@bHlmfK2 z(qaw~i#Hduv$e{+`eUB?eB&#-!_PlQMejqx?To7Qf)$c&ue0rs@iG!@Zhs79GE=O6~YNn7kP#CYIY2Ni0X{=IDKPMmByIo$? zEjbB2MRxEY|5bXw5_2fnINBj`um4(>3L&x{t3&r~N=ixsbj*i-dEWYKas<#ZiJop$ z&yXS5{&!TgdIvY zl$@C??wy||;kG|A*}cK|gZ)I(jVR&@k)dup;L0Ro&o&gwa#$m&p*MGzxS$h7er0bu z^i?){HWd{Wb)PmjKH*KCGj}wE5bX8uTqbl_8l>tUpDk&*&E5Cgej;1RFVI0I4!Zk_ zhgY1tUw$4KccQsWq;XD84pGdi{fttKVFe6W>V0ygIHo%Gh3T6&$;nqj$dUMuZQV0? zPq$rOvdUf)J;>LD{|UG-7(FbGy|UanmY0jq#UL1zl6e&M^q|vuFDOVW_mtnV@4|_R zB#a46k`WAM=qK&8bJ>~@8~LXphcxR=7z?+NNbzTqVT2po+RgXUS_HSqHiv=*FF zTH)PnY~d?+F2nNh6T^>mRU}LePy8_pEmm%Kf@R>>jjD|HFrB5!nE7D~13H~PTzW#) zds?8eca5!sgSp3H``*vtUzN!-H9Pahrzf!-Ac_4baY7ksm0*~T1enZaX77J7>~RqA z^@|$nGB|;1D?I6CJvSD`y%+cy!i_u%eWbJQgKGEP?e#n&o|Z;{IOtNiLj9&xV_XUl zRj1_?6g+NwcFUJU31YSM@=RsQ`%hP3U%kQMWIJ7IRTF@4$k~d$btJDue#g(5#V_;w zxPb8N%m-bsyZWpt{1Mb;lxddcy1BW@h0I?Xu-N4k371Uj zPR_R(WOwkHds?u%UhPopZ|io!shXc%g(5}h*^);8LLw5lO8Sg`*(k~{UMY>iv7!wy zWJcxZ-^xq!&suWc7u5(&;q!NfPY}~u3pc2eL(SjX%~aF87?+iz&A+y_<)`H3<-sS= z;$FYGY0c>7cX>=Hi`c+v(XDygL(eVa@ZA;VO!e&fjr&MIEk7cgjHAeMN`aJ?5-0&q z7>5tv8SPBH+W2@GB(x^|2x4zyata*4u5$r8?(>L3l;hMIkxq4^+ zjFgs?jMSp#HS1+7oz}UTXT<|i*FSkArt>){O>w$}lHc}-w}dZQ7ps;GjMQn^C5+XB z`XMNjQzH{%f zJ+i8|=UmPq8P~&qZuA$fNr*Imj^yU_fmuomDsW47H59Vs)ihS8CmUV`fy%iJ9>d-E zAslAj_UiOVtHx`??5RueD4vY|itLA=5F=Y`M<>IO6`Q^zhOB5VcR($8o-*?)#cd+r zZME0_&_8_kszruQO0KLVtgDp`N=h6W8fu1}$MaVA*!F{6EaB5V7@8)Q5H~!$|4RL<%V4xMmNzt?f4ixvsVTccbO>4X z65-CN)`OnTyS*B^CwC>6n(DCW4q(i^ebjbzQSqK?GZQbLytoB#&8PfQ&(?&?`oI(A z*IL*_ZLqMBS|p$a#e(8qY1%2-^}{LeXJTL>?u~gk3tj0&Fp0Jr3HnBIa&j7fDL`W^ z$s4AfSx_mat|8Y4`g&%sK=^g~kdgVj3mVC=wVu52w&D>K4I5-XUbXOL9lHcpxh$=d zhDZCa3e`#4-|IY+o*}GtGgL$9nBGjimh8i6k|Uw<(YB+Z*Bl1mXpXD)Lf_J^UcEYW zkQjqu&s=_gbGe@W=A20uX)Pc^uLVXEmH!n<(9TFb`N=H%uUd!6ZIyCJ=T-L4e*dZF zT6#*f-QMVJ?Z`3n!e@U%q=h#tIgX^$Ab#0UyQ=5NMudKnteOCGk6!P-N7=baza{9u zQmBG|g;lcDCBv`xysZ%N-ixxkM5~P)OwmKY5ipa{KU09OQSs^_YM?EOj;`vRUX3z2 z#G1VLUpP@D$qYVJ^wOOV)iKG2Lmxbq-atLtNmR>`eb2ryb2WM=X9gF)UmnI1F+D#P z3@Rf)8d@UuTN5}GMd+er=i3`@+!iToVQzQj$}U(e>d#IlrbfL1!pi$^y(d18y!JV8 z6tK0}^(g$CU)RR3h|9!OfY*+Asg`~0Ox8g7c(QJ^V2dHvd>K|apY%!Don)UQVeZu% zo&?8%%>>k{On&(sX?{IfHCkur=>ymAT!7=m?By$0R)XX9k;B%?@}o>NB*UMJa6apN z&l3FNNXmgu-a*Uquq>cM#2`~wG?eljzhv2p-J1_y`&LEutWb_o{^q~T{7qV#nG>~$ zf!B^v$=iy;FZo}o=9Y<=2joYioAEcnhD$|NkF7=dD~Pd$mDFO?HY_ZMm%NC3mJHtl zF*szrGvrh@>zeF%Bt)Rioe((2Z^85*Sr7vEKl`G-RQS>t<`w2Qo{Bp*F*Cy}s%p`k%&s?? zIwMax7!LK$cxx@&mf3(E<4bxm@pk-ch{y(+!tpm55NwS#2gQD4$|a(QpKyw+1Be!;Y8B z>hSePGkTe8=(oBivFIJZy9C&#&tR-@MV*4hw1--y6TMaWg;=rM-VNGh{v<40)QU5& z9(a`B*Ri4nHkoI~Qy=z?;5oIaI!1u-VHeWp_rUP9TSd=98}Szn?d`0D8b6;H^QR}n z>qBY-dg!cVPdvpBuVK*j63dk|cu4yYJJY@NM9b^^@~+^IlmH{3P08?{l0! ztW{@;kNAgv8?9EbSbsX*ZWW#GTWZ0cNXlr?DJvZ-pyoN8WSIhUs@z0mtT}pTwb{me zZHGuO2c4EAxZU;#Q4cuX8)eOM3XO4{+rkugs*IP2mQ_k%zrG#O#pD-QTPWpdT$B=6 zMYtbDUjDNF;W^SOM2-Si#yuqe^W^q2f0=}3D7#|;N4jD`nRALIK1!jv8Waxn0`6D> zY9UVFQ}YTLyRYA<_%T(gVt)KzV-{>@3w6#79`+x>2fLS9xm>ZgAAEf$>g2F;&m+bi zi5O2Ypjr>8%#DysyUTHRJP322N~SONe0of+xs-|KKXmMW&EJ=xkFmt<54Z3BJ?gA{ zR8dB1ubx1-L2{!UZ6u&V*uzw-HVxTAcE`+OJ$7Hb$}&Rp(LX5kKjHH~(y;Eo%@|6$odf-hM6`8?s(WDiA6UcG`CeJfmOK39 z9jmt<SxaLPTvPI^Y-hqO&w9z-*xo9aNk=el+!|4TqHrRO+^%L$cU`T~; zkdXO3`D~&Zswpv?*0-#Tvfx$Z`7z=V2nr95mk6icy&BTiDRpP;Z3PQ#-DFqp+}}Qa z#b*Hgc0)fd`zRH!iPQY|L$)e9AM)X#uUx)7V6s!dVO5k~;ixWbuM{xeotylF))Cy3 zD$rQ{@7U=N3yYWqVOK_xmrPJxChYu?Lpgrqx020d(1WiGloRP4o|LRLvvVVv7$$+^ z4U8k1`7v8)%7Zi--8D@TZLvH{@S9i26XtB4?5j4}qCf$OANAvd&6B2}fOIUqq;Fu5 zX@Zgjeht!G-0P(f!h*!@l>A71x|le%GX}uVFv+ld{~5(P3ed0zOjf3+d**Uy*e`UN zyHU&SRZsp+HoX95XC%>opQibHhOl27Q?>bP1aeA}^aP|>$9oopvF(pq` zE#zV>c}<$Lu2IpPnc9B0Y0Mmn+$Vy8Q-+#_CZ^hwkHT5n{Zk{YF0%t)cy?jmvxe@$DU{(0L&w~}O3Kw2X z2!z{H6ZCJk58df#eAw1o+M=7ih0= z2E1^^N;{x>c-bkv1>u2V?m|xIr4~%D4k~{K5HzRGUUH<|$ctWf>hZtRB{-R1(j}57 zV2%Uq&q#*ngBr!Lxn%slZ1KT^D6=-N{^*SX)nYI^{I-&&|43;l6^r~D!<>+h5{@+d zRNX(BStbv8g(3m@Oy*Iu2^(E}Z%WB{ZI)uHe#n2i(VrhDaLk%m;}CYE{iL|dxibb< zld~wpCrB!3C2LW<^b7BUvJ=*8QQ>}F_1U!bEkXbL_qA9-^bWF3b&bleK-TyKg;Np@ zgLib~dNuT${`hh=KOafE;w6kuZ^saD;RAI?`R&)(35KXnpQ(-yQ9C!;#gFlHgD}_f zA>uIJBwthgk+4HTx*vuC;wj6(MraRChbju7!lfXRO(>T=5U5VI*kI{mGUcPi;<$RV z2+hng4ba>s^t5Z$ydM__nXi*ZKszJ?mF;f97iq;FfdDumy=c14k6(>x8N!^=(0;nd zs&`k?i+X|1R~NjIcddPEU4iEll7G|K^i(V!iN5$w^kL|!7H-}n8)VI26jO`mu5Seu ztu&-ycY7#|F$f&r5Fiqq#lx=fx(@T8nTN^hB3`fD;b?AY`2z*%@q%BiyElDVXSpCI|TV2|BYg^yi+T>Ioau5$wlzx+(;pO{!kH(2i z;Mv9=?5{Z!^V`Kheo^QS_}+puOMEW&ZLSID=jP;bqn+7*>R|s1mxu&?oSC5~bch_> zWso=}w8!$$U`83=Fg|pw!-L#0*<@^y7K9Bvc7qRM(vuQK*NFW4us#!&+94_vC#vtR z-G1ANxE>qW5LSX&*rGo;A>hcBUm&>*pjyx6yIx5?vm4LX$_Pil(oasJ7&+=DHIz}@ zEd`Dhb>o%jA^OgB0Zf)gDZZRJb=FKKGV-In{*0?eq31=P;OugPK_n}2z^VJgWf0(Z zt$AMbkf+a`Pf&7YUGcCP^{VphKzvl$>8V(L-^;0; z+mV%(^$JKja^vJu(yf0j`EJ`T#H49-3EeOqxQUF~D}-B50bY6<(l!ZcY4+vMZzjgd z`Az2T_M2?kAA<`fWv$99+)T?`U!J6+7$g0$-_WJqF=$R>-1`_P30>YiMb-v@9ZKk` zJkT_`x2yo_CGtqXOtqt5!z7>?cg_ViFr6tPaC&Vm#DA*Q8%?jhe+RT{W3>Xg-2+ao z&Az`;HvKyI%8CO5`0reRIjg;2EyoU8ZcDm%vH_ks&4U1xI0=!pS;Pb1zGpU9{n(RO zLVF&&H_{?~mdu$aAJ$c+8&=oF9@T>NR`YJ2K_(QrARQjiJFnmhCq9=)SBXIX!RJ_3 zkA$xXNF&dQRh$FszK}+hCNFwmY8d> z0fH%eewHpJ>e22b6#`uin}nzw2}nLC!kNX{wWR^PsonFo_eJ|Btjg|$A5rM0JZ8V= z_p8e}wX@O4*fg>74d=87?fy8LbejH7IoWYGiEIM1^omCnY+tXGS~G(;{N4 z&-nYaN^6A7!$R#~Q5M^`sI!0ep-AegegCj3woiUqm73>Aa`k2)KHY_|jN(=2OiaQ` znueIwlu#gW*W++OBtw>({-2QwZ&Feu6)QqdIqXtP3jKD`w%z_-ZBAcyzv)>4y z{pW#)9erT-PcL~i;4UMNK2arW@!~gmk4~@tZdd`daOKe~gNndUIFN8Ii}CEf*9J#3 z$gdGm$vxmbJu=HHlWRHt1kRJbSMi27SjH^>z&ubP)+Ib@<2RZ_=Lgh{(+TrJj)iZ@ z1XdN{KzZ#Y)Q9rLF3g(x(1n|DhgINndDHA=0|bL zX?NC|m&MFf&GKWIWvRy>Z2BtiG1lJ3%q5N%LpR3KVvRl109}L{Ar~}}q()B`1QJER zX^ldA9S*}`_ihhSd6(eQ4!-(~up_SaN>VibJV@yidf2$UzUO{4r?d4PPWN+^$MgDQ zQq|Z@it+SVhq9)KiSroNdn`|C1>e>)YBN1y#-^Bg`n-tm)Ys>#(=GAy$o?QN<2(3r z$4ZKL4q>J*YVOMm#Z30y?ZKCWLux<6`Da86*RRKJrGwJSSeYaJ!MJ!LdQjpePNwq@N550=aZ zvMFtj)sH4jy^aqa`W+{3RliI@La#+@If@o7IAXV#rCkihWKU0 zw~dwDSf&MeN{uz|$wUWL)Ij8|>;{gZ9s z3KOP;uhvEy|2J4{TUuJE5Rzn_fTt1FAWPewiYtDej>G8!Udr75<+QPJBsdUbe}(w$ zY`LJ?1dw8FO*75g7gYP!*$3*=H|)MEuKiq~=-E*2Js&kJFDZlRgh20{`+v?I8C3ah&9VTGv6m%XV4Z8c!diSv~au=a|c8W#IPFlBp0p|2Ke5oMS$ zy1GsrvJWQam@f^wXtU_wOw}K5Y076$Tp-aDjhk9^k0fej6X`kGh;7_);~OL*P8nog zQm7wvJwsS!$C{MYl$>yEy8Z{ooj@dZyK z8ahHnZ2hYVy9(bAxLa*dCS@oeWwtRx+kAUvv3Q02$})Em4)dt5ZA)qACztu-Ax1my ziE@}3iKX-(;m$o=IGp#wBSCEZZ6W18lF_{4uXuXOL-*T#Fvj{uPOWyKm}3^MW< zHcmSiKGvFPGn0*fY}jK~AdBKl1u(usPmQB zm)T$_AR&<$R5D=-az90Vb5lU>KT*n|pQD6UJTi<^1;!!LzEEc6=Q|3?lPz4A2^{s? z_qAWlJUZOWJFL+Vl|rHXwalF;6nLhXcjm;-1OX70j@vp*!_CYu#NqG zOFXuXUNKTQS(5;Hcw`A@e)YBAap6uts}Y!ppRy!>{qRo^Ta~pPsEQ z>}FW?aTx4x{Q0-J?KN>F^wQ7_oi0K5_}H5tCg0PPFAKCW*Y04Pd_oxxw6W!o;^n;JJ}V_bx@~6 zax(u){>z)}%b&|teoK9*Od^FM@;x`pvj9A(#|0T;l zSBPR*pDkG38|fO^?H8~h6}|TyOmV8Q&s@1icw5a}?pXftEV8L~C7+)gw&3J@OyrUo z#f)sR*iJ~YC&YO5JsWzJGM;s%VF>Z#Lv&HhyU`0|F4U~_ao){;@SDH((vqm*ymVKD zi#TJ@b^S*@$p_;6@e1OtuwnZ}fjZMGSX20-R>(4wU`anJ+=2?D0Tf&U6l;X=<2=1E{%CcCe$sBd6&qn3VN97*5r4 z#3@dX1X}SxF|Ho?gq)GM`!ZXy*two&4eu^i)stC$3Or&~WPacQQ$w$&BN3W?|I;47 zbntt}Af|BRa3LBL9mfG1nK=rLSseKs^_=ZM8$g|cp&OpvahTlUPD-0+QbH`k-yj~h z!v(?D06}KD#U4Z*gq>sj!s+8?Wix;}zOuRBZeEm#cGXv}a|7;hIN1IjhenabVMJ-g zj3`ByOTPN^9zeUNfmP5|uk7-)bJ2f4tz|J=|E-6O9>2l=X7-c1+Pf4$;%=R4D`hGe z*#}xH5GZ#m^z#QEu>IX*BDE&I={d`O4UaCXk6CGhavAD@Xc4s^$HyHt{hl>0hXKaW(-E3{$aiD0WReu zsRLa9?&LEYF=+2&Evw}j(~xNIn_oc^LZ~;%s*zVm9FXj8L>$Oa#ZZF%;J%~(L5+3~ zH~o{(>YvQZSOewH3^-=%D3E0^L@pQJp7FWBX3g;aOyq1(QA)ln^fQb74+iKmgkqS7 zQG^vQ<3<2}y3sc7eUy^78cCUsz0dx;TloZmqJ3~E^|DmYiaKay8X2CO#O5v!>?*B^~WWVJ3GxI z?NY&jNME7&r4<*mpZl>AD)bzC;2gdU{8|piW@ht;WFk$XD=&=QE#NE;?KjaAT+UCo z(k*3CdIwA)gtl=zH6fqg8oM+rCx;`>J|%xJTysZkdqIS(MQ0`$vyC4ot0;r~@Zk1# zQ&Gq5noI9iT0363k{ptggu{t4tQ`mF0*u=Gj*~}N$0}K#twSvYRiF{>FHQ_=8BH#c zTeJFP70R#>;`UuvU}q;-?Qdx(EtAIz)97png$REXItIwB5t6s-=enlY_?KlDHOiro z{o4P$iX<;BxG)gvy+%k-pQ8LF7kAmN z{lYR*k%>cI!UC{1d~~rYA|dJIvwBC^>2ixXhL-eSYFdp9%cW7M(vh7(vYV1RzHvh?Tun=cgLvz>B!h5ME2|YUAta8hSqn7hZOi1#TpfNCuF{NHu|?;j2>vU(*me zqaLVdH_|;~6APd>HPiC_%{Dl-Jv>BtEH@l+9z!*B2wy{nsRh*H7%cOH#B+xtdb1i3 zU2objoOzNOBd=CkRNn4PvP*jzKiYIM49j{|3)!~Q1ywQy0wGF6ubUj*31LXfjY!Zk zbjHy9lK7QJGWsAfsL33R+ zUdkKk7W`1uq&l*AD&aj1A1MOKS?R^O@JvnoXs`=qrU?YD20S2V zKXnG9EL+SxPX`*Kz8@U=*|k)1Tz`yr`s{Pt^s_n9h;L2L?GCzee}i<263km90HlRj zy<+-0V-5nQA@C!*O)Mg2o*3%c{*D_*`OQ>WOplqOkgl|=2+f4?aGcLYnvU|Qq0X#zMXn>&Y52EC;;jv(uJfxxqR(?o} z9?%~R!Dqpe1cF0D64OQE%q z(z?VVI1kZ7ArTk=K{Rz+@>0+Y;Dlgj>?*ut4z}Yr@35>ViRubf0981-zO)g>Z0I4UJX1c<=$ds}tn1NE>4HpwsS~qdAJ=yEmxmCIw=%9P&PGcb0ZgpLWB=ot{Y~Lw-YcNBp{o5 zj+N;A?B|gkEq1cKf8HU%16pI>J(gQO!HbewXf10p$bSHvt@kBZ+gLM ztmIc2KLnE2d1eK=crlBMiqe*kir!>_lle%bT>8y&J=9blD!==4ox%VZoILUlG>140 zFwZF<`7X;Trl+xm0!?&PXde=h)q%u!qe57oY~U+xYJnc|zP69R&Q%xn&6=Ja#!0^ z?fO3oIgUjA<^TnQO;bQ|&f2St(Z?9*P`m!}jTUcW4qU1CNAkZF2-DclYr!mi3EL=` zt|8aHcKh+Hnx}i?{XhXf2+pMts#~~MRKus8LDLJ0Er{)qWMJh5wRK?c5%$>|Tw^qZ zDo1sc247i$G|>TJ!bn8X{mwm~rXkxRjp&{_E=HQk4JMhN;qpu!f*Q5ay?!GuT| zpk0$})n+Pn`HH^XBJpFx6w0*{tGuFx4^r(K8d0_VvTLH=_jQV7 z%#7T{F&3fw@US!RY5baPh%&{gWyy{vXJn48fXb$3GK&6ndUajz zU}c})DUkj<_hzV)kA-AQZ-ei6cb!gv3~M|PJrb4$Yhh|=Vf0aUrvYG{2Tb;~w%-QU z9HI{q6k}V4@s_Lr;sV_SoV4~llz~1j9*Dai0Uf;2i%Qv&KKXq?aroTt1vQ3`?Btc9 z9SD4n4NuD_gyd8i@plK-yq-&R3nP*9trcq|7k8qi*3&Jz2@8USmpA{`JK#PFN$#i? zSU~r!c(Q<^*ci5J@hweGBC?Ey);ZKMp1qvUN zOfy`yP|_y3;3^y<4mlJSB?4W~$GwqZmUCX=Zg!3Fp%ti>^Z#kX?^N5Il?+!BP!v!F{l|X)R zcyZO8y`-);m71{`!o3DcpLhK6hiwZR;glYH%{aVw2eY6P3b9Kz2oR`GpMu_KQIiw2 z78CoNH_9S8A>ks@tw!c9TE#cVREAvN(!yMLx@8m`Z~M9J|m)xOIZ*}>~Pxu1_JDQCU1K|_nen^J7!-o&IXFHaNKWV9i=g@ zlr!fJ5G`BJce~gb`2-hjkLi$#iMcn2uIY7lgcP(%MWd%ADEQS@FGU$XVpcUl;I3f% zXAaV~OF*I05P2`vhQXme=sccUroY~#jR>UNfzMhtKp4z z27OGAhL#o!H?T}aYPJ?D1r}c7`<rh0dfQs8QT|nvAzD2#uN23JaoJuaO}UV zuf>~W&`bQEGJE{EUgL(G|A{_a{1cQ(?ZO&a za6?>f=R2fCwOswrZNCVEQ7u9LZI>_J*Yf|wWS1_-U--@i{2!V4mr|(|g;TvKJD30T z1eUz_2=^T%Bdf~6<#_y9gmvK;LCJ21!f!?nne&FKw7G8CL$xOm3Ewivvd{~VFh5}7 zqoc^hAOXd!MxkuEbtnU;l~5(eLG=|z%d$b?SGL+szk#~aVM;6bhJ4u=_6waPG7-ui zqd+CLd0|%N2|ee&hQW?YW46&hFt^Z|;IBal}!uw%lS3_KQ6Xlw$1j5PIE1{c>~>&_XcY z`4hBsT!(-;=3bO5>&{RcllLk0V?!MCVH1Tm<*F1tCg?9M?iXFOJzTT8&C?6q7qN-y zIl?KgCQ^vQ4cxh6ChaUwIln~mZOZ&(MOhutbJ6~{;XgT@loK^wqkjL?lRM8*s zqXZ3wYBdj{_Cu;NTg%Oj-r4J{ICJD<N?kp0b7M!Q3Zu zck?&wcDA1kdsWfMoQvdf=nGP8=$BnoG*1J0sG2CW7bX4J#)S^HguAqht6A&IEe1l& zl$E_HZZM%XKg@>z|33^0=+WepA0cw)MYR>`A13_lKB&-!0_Vlg{)a8Q`9w2;1cE7p zA7jEbr9pA$0UG{r$%-z00{4&`Ez+5TF$L6S^R^N<^{a)6Z(Vr(vG!60?7COZ+!k+5V8{i6oH*Q zvl(EZ=>nsO^jUqq`xywEvlg(e>n0V?amtbw*fm!b9o)f4*=_g*>K@iisJ91cQSy&5 z<%S!_^nQhtpMXDF^<(OO`qu^i`q|087NCnM+^HM+6Uq@fMKGYL7+PvljZmxm5mp=0 z!*Bz{?_%lYyCRiO5xG+qspf`RTpt%8Bauk5Mz$aDOQJL zbU>S(wLG7GOO*AJ3c?`$0?_?$5Zbb3s}wZ4<#zq#HerD>`f$x0(2pf8ywb)0QFRG9 z?4T)7=#Zb8kKR~7me zsuNFE*J9X{k;+6goUP#o>M#Rx0Pn`rqd@A|Bbk7A$V@5|E9MVtc!PXbX3TUNQk+DP z6`}_xApzes1|qQX_+X{0^pA5OF)e$j(Am;|gGXfGE%eBk+7`IA-gNf{1EG-n4AoYw z8p3al5^)wYxs+fNFHpGPIz2gP+CAL^9oL7`d_(8k5ni&pBF_in<&HaR|4--&KU5^> z%0v#+KojA-qV^j#00@SKdgvOWi`U1^GM)yOmD6*M=BhDdW zqvfbW7w?jzY5+smLn%X$o@6+Z2+Ukq+B=}~l&ktfgeUc%9&cCf(*^n|@j{0&VYX=r zfiq9_E{6YD_(HjxETpWuV3IenV9(iI6Lv;2-i|&Lp=FT$Y`8v_*Do__8gu(n*q*W5 zE7zY!^n%)m;BAx$Wp_((*=R)LY35WexNM{JIYT#~oMd%NbAiD!ng2+EzNZnhAj^!T zgY!+p&X3qcN>okE_;k!#hgyzsSuaHR%Wh0k%kKVmi{GKR>yFTD2k4hnn?)Jj_hnC4 zkcM48?@D@;JMmd+BV@r{nuw+@+5}=-t!Ke9QP5n9z*04#zYX!V>&1d(D~4$9ZBM>n zw(cNT;D=1PDp%kKM4s4}HirK)zRMb=xs^{5K}9VbA2G~;l{SqefM#Her^w_F#2wa~ zV*FKZG4t7Y1#3_jGc*J0(`!boO_7N5&fIUNmuU3lO819*siBWt_hGkkdc1_?t{R$n zP%Nk}^Ou6b4TWz*b~{@10q}x`+z1@3hnAqwpf|L}(~t<+A$WnpJ1!hs{YrBb zV#8r*#ak<@I`lgJTM27cJa#9NNMdyv@T##IxX3Bd%FfA5^klt{6(E7j2@Sr&FZUmA= zN`x|Kv+#D%vC_{0%MLQU^mFxjX#h>9po!QJC>1_M)Ho&R?^;PnC)K`c8-ETt_3o^8sXg&V!~IPlUH2QbE0Lt0Q8dui-wb zb{k65i>x_eLGLTyiG5)`tM$1wfXr%s&q0X_bn*jlVB@5@+VQZx(Y0m6k5xJiC7T|P zX{U6!tKrPNw%5{yR8K=w=qC^*?w|@Gj3Cz=Jz{FntidS+bHUBHE|N=fGmJ7re*#@s z?PbW4*s@p1vV7~0Fc+=^5R{vu5{@iDq_MZQ{0uLbi6scpr28$-(F`z%KLD|P4 z@*8@E3S`TgG)mk+ACxvMi^Ji_mZt0W39EQsyE1P-3ck`F*(>TzZDZ4!>FF|8?d`SQ z{vnjZK&sJJ3qJ#s-6%G1C@EM2F6W{KM*=;gfz|ctUaw6nexfXj(I1tMs!r!^;oH3L z)r%3^{nmLG6ISoBO+t)b&{VKf(WFc@u{=>DmT*KE_h$odZ?yw6X1Y)wRXie zBBV{iEr6TWKJpwAXd&#c^2#~cP&DYk%L^T8Bs*X{CT#5`l0Ox=TbNI(fiN!GJnOPv z6Uch*I2OvBRr6tv>wB&bO)1duhCaEYS+sn_s=L*I@gFNcd}~E`=p3~E9ln_zT`>)* zf(29~!#a#AUyjN&hKjbE9Zx;fy`r*V5@f zRBUcFh>ERwtjg9eGD79ft97GbMvCkxZW^cL3pJuE`oMIU*8|z}C_M$=Z5D49& z>+;fGEtrZN|$iEK!^YVw2ldi(0wq!avciiL8T)+hrR8z|JljNkluie=C7a2+n>W4=&HJTO+1D2XW7*;NTLKV zn!B66qCzXS$H~oOuEyGMr@+;a$cbyGzHrKgoCQ3lc{6*8Vt;^*4;ICuLYNYba*KE54ajJG!(IkO-zcJSj^1}slK>K? zY{}#nC2(D{u(A=-e}ZneeX}NDYJ=<`&=9DVtS(!k3IB+cyB_vKj;C_PD?(|9+M2-=U8 zg4hrSR5Pgk+1d{ls}W#Rt5ouNZ*U_A0u-)r<{8w3@=*5aF;_u4``GYt5rSF@A*J7B zG1o?n5VJ0xA9ZAi!ihIdAnr_U7<4@`J*keK)gvR>uZtiw@1=yG{Vw{b4250It5ie( zU*(-^R8v6_VkS4xvje zV_kD#O>V6t8PgPwqXF`A5xu8Ohn_t2c!LQbTJFTS#gaYKXl3F4U)T%V#d9af?TD+# z?PP}Nane{uzsDn@+$?pzx^Yk>?dHov&anuWf$$~=rNu9)qIC>i;IT9dbfqc{b_ByQ zgqCozxJhE}3SWio{^8#bC##Cv(smBVLiJ!|*yP;~euEi)ce%l|O|hFxF9Z^;5j&=j zs{?hy8q<-7lf2DpH=9O2{^9~{a0|co03!AuN!PG?9Ar4cT6rp>1}JnMYjRm z-`4)_IgNucU>MJP1_G0E7#D z1B}p5M7*4G2SP2FTxp6?6&d3qCti!TXSZI}#qt<0l1vsf&u4J|$j$~UoT}@0Z6<5# zjx$Ff57??tr4GIkqQqzoA7U8x*aLU;LCnQnPHeZI)7S4LwGi8bLAKEwF$;t4)qA2$ z?+jH*Ayg~XXHa2zx6kSsLz50ve}|-Y))p+sv1JDiAtV1H(wO*o%hBH63Zm^f9MOr>~AU_86Tg4-jSEIg0GlAcDt1;|1I9_@*l`>kvki z?lZ-d>y@T9J`D!_Trz{jiggojn7=+^KwVlbZ7R%kO-c}nr0kr2PNcd(dXz^ut*)-_ zfhs+^I{x)H4UyulpRm`BXmO9AQ?lxu`Va`b{!woEvnwm@jg35V_SRo1Y*RN*e&u}F zP%BHC{BIt4M~6d(V_t_s!J9Q}`Rb3jhrXmveMUUcZ*%KewRCW}AUg(TMAp|0yIn@} z#Gk8>Qq26ON??XT=OV4t>MSbMFKI;T(#TGh{_7oi8|0QGhh1(g3q8i-rPU*Pcc#T|R+NeVNhoeJ2dyc3`m z_d%!aOp<(l*R-}{LU0r z2-JvyC{hw8HO)uwZvW}xK6JXubOo_1alW3QZ_O77^4co7-U9Fx_aLrj5?(Y1?1zFs zop)|%s4BMc57b-f3K+VZN~sC@%jp)Vr42^8Sda`ap^_1SCb~g=|`B!cS@Y{M`6WF|5kuqR~~_2U3C=Ubx3GIA5dqWicHcRu|OG-zzhNAalu;NhF3zH|32+j z1DFgUWb|u@Les#^`N7=dcAww=F(zG+I)7ub2%2kM0@c@o!^&GvRAH5iAA~LwV^*9e z8J0%^NIJ*Hw8#O;kK0G~YG!IDHI*gG^IFx^W)g6<=VglQ-)L!s^+!K`6w3D0Ad{C7 zmER^FRftn=w4|uPA1jIS?NY>(VI(i>e8Xzj=@5%32cn}SHET;o*2ncBw%lOL8B@Ym z&nWl<5Q}@@<<(LA--1`TKJ*n3zN7^q10E-EA6r!ie?RUb#Cs*#=m%YyPcE6jTQ|F8 z=XSABNGHY7B0_a2H>Vu(8U(t+rygvz(yUoJ_gi@&;U_#S+8i_^ea3Hcdb&Z@tV;ju z{TpzTXh>O`=hl_CW=XnUy8nYueSCai`N17&zD0`B#Lhz*fU8WqAN#7vbhR{BL zj{p5@5#75Zwr<+A$!qnDud=5EeN-S0fuD0uk0G9!+P6F1^6Sl&5FynN6wnYvQ_pu2 z^9o3kN7Lj?wzvkSQuD=i#|4*~6sumliIn?2sWc)omht`KvtP?)vg3!i+%BKSju&6EVH|rv zVsJJ2AO8BJFASXqn~BjvAtEIWU#_;>EUa{iKh02~->8GzN{I0R8EoF*F!M#rE{1F& z(uu;lfk*P-Y8Lw6V6Tn*%e_jVOEpw->K2wgIG>@~Mx-!G++9}H^2C`rlk`m?S2>}ankuz3Ej+%<|F?QdjBI0-V0Hm*lhgW2o+v0|M^GYX3jP~5=2(Y7q z?YW^UB(icTwzy>%FG8&OAz%z0CDPXiq;C!>ZvNT1pR;W zzTj#KsH~Fubt_PvrJ5|)=YLN^oqE6YE^Q})^Qb_WXoC96Jz{o0MNIkOb4tJQokZBE z9$lHNydeoJC!%Al6x0D*vkQ{w#=eZUjt;Tr?meP47Llm|fU;;6fj|k)5oG%x;s)Q; zzADF9&)bcuu6da<=rD&*V#ensoxV&e@RN zDsRPI7afDClBHX2l`oi@P~WV2Sk>H zYOvK_Tg<0Djhoey+45}fWY5X-9>4ZuGe1ASLi;0V4Lzkz-A%ghADV5DMO(M7Av@Ag zyD#fK_ks$yxTTYKPnc3DSJv6w^4IQ)3n|_qA7H-Nx2Zss+q%7Gq4oI1`RQVApl@z# z#qO&kCRuNV(Xu87%YF5A4_3AJE*n2a-&!-aK(74Q$vL0qWMj@LZ)pzQyTo$P@bjl6 zGdV)m5s126U&`W1gU3Il39>g~eY@f`cpG0+y@ZwUtzQ`zPrl+pZe?S3t3_q^tQN^a zg)eV0D)ne(!XfVO99n2wr+2ka25ZSvt4hwos^9EC>jNkzp5i&%*~;l>=xd5EC@Ox( z678u}R+RRz(P(;8%K@uGmUBd8OnX`lohj|-sbe(dhl_u7*FMnX1n-V$IeThrqL%T( x*7we@yz$TOYDUGErqQII_|*$9bjfwlp{XO+7L6o-aGackvE2RB3rqdt{{aBT62<@k literal 130991 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

=r>j6gKJwZhSTyk< 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

forbidden ownership dependency

forbidden execution dependency

forbidden execution dependency

forbidden peer dependency

forbidden peer dependency

forbidden execution dependency

forbidden execution dependency

specification
behavior and stable operation mapping

public interface

engine route

compilation repository

host services

external kvspace interface

vmkv

top-level binrwir contracts

top-level BinRWIR Compiler

vmbin

vmjit

x86_64 and AArch64 backends

\ No newline at end of file +

binrwir_compiler

internal jit

forbidden ownership dependency

forbidden ownership dependency

forbidden execution dependency

forbidden execution dependency

forbidden peer dependency

forbidden peer dependency

forbidden execution dependency

forbidden execution dependency

specification
behavior and stable operation mapping

public interface

engine route

compilation repository

host services

external kvspace interface

vmkv

top-level binrwir contracts

vmbin

compiler and optimization

verifier, lowering, and compiler

x86_64 and AArch64 backends

machine-code executor

\ No newline at end of file diff --git a/runtimec/documentation/architecture/runtimec-execution.mmd b/runtimec/documentation/architecture/runtimec-execution.mmd index f1fb4e74..a323bbac 100644 --- a/runtimec/documentation/architecture/runtimec-execution.mmd +++ b/runtimec/documentation/architecture/runtimec-execution.mmd @@ -5,9 +5,9 @@ sequenceDiagram participant Host as Host services participant Repository as Compilation repository participant Vmkv as vmkv - participant Compiler as BinRWIR Compiler - participant VmjitCompiler as vmjit compiler - participant VmjitExecute as vmjit_execute + participant Compiler as binrwir_compiler + participant JitCompiler as Internal JIT compiler + participant JitExecute as binrwir_jit_execute participant VmbinExecute as vmbin_execute Client->>Interface: structured execute request @@ -16,41 +16,46 @@ sequenceDiagram Host-->>Route: host-neutral snapshot Route->>Repository: find compilation by identity alt compilation found - Repository-->>Route: compilation lease + Repository-->>Route: immutable compilation lease else compilation not found Repository-->>Route: not found Route->>Vmkv: validate RWIR and encode canonical BinRWIR Vmkv-->>Route: immutable canonical Program or compile error Route->>Compiler: compile canonical Program Compiler->>Compiler: build execution plan - Compiler->>VmjitCompiler: determine machine-code eligibility - alt COMPILED - VmjitCompiler-->>Compiler: machine code - Compiler-->>Route: VMJIT compilation - else NOT_COMPILABLE - VmjitCompiler-->>Compiler: successful not-compilable decision - Compiler-->>Route: VMBIN compilation - else ERROR - VmjitCompiler-->>Compiler: explicit error - Compiler-->>Route: explicit error and no compilation - break compilation stops immediately - Route-->>Interface: structured error - Interface-->>Client: status and error + alt JIT enabled + Compiler->>JitCompiler: verify, lower, and emit + alt COMPILED + JitCompiler-->>Compiler: generated machine code + Compiler-->>Route: complete JIT-target compilation + else NOT_COMPILABLE + JitCompiler-->>Compiler: successful refusal decision + Compiler-->>Route: complete VMBIN-target compilation + else ERROR + JitCompiler-->>Compiler: explicit compilation error + Compiler-->>Route: error and no compilation + break compilation stops immediately + Route-->>Interface: structured error + Interface-->>Client: status and error + end end + else JIT disabled + Compiler-->>Route: complete VMBIN-target compilation end opt completed compilation Route->>Repository: insert complete compilation - Repository-->>Route: compilation lease + Repository-->>Route: immutable compilation lease end end - Route->>Route: read immutable execution target - alt VMJIT target - Route->>VmjitExecute: execute generated code - VmjitExecute-->>Route: structured execution exit + Route->>Route: read immutable execution target once + alt JIT target + Route->>JitExecute: execute existing machine code + JitExecute-->>Route: structured execution exit or error else VMBIN target - Route->>VmbinExecute: execute Program with execution plan - VmbinExecute-->>Route: structured execution exit + Route->>VmbinExecute: execute Program with existing plan + VmbinExecute-->>Route: structured execution exit or error end + Note over Route,VmbinExecute: Execution never retries, recompiles, or falls back Route->>Host: commit complete effects then checkpoint Route->>Repository: release compilation lease Route-->>Interface: structured result diff --git a/runtimec/documentation/architecture/runtimec-execution.png b/runtimec/documentation/architecture/runtimec-execution.png index 59596c292739213f1b2eba574a4edef44b02776b..334d7ac7c168970cca257f539d3de23830cf6175 100644 GIT binary patch literal 423654 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 z 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

!q!&+b|z(%&P+F6w%}PjREMMDe%|=@mLW-6*z2 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 z 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

=r>j6gKJwZhSTyk< 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